[DBD::Pg] More UTF-8 tweaking; tweak tests to use the new 'use charnames' pragma. Use Encode to strip utf8 flag for testing.

dbdpg-commits-gENoVmVU/[email protected] Thu, 9 Jan 2014 15:47:12 -0500
Newsgroups gmane.comp.db.postgresql.dbdpg.cvs
Message-ID <[email protected]>
Committed by Greg Sabino Mullane <greg-O9fzpki4YnJWk0Htik3J/[email protected]>

More UTF-8 tweaking; tweak tests to use the new 'use
charnames' pragma. Use Encode to strip utf8 flag for testing.

---
 dbdimp.c      | 14 +++++++-------
 t/30unicode.t | 12 +++++++-----
 2 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/dbdimp.c b/dbdimp.c
index 5378244..eb411a0 100644
--- a/dbdimp.c
+++ b/dbdimp.c
@@ -287,7 +287,7 @@ static void pg_error (pTHX_ SV * h, int error_num, const char * error_msg)
 
 	/* Set as utf-8 */
 	if (imp_dbh->pg_utf8_flag)
-		sv_utf8_upgrade(DBIc_ERRSTR(imp_xxh));
+		SvUTF8_on(DBIc_ERRSTR(imp_xxh));
 
 	if (TEND_slow) TRC(DBILOGFP, "%sEnd pg_error\n", THEADER_slow);
 
@@ -1151,7 +1151,7 @@ SV * dbd_st_FETCH_attrib (SV * sth, imp_sth_t * imp_sth, SV * keysv)
 				TRACE_PQFNAME;
 				fieldname = PQfname(imp_sth->result, fields);
 				sv_fieldname = newSVpv(fieldname,0);
-				sv_utf8_upgrade(sv_fieldname);
+				SvUTF8_on(sv_fieldname);
 				(void)av_store(av, fields, sv_fieldname);
 			}
 		}
@@ -2754,7 +2754,7 @@ static SV * pg_destringify_array(pTHX_ imp_dbh_t *imp_dbh, unsigned char * input
 				else {
 					SV *sv = newSVpvn(string, section_size);
 					if (imp_dbh->pg_utf8_flag) {
-						sv_utf8_upgrade(sv);
+						SvUTF8_on(sv);
 					}
 					av_push(currentav, sv);
 
@@ -3570,14 +3570,14 @@ AV * dbd_st_fetch (SV * sth, imp_sth_t * imp_sth)
 			}
 			if (imp_dbh->pg_utf8_flag) {
 				/*
-				  The only exception to our rule about setting utf8 if the client_encoding
-				  is set to UTF8 is bytea.
+				  The only exception to our rule about setting utf8 (when the client_encoding
+				  is set to UTF8) is bytea.
 				*/
 				if (type_info && PG_BYTEA == type_info->type_id) {
 					SvUTF8_off(sv);
 				}
 				else {
-					sv_utf8_upgrade(sv);
+					SvUTF8_on(sv);
 				}
 			}
 		}
@@ -3965,7 +3965,7 @@ int pg_db_getcopydata (SV * dbh, SV * dataline, int async)
 	if (copystatus > 0) {
 		sv_setpv(dataline, tempbuf);
 		if (imp_dbh->pg_utf8_flag)
-			sv_utf8_upgrade(dataline);
+			SvUTF8_on(dataline);
 		TRACE_PQFREEMEM;
 		PQfreemem(tempbuf);
 	}
diff --git a/t/30unicode.t b/t/30unicode.t
index 851326e..7c4da06 100644
--- a/t/30unicode.t
+++ b/t/30unicode.t
@@ -27,8 +27,7 @@ my $pgversion = $dbh->{pg_server_version};
 
 my $t;
 
-my $name = 'Émilie du Châtelet';
-utf8::encode($name);
+my $name = "\N{LATIN CAPITAL LETTER E WITH ACUTE}milie du Ch\N{LATIN SMALL LETTER A WITH CIRCUMFLEX}telet";
 
 my $SQL = 'SELECT ?::text';
 my $sth = $dbh->prepare($SQL);
@@ -43,13 +42,16 @@ $dbh->{pg_enable_utf8} = 0;
 $sth->execute($name);
 $result = $sth->fetchall_arrayref->[0][0];
 $t = 'Fetching UTF-8 string from the database returns proper string (pg_enable_utf8=0)';
-is ($result, $name, $t);
+my $noutfname  = $name;
+Encode::_utf8_off($noutfname);
+is ($result, $noutfname, $t);
 $t = 'Fetching UTF-8 string from the database returns string with UTF-8 flag off (pg_enable_utf8=0)';
 ok (!utf8::is_utf8($result), $t);
 
-
+$t = 'Generated string is not utf8';
 $name = 'Ada Lovelace';
 utf8::encode($name);
+ok (!utf8::is_utf8($name), $t);
 
 $dbh->{pg_enable_utf8} = -1;
 $SQL = 'SELECT ?::text';
@@ -69,12 +71,12 @@ is ($result, $name, $t);
 $t = 'Fetching ASCII string from the database returns string with UTF-8 flag off (pg_enable_utf8=0)';
 ok (!utf8::is_utf8($result), $t);
 
+$dbh->{pg_enable_utf8} = 1;
 my $before = "\N{WHITE SMILING FACE}";
 my ($after) = $dbh->selectrow_array('SELECT ?::text', {}, $before);
 is($after, $before, 'string is the same after round trip');
 ok(utf8::is_utf8($after), 'string has utf8 flag set');
 
-
 cleanup_database($dbh,'test');
 $dbh->disconnect();
 
-- 
1.8.4