[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