passthrough role for DBIC sqlmaker
[dbsrgits/SQL-Abstract.git] / lib / DBIx / Class / SQLMaker / Role / SQLA2Passthrough.pm
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;