make sure extraclauses doesn't kill already extant overrides for from
[scpubgit/Q-Branch.git] / lib / SQL / Abstract / Plugin / BangOverrides.pm
CommitLineData
d10d5b94 1package SQL::Abstract::Plugin::BangOverrides;
2
3use Moo;
4
5with 'SQL::Abstract::Role::Plugin';
6
7sub register_extensions {
8 my ($self, $sqla) = @_;
9 foreach my $stmt ($sqla->statement_list) {
10 $sqla->wrap_expander($stmt => sub ($orig) {
11 sub {
12 my ($self, $name, $args) = @_;
13 my %args = %$args;
14 foreach my $clause (map /^!(.*)$/, keys %args) {
15 my $override = delete $args{"!${clause}"};
16 $args{$clause} = (
17 ref($override) eq 'CODE'
18 ? $override->($args{$clause})
19 : $override
20 );
21 }
22 $self->$orig($name, \%args);
23 }
24 });
25 }
26}
27
281;