Commit | Line | Data |
---|---|---|
9c8fc055 | 1 | use strictures 1; |
515523bc | 2 | use Data::Query::ExprBuilder::Identifier; |
6b45ffe4 | 3 | use Data::Query::ExprHelpers; |
4 | use Data::Query::Constants; | |
515523bc | 5 | |
6 | sub expr (&) { | |
2cf0bb42 | 7 | _run_expr($_[0])->{expr}; |
515523bc | 8 | } |
9 | ||
2cf0bb42 | 10 | sub _run_expr { |
515523bc | 11 | local $_ = Data::Query::ExprBuilder::Identifier->new({ |
6b45ffe4 | 12 | expr => Identifier(), |
515523bc | 13 | }); |
2cf0bb42 | 14 | $_[0]->(); |
515523bc | 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($_) } | |
2cf0bb42 | 27 | ), _run_expr(shift); |
9c8fc055 | 28 | my @final; |
29 | while (@select) { | |
30 | my $e = shift @select; | |
bdb576cb | 31 | push @final, |
32 | (ref($select[0]) eq 'LIES::AS' | |
6b45ffe4 | 33 | ? Alias(${shift(@select)}, $e->{expr}) |
bdb576cb | 34 | : $e->{expr} |
35 | ); | |
9c8fc055 | 36 | } |
37 | ||
38 | return +{ | |
6b45ffe4 | 39 | expr => Select(\@final, ($_[0]||{})->{expr}) |
9c8fc055 | 40 | }; |
41 | } | |
42 | ||
2cf0bb42 | 43 | sub BY (&;@) { @_ } |
44 | ||
45 | sub FROM (&;@) { | |
46 | my @from = _run_expr(shift); | |
47 | if (@from == 2 and ref($from[1]) eq 'LIES::AS') { | |
48 | return +{ | |
6b45ffe4 | 49 | expr => Alias(${$from[1]}, $from[0]) |
2cf0bb42 | 50 | }; |
51 | } elsif (@from == 1) { | |
52 | return { expr => $from[0] }; | |
53 | } | |
54 | die "Huh?" | |
55 | } | |
56 | ||
515523bc | 57 | 1; |