allow optional hashref as final arg to helpers
[dbsrgits/Data-Query.git] / t / expr.include
CommitLineData
9c8fc055 1use strictures 1;
515523bc 2use Data::Query::ExprBuilder::Identifier;
6b45ffe4 3use Data::Query::ExprHelpers;
4use Data::Query::Constants;
515523bc 5
6sub expr (&) {
2cf0bb42 7 _run_expr($_[0])->{expr};
515523bc 8}
9
2cf0bb42 10sub _run_expr {
515523bc 11 local $_ = Data::Query::ExprBuilder::Identifier->new({
6b45ffe4 12 expr => Identifier(),
515523bc 13 });
2cf0bb42 14 $_[0]->();
515523bc 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($_) }
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 43sub BY (&;@) { @_ }
44
45sub 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 571;