introduce SELECT capability and skeleton test
[dbsrgits/Data-Query.git] / t / expr.include
CommitLineData
9c8fc055 1use strictures 1;
515523bc 2use Data::Query::ExprBuilder::Identifier;
9c8fc055 3use Data::Query::Constants qw(DQ_SELECT);
4use Data::Query::ExprHelpers qw(perl_scalar_value identifier);
515523bc 5
6sub expr (&) {
7 _mk_expr($_[0]);
8}
9
10sub _mk_expr {
11 local $_ = Data::Query::ExprBuilder::Identifier->new({
9c8fc055 12 expr => identifier()
515523bc 13 });
14 $_[0]->()->{expr};
15}
16
9c8fc055 17sub AS {
18 my $as = shift;
19 (bless(\$as, 'LIES::AS'), @_);
20}
21
22sub 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 501;