Commit | Line | Data |
d10d5b94 |
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) { |
2ed2b14f |
10 | $sqla->wrap_expander($stmt => sub { |
11 | my ($orig) = @_; |
d10d5b94 |
12 | sub { |
13 | my ($self, $name, $args) = @_; |
2ed2b14f |
14 | my %args = ( |
15 | %$args, |
16 | (ref($args->{order_by}) eq 'HASH' |
17 | ? %{$args->{order_by}} |
18 | : ()) |
19 | ); |
20 | my %overrides; |
d10d5b94 |
21 | foreach my $clause (map /^!(.*)$/, keys %args) { |
22 | my $override = delete $args{"!${clause}"}; |
2ed2b14f |
23 | $overrides{$clause} = ( |
d10d5b94 |
24 | ref($override) eq 'CODE' |
2ed2b14f |
25 | ? $self->$override($args{$clause}) |
d10d5b94 |
26 | : $override |
27 | ); |
28 | } |
2ed2b14f |
29 | $self->$orig($name, { %$args, %overrides }); |
d10d5b94 |
30 | } |
31 | }); |
32 | } |
33 | } |
34 | |
35 | 1; |