Author: turnstep
Date: Mon Oct 13 21:05:28 2008
New Revision: 11978

Modified:
   DBD-Pg/trunk/Changes
   DBD-Pg/trunk/Pg.pm
   DBD-Pg/trunk/dbdimp.c
   DBD-Pg/trunk/t/02attribs.t

Log:
Have ParamTypes return 'TYPE' whenever possible, and fall back to 'pg_type'.


Modified: DBD-Pg/trunk/Changes
==============================================================================
--- DBD-Pg/trunk/Changes        (original)
+++ DBD-Pg/trunk/Changes        Mon Oct 13 21:05:28 2008
@@ -1,5 +1,9 @@
 ('GSM' is Greg Sabino Mullane, [EMAIL PROTECTED])
 
+2.11.1 Released October 14, 2008
+
+       - $sth->{ParamTypes} returns 'TYPE' when possible.
+
 2.11.0 Released October 13, 2008 (subversion r11976)
 
        - $sth->{ParamTypes} now returns a hashref per the DBI docs. [GSM]

Modified: DBD-Pg/trunk/Pg.pm
==============================================================================
--- DBD-Pg/trunk/Pg.pm  (original)
+++ DBD-Pg/trunk/Pg.pm  Mon Oct 13 21:05:28 2008
@@ -3629,9 +3629,10 @@
 
 Returns a reference to a hash containing the type names currently bound to 
placeholders. The keys 
 are the same as returned by the ParamValues method. The values are hashrefs 
containing a single key value 
-pair, in which the key is always 'pg_type' and the value is the internal 
number corresponding to the 
-type originally passed in. (Placeholders that have not yet been bound will 
return undef as the value). This 
-allows the output of ParamTypes to be passed back to the L</bind_param> method.
+pair, in which the key is either 'TYPE' if the type has a generic SQL 
equivalent, and 'pg_type' if the type can 
+only be expressed by a Postgres type. The value is the internal number 
corresponding to the type originally 
+passed in. (Placeholders that have not yet been bound will return undef as the 
value). This allows the output of 
+ParamTypes to be passed back to the L</bind_param> method.
 
 =head3 B<Statement> (string, read-only)
 

Modified: DBD-Pg/trunk/dbdimp.c
==============================================================================
--- DBD-Pg/trunk/dbdimp.c       (original)
+++ DBD-Pg/trunk/dbdimp.c       Mon Oct 13 21:05:28 2008
@@ -922,7 +922,12 @@
                                }
                                else {
                                        HV *pvhv2 = newHV();
-                                       (void)hv_store(pvhv2, "pg_type", 7, 
newSViv(currph->bind_type->type_id), 0);
+                                       if (currph->bind_type->type.sql) {
+                                               (void)hv_store(pvhv2, "TYPE", 
4, newSViv(currph->bind_type->type.sql), 0);
+                                       }
+                                       else {
+                                               (void)hv_store(pvhv2, 
"pg_type", 7, newSViv(currph->bind_type->type_id), 0);
+                                       }
                                        (void)hv_store_ent
                                                (pvhv, 
(3==imp_sth->placeholder_type ? newSVpv(currph->fooname,0) : newSViv(i+1)),
                                                 newRV_noinc((SV*)pvhv2), 0);

Modified: DBD-Pg/trunk/t/02attribs.t
==============================================================================
--- DBD-Pg/trunk/t/02attribs.t  (original)
+++ DBD-Pg/trunk/t/02attribs.t  Mon Oct 13 21:05:28 2008
@@ -18,7 +18,7 @@
 if (! defined $dbh) {
        plan skip_all => 'Connection to database failed, cannot continue 
testing';
 }
-plan tests => 248;
+plan tests => 249;
 
 isnt ($dbh, undef, 'Connect to database for handle attributes testing');
 
@@ -852,7 +852,7 @@
 $sth->bind_param(1, 1, SQL_INTEGER);
 $sth->bind_param(2, 'TMW', SQL_VARCHAR);
 $attrib = $sth->{ParamTypes};
-$expected = {1 => {pg_type => 23}, 2 => {pg_type => 1043}, 3 => undef};
+$expected = {1 => {TYPE => SQL_INTEGER}, 2 => {TYPE => SQL_VARCHAR}, 3 => 
undef};
 is_deeply ($attrib, $expected, $t);
 
 $t='Statement handle attributes "ParamValues" and "ParamTypes" can be pased 
back to bind_param';
@@ -866,10 +866,10 @@
 
 $t='Statement handle attribute "ParamTypes" works before execute with named 
placeholders';
 $sth = $dbh->prepare('SELECT id FROM dbd_pg_test WHERE id=:foobar AND 
val=:foobar2 AND lii=:foobar3');
-$sth->bind_param(':foobar', 1, SQL_INTEGER);
-$sth->bind_param(':foobar2', 'TMW', SQL_VARCHAR);
+$sth->bind_param(':foobar', 1, {pg_type => PG_INT4});
+$sth->bind_param(':foobar2', 'TMW', {pg_type => PG_TEXT});
 $attrib = $sth->{ParamTypes};
-$expected = {':foobar' => {pg_type => 23}, ':foobar2' => {pg_type => 1043}, 
':foobar3' => undef};
+$expected = {':foobar' => {TYPE => SQL_INTEGER}, ':foobar2' => {TYPE => 
SQL_LONGVARCHAR}, ':foobar3' => undef};
 is_deeply ($attrib, $expected, $t);
 
 $t='Statement handle attributes "ParamValues" and "ParamTypes" can be passed 
back to bind_param';
@@ -882,10 +882,16 @@
 is( $@, q{}, $t);
 
 $t='Statement handle attribute "ParamTypes" works after execute';
-$sth->bind_param(':foobar3', 3, {pg_type => PG_INT4});
+$sth->bind_param(':foobar3', 3, {pg_type => PG_INT2});
 $sth->execute();
 $attrib = $sth->{ParamTypes};
-$expected->{':foobar3'} = {pg_type => 23};
+$expected->{':foobar3'} = {TYPE => SQL_SMALLINT};
+is_deeply ($attrib, $expected, $t);
+
+$t='Statement handle attribute "ParamTypes" returns correct values';
+$sth->bind_param(':foobar2', 3, {pg_type => PG_CIRCLE});
+$attrib = $sth->{ParamTypes}{':foobar2'};
+$expected = {pg_type => PG_CIRCLE};
 is_deeply ($attrib, $expected, $t);
 
 #

Reply via email to