introduce SELECT capability and skeleton test
[dbsrgits/Data-Query.git] / t / expr.include
1 use strictures 1;
2 use Data::Query::ExprBuilder::Identifier;
3 use Data::Query::Constants qw(DQ_SELECT);
4 use Data::Query::ExprHelpers qw(perl_scalar_value identifier);
5
6 sub expr (&) {
7   _mk_expr($_[0]);
8 }
9
10 sub _mk_expr {
11   local $_ = Data::Query::ExprBuilder::Identifier->new({
12     expr => identifier()
13   });
14   $_[0]->()->{expr};
15 }
16
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
50 1;