bucardo / dbdpg

Perl Postgres driver DBD::Pg aka dbdpg
48 stars 35 forks source link

Set utf8 flag in pg_db_error_field #97

Closed olafgw closed 2 years ago

olafgw commented 2 years ago

Is it possible to set the utf8 flag at the end of pg_db_error_field() like pg_error()?

diff --git a/dbdimp.c b/dbdimp.c
index df136d3..7462ec9 100644
--- a/dbdimp.c
+++ b/dbdimp.c
@@ -4526,9 +4526,15 @@ SV * pg_db_error_field (SV *dbh, char * fieldname)

     if (TEND_slow) TRC(DBILOGFP, "%sEnd pg_db_error_field (fieldcode: %d)\n", THEADER_slow, fieldcode);

-    return NULL == PQresultErrorField(imp_dbh->last_result, fieldcode) ? &PL_sv_undef : 
-      sv_2mortal(newSVpv(PQresultErrorField(imp_dbh->last_result, fieldcode), 0));
-
+    char *pq_err_field = PQresultErrorField(imp_dbh->last_result, fieldcode);
+    if(NULL == pq_err_field) {
+        return &PL_sv_undef;
+    } else {
+        SV *sv_err_field = newSVpv(pq_err_field, 0);
+        if (imp_dbh->pg_utf8_flag)
+            SvUTF8_on(sv_err_field);
+        return sv_2mortal(sv_err_field);
+    }
 } /* end of pg_db_error_field */
esabol commented 2 years ago

@olafgw , can you submit a pull request? I think your change is more likely to get accepted that way. 😄

turnstep commented 2 years ago

Applied in f113987a8e96bdbe7fb6286e953afd7894ec0618

Thanks!