X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FClauses.pm;h=87aa4e1d3e251c7211d184cebd5d236bf85be59b;hb=eaba09fc57316874586e26226a547d943327c955;hp=7b4cc7ef7e5a0d84c1b9ff088f12a353364a2dca;hpb=0236f122f73090f9773bae7a6941a286c86ff889;p=dbsrgits%2FSQL-Abstract.git diff --git a/lib/SQL/Abstract/Clauses.pm b/lib/SQL/Abstract/Clauses.pm index 7b4cc7e..87aa4e1 100644 --- a/lib/SQL/Abstract/Clauses.pm +++ b/lib/SQL/Abstract/Clauses.pm @@ -74,6 +74,11 @@ sub register_defaults { $self->{expand}{exists} = sub { $_[0]->_expand_op(undef, [ exists => $_[2] ]); }; + $self->{render}{convert_where} = sub { + my $self = shift; + local $self->{convert_where} = $self->{convert}; + $self->render_aqt($_[0]); + }; return $self; } @@ -89,7 +94,8 @@ sub _expand_select_clause_from { sub _expand_select_clause_where { my ($self, undef, $where) = @_; - +(where => $self->expand_expr($where)); + my $exp = $self->expand_expr($where); + +(where => ($self->{convert} ? { -convert_where => $exp } : $exp)); } sub _expand_select_clause_order_by { @@ -153,8 +159,7 @@ sub _render_statement { my @parts; foreach my $clause (@{$self->{clauses_of}{$type}}) { next unless my $clause_expr = $args->{$clause}; - local $self->{convert_where} = $self->{convert} if $clause eq 'where'; - my ($sql) = my @part = do { + my @part = do { if (my $rdr = $self->{render_clause}{"${type}.${clause}"}) { $self->$rdr($clause, $clause_expr); } else { @@ -165,7 +170,6 @@ sub _render_statement { ($sql, @bind); } }; - next unless defined($sql) and length($sql); push @parts, \@part; } my ($sql, @bind) = $self->join_query_parts(' ', @parts); @@ -266,8 +270,7 @@ sub _render_values { my ($self, undef, $values) = @_; my ($v_sql, @bind) = $self->join_query_parts( ', ', - map [ $self->render_aqt($_) ], - ref($values) eq 'ARRAY' ? @$values : $values + ref($values) eq 'ARRAY' ? @$values : $values ); my $sql = $self->_sqlcase('values').' '.$v_sql; return (