Author: turnstep
Date: Mon Aug  3 20:46:39 2009
New Revision: 13154

Modified:
   DBD-Pg/trunk/Pg.pm
   DBD-Pg/trunk/t/03smethod.t

Log:
Fix up execute_array per complaint in RT 39829


Modified: DBD-Pg/trunk/Pg.pm
==============================================================================
--- DBD-Pg/trunk/Pg.pm  (original)
+++ DBD-Pg/trunk/Pg.pm  Mon Aug  3 20:46:39 2009
@@ -1659,34 +1659,26 @@
 
        sub bind_param_array {
 
+               ## Binds an array of data to a specific placeholder in a 
statement
                ## The DBI version is broken, so we implement a near-copy here
+
                my $sth = shift;
                my ($p_id, $value_array, $attr) = @_;
 
+               ## Bail if the second arg is not undef or an an arrayref
                return $sth->set_err(1, "Value for parameter $p_id must be a 
scalar or an arrayref, not a ".ref($value_array))
                        if defined $value_array and ref $value_array and ref 
$value_array ne 'ARRAY';
 
+               ## Bail if the first arg is not a number
                return $sth->set_err(1, q{Can't use named placeholders for 
non-driver supported bind_param_array})
                        unless DBI::looks_like_number($p_id); # because we rely 
on execute(@ary) here
 
-               # get/create arrayref to hold params
-               my $hash_of_arrays = $sth->{ParamArrays} ||= { };
-
-               if (ref $value_array eq 'ARRAY') {
-                       # check that input has same length as existing
-                       # find first arrayref entry (if any)
-                       for (keys %$hash_of_arrays) {
-                               my $v = $$hash_of_arrays{$_};
-                               next unless ref $v eq 'ARRAY';
-                               return $sth->set_err
-                                       (1,"Arrayref for parameter $p_id has 
"....@$value_array.' elements'
-                                        ." but parameter $_ has "....@$v)
-                                       if @$value_array != @$v;
-                       }
-               }
+               ## Store the list of items in the hash (will be undef or an 
arayref)
+               $sth->{ParamArrays}{$p_id} = $value_array;
 
-               $$hash_of_arrays{$p_id} = $value_array;
+               ## If any attribs were passed in, we need to call bind_param
                return $sth->bind_param($p_id, '', $attr) if $attr; ## This is 
the big change so -w does not complain
+
                return 1;
        } ## end bind_param_array
 

Modified: DBD-Pg/trunk/t/03smethod.t
==============================================================================
--- DBD-Pg/trunk/t/03smethod.t  (original)
+++ DBD-Pg/trunk/t/03smethod.t  Mon Aug  3 20:46:39 2009
@@ -236,17 +236,17 @@
 };
 is ($@, q{}, $t);
 
-$t='Statement handle method "bind_param_array" fails when binding one value to 
the first placeholder';
+$t='Statement handle method "bind_param_array" works when binding one value to 
the second placeholder';
 eval {
-       $sth->bind_param_array(1, [ 30 ]);
+       $sth->bind_param_array(2, [ 'Mangoz' ]);
 };
-isnt ($@, q{}, $t);
+is ($@, q{}, $t);
 
-$t='Statement handle method "bind_param_array" fails when binding two values 
to the second placeholder';
+$t='Statement handle method "bind_param_array" works when binding two values 
to the second placeholder';
 eval {
        $sth->bind_param_array(2, [ 'Plantain', 'Apple' ]);
 };
-isnt ($@, q{}, $t);
+is ($@, q{}, $t);
 
 #
 # Test of the "execute_array" statement handle method

Reply via email to