X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FExtraClauses.pm;h=00e4d2aea8da406ddb8614b7871309928bc6d792;hb=ee706e89c8703b720f970a16163d36de9a30e7d4;hp=dc464a680d4f0f415fbdeccb271199fc4dc3e857;hpb=555ad787669ba740c771004a6d6c7bc4b879325d;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract/ExtraClauses.pm b/lib/SQL/Abstract/ExtraClauses.pm index dc464a6..00e4d2a 100644 --- a/lib/SQL/Abstract/ExtraClauses.pm +++ b/lib/SQL/Abstract/ExtraClauses.pm @@ -20,16 +20,26 @@ sub register_defaults { }, 'select.having', 'expand_expr', ); - $self->${\"${_}er"}(from_list => "_${_}_from_list") - for qw(expand render); - $self->${\"${_}er"}(join => "_${_}_join") - for qw(expand render); + foreach my $thing (qw(join from_list)) { + $self->expander($thing => "_expand_${thing}") + ->renderer($thing => "_render_${thing}") + } $self->op_expander(as => '_expand_op_as'); $self->expander(as => '_expand_op_as'); $self->renderer(as => '_render_as'); - splice(@{$self->{clauses_of}{update}}, 2, 0, 'from'); - splice(@{$self->{clauses_of}{delete}}, 1, 0, 'using'); + $self->clauses_of(update => sub { + my ($self, @clauses) = @_; + splice(@clauses, 2, 0, 'from'); + @clauses; + }); + + $self->clauses_of(delete => sub { + my ($self, @clauses) = @_; + splice(@clauses, 1, 0, 'using'); + @clauses; + }); + $self->clause_expanders( 'update.from' => '_expand_select_clause_from', 'delete.using' => sub {