Committed by Greg Sabino Mullane <[email protected]>

Quick trial implmentation of new utf8 work.

---
 dbdimp.c |   27 +++++++++++++++++++++++++++
 dbdimp.h |    1 +
 2 files changed, 28 insertions(+), 0 deletions(-)

diff --git a/dbdimp.c b/dbdimp.c
index 8055330..09e7b8d 100644
--- a/dbdimp.c
+++ b/dbdimp.c
@@ -105,11 +105,13 @@ int dbd_db_login6 (SV * dbh, imp_dbh_t * imp_dbh, char * 
dbname, char * uid, cha
 
        dTHR;
        dTHX;
+       SV   **        svp;
        char *         conn_str;
        char *         dest;
        bool           inquote = DBDPG_FALSE;
        STRLEN         connect_string_size;
        ConnStatusType connstatus;
+       int            utf8int;
 
        if (TSTART) TRC(DBILOGFP, "%sBegin dbd_db_login\n", THEADER);
   
@@ -215,6 +217,31 @@ int dbd_db_login6 (SV * dbh, imp_dbh_t * imp_dbh, char * 
dbname, char * uid, cha
        /* Grab the server encoding so we can set out utf8 flags intelligently 
*/
        imp_dbh->server_encoding = PQparameterStatus(imp_dbh->conn, 
"server_encoding");
 
+       /* Check the value of the pg_enable_utf8 attribute. Default to not 
there or -1 */
+       utf8int = -1;
+       DBD_ATTRIB_GET_IV(attr, "pg_enable_utf8", 14, svp, utf8int);
+
+       /*
+         We need to see if we are treating things with utf8 respect, or as 
byte soup
+         The rules are:
+         pg_enable_utf8 trumps everything else
+         SQL_ASCII is always byte soup
+         Everything else is not
+       */
+       if (utf8int > 1) { /* Force it on, no matter what */
+         imp_dbh->utf8 = 1;
+    }
+    else {
+               if (utf8int == 0) { /* Force it off, no matter what */
+                       imp_dbh->utf8 = 0;
+               }
+               else {
+                       imp_dbh->utf8 = 
+                               (0 == strncmp(imp_dbh->server_encoding, 
"SQL_ASCII", 9))
+                               ? 0 : 1;
+               }
+       }
+
        /* Figure out this particular backend's version */
        imp_dbh->pg_server_version = -1;
 #if PGLIBVERSION >= 80000
diff --git a/dbdimp.h b/dbdimp.h
index 968cb28..0dd02fe 100644
--- a/dbdimp.h
+++ b/dbdimp.h
@@ -32,6 +32,7 @@ struct imp_dbh_st {
        PGconn  *conn;             /* connection structure */
        char    *sqlstate;         /* from the last result */
        const char  *server_encoding;  /* encoding detected at login */
+       int utf8;
 
        bool    pg_bool_tf;        /* do bools return 't'/'f'? Set by user, 
default is 0 */
        bool    pg_enable_utf8;    /* should we attempt to make utf8 strings? 
Set by user, default is 0 */
-- 
1.7.0.5

Reply via email to