SELECT a, b FROM foo
[dbsrgits/Data-Query.git] / t / expr.include
1 use strictures 1;
2 use Data::Query::ExprBuilder::Identifier;
3 use Data::Query::ExprHelpers;
4 use Data::Query::Constants;
5
6 sub expr (&) {
7   _run_expr($_[0])->{expr};
8 }
9
10 sub _run_expr {
11   local $_ = Data::Query::ExprBuilder::Identifier->new({
12     expr => Identifier(),
13   });
14   $_[0]->();
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   ), _run_expr(shift);
28   my @final;
29   while (@select) {
30     my $e = shift @select;
31     push @final,
32       (ref($select[0]) eq 'LIES::AS'
33         ? Alias(${shift(@select)}, $e->{expr})
34         : $e->{expr}
35      );
36   }
37       
38   return +{
39     expr => Select(\@final, ($_[0]||{})->{expr})
40   };
41 }
42
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 +{
49       expr => Alias(${$from[1]}, $from[0])
50     };
51   } elsif (@from == 1) {
52     return { expr => $from[0] };
53   }
54   die "Huh?"
55 }
56
57 1;