cleanup andor
[scpubgit/Q-Branch.git] / lib / SQL / Abstract.pm
index 61aad52..91aee75 100644 (file)
@@ -1145,34 +1145,24 @@ sub _render_op_between {
         unless $low->{-literal};
       $low;
     } else {
-      +($low, [ $self->_sqlcase('and') ], $high);
+      +($low, $self->format_keyword('and'), $high);
     }
   };
-  my ($lhsql, @lhbind) = $self->render_aqt($left);
   return $self->join_query_parts(' ',
-    [ '(' ],
-    $left,
-    [ $self->_sqlcase(join ' ', split '_', $op) ],
-    @rh,
-    [ ')' ],
+    '(', $left, $self->format_keyword($op), @rh, ')',
   );
 }
 
 sub _render_op_in {
   my ($self, $op, $args) = @_;
   my ($lhs, @rhs) = @$args;
-  my @in_bind;
-  my @in_sql = map {
-    my ($sql, @bind) = $self->render_aqt($_);
-    push @in_bind, @bind;
-    $sql;
-  } @rhs;
-  my ($lhsql, @lbind) = $self->render_aqt($lhs);
-  return (
-    $lhsql.' '.$self->_sqlcase(join ' ', split '_', $op).' ( '
-    .join(', ', @in_sql)
-    .' )',
-    @lbind, @in_bind
+
+  return $self->join_query_parts(' ',
+    $lhs,
+    $self->format_keyword($op),
+    '(',
+    [ $self->join_query_parts(', ', @rhs) ],
+    ')'
   );
 }
 
@@ -1181,8 +1171,11 @@ sub _render_op_andor {
   my @parts = map [ $self->render_aqt($_) ], @$args;
   return '' unless @parts;
   return @{$parts[0]} if @parts == 1;
-  my ($sql, @bind) = $self->join_query_parts(' '.$self->_sqlcase($op).' ', @parts);
-  return '( '.$sql.' )', @bind;
+  my ($sql, @bind) = $self->join_query_parts(' ',
+    '(', [ $self->join_query_parts(
+           ' '.$self->format_keyword($op).' ',
+           @parts) ],
+    ')');
 }
 
 sub _render_op_multop {
@@ -1199,8 +1192,11 @@ sub _render_op_multop {
 
 sub join_query_parts {
   my ($self, $join, @parts) = @_;
-  my @final = map +(ref($_) eq 'HASH' ? [ $self->render_aqt($_) ] : $_),
-                @parts;
+  my @final = map +(
+    ref($_) eq 'HASH'
+      ? [ $self->render_aqt($_) ]
+      : ref($_) eq 'ARRAY' ? $_ : [ $_ ]),
+         @parts;
   return (
     join($join, map $_->[0], @final),
     (wantarray ? (map @{$_}[1..$#$_], @final) : ()),
@@ -1468,6 +1464,7 @@ sub _sqlcase {
   return $_[0]->{case} ? $_[1] : uc($_[1]);
 }
 
+sub format_keyword { $_[0]->_sqlcase(join ' ', split '_', $_[1]) }
 
 #======================================================================
 # DISPATCHING FROM REFKIND