expand bangoverrides from order_by keys too for compat reasons
[scpubgit/Q-Branch.git] / lib / SQL / Abstract / Plugin / BangOverrides.pm
1 package SQL::Abstract::Plugin::BangOverrides;
2
3 use Moo;
4
5 with 'SQL::Abstract::Role::Plugin';
6
7 sub register_extensions {
8   my ($self, $sqla) = @_;
9   foreach my $stmt ($sqla->statement_list) {
10     $sqla->wrap_expander($stmt => sub {
11       my ($orig) = @_;
12       sub {
13         my ($self, $name, $args) = @_;
14         my %args = (
15           %$args,
16           (ref($args->{order_by}) eq 'HASH'
17             ? %{$args->{order_by}}
18             : ())
19         );
20         my %overrides;
21         foreach my $clause (map /^!(.*)$/, keys %args) {
22           my $override = delete $args{"!${clause}"};
23           $overrides{$clause} = (
24             ref($override) eq 'CODE'
25               ? $self->$override($args{$clause})
26               : $override
27           );
28         }
29         $self->$orig($name, { %$args, %overrides });
30       }
31     });
32   }
33 }
34
35 1;