X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FClauses.pm;h=d404077b6b888c432de8845c5b74e7257163f1cb;hb=38c5397d5e9cb9be87c07cae532afef6437cf4eb;hp=a6ba62dd340a16d6283a9a7709b80d6b9d82e2ba;hpb=3f9899e505733687a57b30404dff4a060dca7474;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract/Clauses.pm b/lib/SQL/Abstract/Clauses.pm index a6ba62d..d404077 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,10 +170,9 @@ sub _render_statement { ($sql, @bind); } }; - next unless defined($sql) and length($sql); push @parts, \@part; } - my ($sql, @bind) = $self->join_clauses(' ', @parts); + my ($sql, @bind) = $self->join_query_parts(' ', @parts); return ( (our $Render_Top_Level ? $sql : '('.$sql.')'), @bind @@ -264,7 +268,7 @@ sub _expand_values { sub _render_values { my ($self, undef, $values) = @_; - my ($v_sql, @bind) = $self->join_clauses( + my ($v_sql, @bind) = $self->join_query_parts( ', ', map [ $self->render_aqt($_) ], ref($values) eq 'ARRAY' ? @$values : $values @@ -311,6 +315,8 @@ BEGIN { } } +sub statement_list { sort keys %{$_[0]->{clauses_of}} } + sub clauses_of { my ($self, $of, @clauses) = @_; unless (@clauses) {