X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FQ-Branch.git;a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FPlugin%2FBangOverrides.pm;fp=lib%2FSQL%2FAbstract%2FPlugin%2FBangOverrides.pm;h=dae9d0c78d184e45e6a56ef0575e3ae626930141;hp=3a0b377a97aab323a1ddb76279fd0d7907986cbe;hb=2ed2b14f25282f6674aab891455901f9d128e0de;hpb=116bc0b69bc3d55647a4e195cf212a6af38ba5b8 diff --git a/lib/SQL/Abstract/Plugin/BangOverrides.pm b/lib/SQL/Abstract/Plugin/BangOverrides.pm index 3a0b377..dae9d0c 100644 --- a/lib/SQL/Abstract/Plugin/BangOverrides.pm +++ b/lib/SQL/Abstract/Plugin/BangOverrides.pm @@ -7,19 +7,26 @@ with 'SQL::Abstract::Role::Plugin'; sub register_extensions { my ($self, $sqla) = @_; foreach my $stmt ($sqla->statement_list) { - $sqla->wrap_expander($stmt => sub ($orig) { + $sqla->wrap_expander($stmt => sub { + my ($orig) = @_; sub { my ($self, $name, $args) = @_; - my %args = %$args; + my %args = ( + %$args, + (ref($args->{order_by}) eq 'HASH' + ? %{$args->{order_by}} + : ()) + ); + my %overrides; foreach my $clause (map /^!(.*)$/, keys %args) { my $override = delete $args{"!${clause}"}; - $args{$clause} = ( + $overrides{$clause} = ( ref($override) eq 'CODE' - ? $override->($args{$clause}) + ? $self->$override($args{$clause}) : $override ); } - $self->$orig($name, \%args); + $self->$orig($name, { %$args, %overrides }); } }); }