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
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.