X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract.pm;h=720f378d15d7e2736a8f009a4eb7b6121939aa9f;hb=3921487a16c552c021260afadba59f884fd438ef;hp=dfe7618130c0900e016198404fef464a3e89668e;hpb=bd18437cb99be250397f2b04636b161647905eff;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract.pm b/lib/SQL/Abstract.pm index dfe7618..720f378 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,9 @@ sub _render_literal { sub _render_keyword { my ($self, undef, $keyword) = @_; - return [ $self->format_keyword($keyword) ]; + return [ $self->_sqlcase( + ref($keyword) ? $$keyword : join ' ', split '_', $keyword + ) ]; } sub _render_op { @@ -1521,7 +1523,7 @@ sub _render_op_multop { return $self->render_aqt($parts[0]) if @parts == 1; my $join = ($op eq ',' ? ', ' - : $self->format_keyword(" ${op} ") + : { -keyword => " ${op} " } ); return $self->join_query_parts($join, @parts); } @@ -1541,6 +1543,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($_) @@ -1564,7 +1569,7 @@ sub _render_unop_paren { sub _render_unop_prefix { my ($self, $op, $v) = @_; return $self->join_query_parts(' ', - $self->_sqlcase($op), $v->[0] + { -keyword => \$op }, $v->[0] ); } @@ -1765,7 +1770,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] , ')' ) }; } @@ -1796,23 +1801,6 @@ sub _assert_bindval_matches_bindtype { } } -sub _join_sql_clauses { - my ($self, $logic, $clauses_aref, $bind_aref) = @_; - - if (@$clauses_aref > 1) { - my $join = " " . $self->_sqlcase($logic) . " "; - my $sql = '( ' . join($join, @$clauses_aref) . ' )'; - return ($sql, @$bind_aref); - } - elsif (@$clauses_aref) { - return ($clauses_aref->[0], @$bind_aref); # no parentheses - } - else { - return (); # if no SQL, ignore @$bind_aref - } -} - - # Fix SQL case, if so requested sub _sqlcase { # LDNOTE: if $self->{case} is true, then it contains 'lower', so we @@ -1820,8 +1808,6 @@ sub _sqlcase { return $_[0]->{case} ? $_[1] : uc($_[1]); } -sub format_keyword { $_[0]->_sqlcase(join ' ', split '_', $_[1]) } - #====================================================================== # DISPATCHING FROM REFKIND #======================================================================