X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=3f62403f5130cc2805e05e1446918ac5fe9b6540;hb=a639287d1ae82a3b58a75fa2193c900a0ab012ae;hp=dfe7618130c0900e016198404fef464a3e89668e;hpb=bd18437cb99be250397f2b04636b161647905eff;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index dfe7618..3f62403 100644 --- a/lib/SQL/Abstract.pm +++ b/lib/SQL/Abstract.pm @@ -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 #======================================================================