Commit | Line | Data |
c509b481 |
1 | package DBIx::Class::SQLMaker::Role::SQLA2Passthrough; |
2 | |
3 | use Role::Tiny; |
4 | |
5 | around select => sub { |
6 | my ($orig, $self, $table, $fields, $where, $rs_attrs, $limit, $offset) = @_; |
7 | |
8 | $fields = \[ $self->render_expr({ -list => [ |
9 | grep defined, |
10 | map +(ref($_) eq 'HASH' |
11 | ? do { |
12 | my %f = %$_; |
13 | my $as = delete $f{-as}; |
14 | my ($f, $rhs) = %f; |
15 | my $func = +{ "-${f}" => $rhs }; |
16 | ($as |
17 | ? +{ -op => [ 'as', $func, { -ident => [ $as ] } ] } |
18 | : $func) |
19 | } |
20 | : $_), ref($fields) eq 'ARRAY' ? @$fields : $fields |
21 | ] }, -ident) ]; |
22 | |
23 | if (my $gb = $rs_attrs->{group_by}) { |
24 | $rs_attrs = { |
25 | %$rs_attrs, |
26 | group_by => \[ $self->render_expr({ -list => $gb }, -ident) ] |
27 | }; |
28 | } |
29 | $self->$orig($table, $fields, $where, $rs_attrs, $limit, $offset); |
30 | }); |
31 | |
32 | 1; |