turn join into an aqt expr so it can be a keyword
[scpubgit/Q-Branch.git] / lib / SQL / Abstract.pm
index dfe7618..3f62403 100644 (file)
@@ -1302,7 +1302,7 @@ sub _expand_between {
   return +{ -op => [
     $op,
     $self->expand_expr(ref($k) ? $k : { -ident => $k }),
-    @rhs
+    map $self->expand_expr($_, -value), @rhs
   ] }
 }
 
@@ -1370,12 +1370,12 @@ sub _expand_values {
 }
 
 sub _recurse_where {
-  my ($self, $where, $logic) = @_;
+  my ($self, $where) = @_;
 
   # Special case: top level simple string treated as literal
 
   my $where_exp = (ref($where)
-                    ? $self->_expand_expr($where, $logic)
+                    ? $self->_expand_select_clause_where(undef, $where)
                     : { -literal => [ $where ] });
 
   # dispatch expanded expression
@@ -1395,7 +1395,7 @@ sub _recurse_where {
 sub _render_ident {
   my ($self, undef, $ident) = @_;
 
-  return [ $self->_convert($self->_quote($ident)) ];
+  return [ $self->_quote($ident) ];
 }
 
 sub _render_row {
@@ -1422,7 +1422,7 @@ sub _render_func {
 
 sub _render_bind {
   my ($self, undef, $bind) = @_;
-  return [ $self->_convert('?'), $self->_bindtype(@$bind) ];
+  return [ '?', $self->_bindtype(@$bind) ];
 }
 
 sub _render_literal {
@@ -1433,7 +1433,7 @@ sub _render_literal {
 
 sub _render_keyword {
   my ($self, undef, $keyword) = @_;
-  return [ $self->format_keyword($keyword) ];
+  return [ $self->_sqlcase(join ' ', split '_', $keyword) ];
 }
 
 sub _render_op {
@@ -1521,7 +1521,7 @@ sub _render_op_multop {
   return $self->render_aqt($parts[0]) if @parts == 1;
   my $join = ($op eq ','
                 ? ', '
-                : $self->format_keyword(" ${op} ")
+                : { -keyword => ' '.join(' ', split '_', $op).' ' }
              );
   return $self->join_query_parts($join, @parts);
 }
@@ -1541,6 +1541,9 @@ sub _render_values {
 
 sub join_query_parts {
   my ($self, $join, @parts) = @_;
+  if (ref($join) eq 'HASH') {
+    $join = $self->render_aqt($join)->[0];
+  }
   my @final = map +(
     ref($_) eq 'HASH'
       ? $self->render_aqt($_)
@@ -1765,7 +1768,7 @@ sub _convert {
   #my ($self, $arg) = @_;
   if (my $conv = $_[0]->{convert_where}) {
     return @{ $_[0]->join_query_parts('',
-      $_[0]->format_keyword($conv),
+      $_[0]->_sqlcase($conv),
       '(' , $_[1] , ')'
     ) };
   }
@@ -1820,8 +1823,6 @@ sub _sqlcase {
   return $_[0]->{case} ? $_[1] : uc($_[1]);
 }
 
-sub format_keyword { $_[0]->_sqlcase(join ' ', split '_', $_[1]) }
-
 #======================================================================
 # DISPATCHING FROM REFKIND
 #======================================================================