Fixed interjecting arrayrefref into a where clause
Rob Kinyon [Mon, 9 Mar 2009 00:35:23 +0000 (00:35 +0000)]
lib/SQL/Abstract.pm
t/02where.t
t/03values.t

index 8e2e6bb..90434b8 100644 (file)
@@ -386,6 +386,8 @@ sub _where_ARRAYREF {
       # skip empty elements, otherwise get invalid trailing AND stuff
       ARRAYREF  => sub {$self->_recurse_where($el)        if @$el},
 
+      ARRAYREFREF => sub { @{${$el}}                 if @{${$el}}},
+
       HASHREF   => sub {$self->_recurse_where($el, 'and') if %$el},
            # LDNOTE : previous SQLA code for hashrefs was creating a dirty
            # side-effect: the first hashref within an array would change
@@ -410,7 +412,16 @@ sub _where_ARRAYREF {
   return $self->_join_sql_clauses($logic, \@sql_clauses, \@all_bind);
 }
 
+#======================================================================
+# WHERE: top-level ARRAYREFREF
+#======================================================================
 
+sub _where_ARRAYREFREF {
+    my ($self, $where) = @_;
+    my ($sql, @bind) = @{${$where}};
+
+    return ($sql, @bind);
+}
 
 #======================================================================
 # WHERE: top-level HASHREF
index 94ce7d5..b169de1 100644 (file)
@@ -14,6 +14,7 @@ use SQL::Abstract;
 my $not_stringifiable = bless {}, 'SQLA::NotStringifiable';
 
 my@x=(
+);my @handle_tests = (
     {
         where => {
             requestor => 'inna',
@@ -196,19 +197,18 @@ my@x=(
        bind => [ $not_stringifiable ],
    },
 
-);my @handle_tests = (
    {
-       where => \[ 'foo ?','bar' ],
+       where => \[ 'foo = ?','bar' ],
        stmt => " WHERE (foo = ?)", 
        bind => [ "bar" ],
    },
-);my@x2=(
 
    {
-       where => [ \[ 'foo ?','bar' ] ],
+       where => [ \[ 'foo = ?','bar' ] ],
        stmt => " WHERE (foo = ?)", 
        bind => [ "bar" ],
    },
+);my@x2=(
 );
 
 
index a9e3946..db28ab0 100644 (file)
@@ -109,5 +109,5 @@ for my $record (@data) {
     [$sql->values ($data)],
     [@bind],
     'values() output matches that of initial bind'
-  ) || diag "Corresponding SQL statement: $stmt";
+  );# || diag "Corresponding SQL statement: $stmt";
 }