clean up IN/BETWEEN handling
Matt S Trout [Sun, 31 Jul 2011 00:59:56 +0000 (00:59 +0000)]
lib/SQL/Abstract.pm
t/05in_between.t

index fde45df..f8afdcc 100644 (file)
@@ -709,15 +709,19 @@ sub _where_hashpair_to_dq {
           # got documented. mst hates everything.
           if (ref($rhs) eq 'SCALAR') {
             my $x = $$rhs;
-            $x = "($x)" unless $x =~ /^\s*\(/;
+            1 while ($x =~ s/\A\s*\((.*)\)\s*\Z/$1/s);
             $rhs = \$x;
           } else {
             my ($x, @rest) = @{$$rhs};
-            $x = "($x)" unless $x =~ /^\s*\(/;
+            1 while ($x =~ s/\A\s*\((.*)\)\s*\Z/$1/s);
             $rhs = \[ $x, @rest ];
           }
         }
-        return $self->_literal_with_prepend_to_dq("$k $op", $$rhs);
+        return +{
+          type => DQ_OPERATOR,
+          operator => { 'SQL.Naive' => $op },
+          args => [ $self->_ident_to_dq($k), $self->_literal_to_dq($$rhs) ]
+        };
       }
       return $self->_literal_to_dq($self->{sqlfalse}) unless @$rhs;
       return +{
index abc35d6..84bd215 100644 (file)
@@ -134,7 +134,7 @@ my @in_between_tests = (
   {
     parenthesis_significant => 1,
     where => { x => { -in => \['( ( ?,?,lower(y) ) )', 1, 2] } },
-    stmt => "WHERE ( x IN ( ( ?,?,lower(y) ) ) )",  # note that outer parens are opened even though literal was requested (RIBASUSHI)
+    stmt => "WHERE ( x IN ( ?,?,lower(y) ) )",  # note that outer parens are opened even though literal was requested (RIBASUSHI)
     bind => [1, 2],
     test => '-in with a literal arrayrefref',
   },