Commit | Line | Data |
9c8fc055 |
1 | use strictures 1; |
515523bc |
2 | use Data::Query::ExprBuilder::Identifier; |
9c8fc055 |
3 | use Data::Query::Constants qw(DQ_SELECT); |
4 | use Data::Query::ExprHelpers qw(perl_scalar_value identifier); |
515523bc |
5 | |
6 | sub expr (&) { |
7 | _mk_expr($_[0]); |
8 | } |
9 | |
10 | sub _mk_expr { |
11 | local $_ = Data::Query::ExprBuilder::Identifier->new({ |
9c8fc055 |
12 | expr => identifier() |
515523bc |
13 | }); |
14 | $_[0]->()->{expr}; |
15 | } |
16 | |
9c8fc055 |
17 | sub AS { |
18 | my $as = shift; |
19 | (bless(\$as, 'LIES::AS'), @_); |
20 | } |
21 | |
22 | sub SELECT (&;@) { |
23 | my @select = map +( |
24 | ref() |
25 | ? $_ |
26 | : { expr => perl_scalar_value($_) } |
27 | ), do { |
28 | local $_ = Data::Query::ExprBuilder::Identifier->new({ |
29 | expr => identifier() |
30 | }); |
31 | $_[0]->(); |
32 | }; |
33 | my @final; |
34 | while (@select) { |
35 | my $e = shift @select; |
36 | my $res = push @final, +{ expr => $e->{expr} }; |
37 | if (ref($select[0]) eq 'LIES::AS') { |
38 | $res->{name} = identifier(shift @select); |
39 | } |
40 | } |
41 | |
42 | return +{ |
43 | expr => { |
44 | type => DQ_SELECT, |
45 | select => \@final |
46 | }, |
47 | }; |
48 | } |
49 | |
515523bc |
50 | 1; |