add more attributes
[dbsrgits/Data-Query.git] / t / expr.include
CommitLineData
9c8fc055 1use strictures 1;
515523bc 2use Data::Query::ExprBuilder::Identifier;
2cf0bb42 3use Data::Query::Constants qw(
4 DQ_SELECT DQ_IDENTIFIER DQ_OPERATOR DQ_VALUE DQ_ALIAS
5);
9c8fc055 6use Data::Query::ExprHelpers qw(perl_scalar_value identifier);
515523bc 7
8sub expr (&) {
2cf0bb42 9 _run_expr($_[0])->{expr};
515523bc 10}
11
2cf0bb42 12sub _run_expr {
515523bc 13 local $_ = Data::Query::ExprBuilder::Identifier->new({
9c8fc055 14 expr => identifier()
515523bc 15 });
2cf0bb42 16 $_[0]->();
515523bc 17}
18
9c8fc055 19sub AS {
20 my $as = shift;
21 (bless(\$as, 'LIES::AS'), @_);
22}
23
24sub SELECT (&;@) {
25 my @select = map +(
26 ref()
27 ? $_
28 : { expr => perl_scalar_value($_) }
2cf0bb42 29 ), _run_expr(shift);
9c8fc055 30 my @final;
31 while (@select) {
32 my $e = shift @select;
bdb576cb 33 push @final,
34 (ref($select[0]) eq 'LIES::AS'
35 ? +{
36 type => DQ_ALIAS,
37 alias => $e->{expr},
38 as => ${shift(@select)}
39 }
40 : $e->{expr}
41 );
9c8fc055 42 }
43
44 return +{
45 expr => {
46 type => DQ_SELECT,
47 select => \@final
48 },
2cf0bb42 49 @_ ? (from => $_[0]->{expr}) : ()
9c8fc055 50 };
51}
52
2cf0bb42 53sub BY (&;@) { @_ }
54
55sub FROM (&;@) {
56 my @from = _run_expr(shift);
57 if (@from == 2 and ref($from[1]) eq 'LIES::AS') {
58 return +{
59 expr => {
60 type => DQ_ALIAS,
61 source => $from[0],
62 alias => identifier(${$from[1]}),
63 }
64 };
65 } elsif (@from == 1) {
66 return { expr => $from[0] };
67 }
68 die "Huh?"
69}
70
515523bc 711;