Author: theory
Date: Mon Nov 22 20:57:51 2010
New Revision: 14548

Modified:
   DBD-Pg/trunk/Changes
   DBD-Pg/trunk/t/06bytea.t

Log:
Fix hexidecimal bytea tests.

They need to actually compare to hexidecimal strings.


Modified: DBD-Pg/trunk/Changes
==============================================================================
--- DBD-Pg/trunk/Changes        (original)
+++ DBD-Pg/trunk/Changes        Mon Nov 22 20:57:51 2010
@@ -4,8 +4,10 @@
 
   - Fix the number of tests to skip in t/01connect.t when the $DBI_DSN
     environment variable lacks a database specification.
-  - Fix the number of tests to skip in t/06bytea.t when running on a version
+  - Fix algorithm for skiping tests in t/06bytea.t when running on a version
     of PostgreSQL lower than 9.0.
+  - Fix failing tests in t/06bytea.t when running on PostgreSQL 9.0 or later
+    and using hexadecimal binary format.
 
 2.17.2 Released November 21, 2010 (subversion r14542)
 

Modified: DBD-Pg/trunk/t/06bytea.t
==============================================================================
--- DBD-Pg/trunk/t/06bytea.t    (original)
+++ DBD-Pg/trunk/t/06bytea.t    Mon Nov 22 20:57:51 2010
@@ -50,9 +50,13 @@
 ok ($sth->execute(404, $binary_out), $t);
 
 SKIP: {
-    skip 'No BYTEA output format setting before 9.0', 10
-        if $pgversion < 90000;
-    for my $output (qw(hex escape)) {
+    my @output;
+    if ($pgversion < 90000) {
+        skip 'No BYTEA output format setting before 9.0', 5;
+    } else {
+        @output = (qw(hex escape));
+    }
+    for my $output (@output) {
         $dbh->do(qq{SET bytea_output = '$output'}) if $output;
 
         $t='Received correct text from BYTEA column with backslashes';
@@ -60,22 +64,33 @@
         $sth = $dbh->prepare(q{SELECT bytetest FROM dbd_pg_test WHERE id=?});
         $sth->execute(400);
         my $byte = $sth->fetchall_arrayref()->[0][0];
-        is ($byte, 'aa\bb\cc\\\0dd\\', $t);
+        my $exp = $output eq 'hex'
+            ? 'x61615c62625c63635c5c3064645c'
+            : 'aa\bb\cc\\\0dd\\';
+        is ($byte, $exp, $t);
 
         $t='Received correct text from BYTEA column with quote';
         $t.=" ($output output)" if $output;
         $sth->execute(402);
         $byte = $sth->fetchall_arrayref()->[0][0];
-        is ($byte, '\'', $t);
+        is ($byte, ($output eq 'hex' ? 'x27' : '\''), $t);
 
         $t='Ensure proper handling of high bit characters';
         $t.=" ($output output)" if $output;
         $sth->execute(403);
         ($binary_in) = $sth->fetchrow_array();
-        ok ($binary_in eq $binary_out, $t);
-        $sth->execute(404);
-        ($binary_in) = $sth->fetchrow_array();
-        ok ($binary_in eq $binary_out, $t);
+        if ($output eq 'hex') {
+            my $hex = 'x' . unpack 'H*', $binary_out;
+            is $binary_in, $hex, $t;
+            $sth->execute(404);
+            ($binary_in) = $sth->fetchrow_array();
+            is $binary_in, $hex, $t;
+        } else {
+            ok ($binary_in eq $binary_out, $t);
+            $sth->execute(404);
+            ($binary_in) = $sth->fetchrow_array();
+            ok ($binary_in eq $binary_out, $t);
+        }
 
         $t='quote properly handles bytea strings';
         $t.=" ($output output)" if $output;

Reply via email to