use strictures 1;
use Data::Query::ExprBuilder::Identifier;
-use Data::Query::Constants qw(DQ_SELECT);
-use Data::Query::ExprHelpers qw(perl_scalar_value identifier);
+use Data::Query::ExprHelpers;
+use Data::Query::Constants;
sub expr (&) {
- _mk_expr($_[0]);
+ _run_expr($_[0])->{expr};
}
-sub _mk_expr {
+sub _run_expr {
local $_ = Data::Query::ExprBuilder::Identifier->new({
- expr => identifier()
+ expr => Identifier(),
});
- $_[0]->()->{expr};
+ $_[0]->();
}
sub AS {
ref()
? $_
: { expr => perl_scalar_value($_) }
- ), do {
- local $_ = Data::Query::ExprBuilder::Identifier->new({
- expr => identifier()
- });
- $_[0]->();
- };
+ ), _run_expr(shift);
my @final;
while (@select) {
my $e = shift @select;
- my $res = push @final, +{ expr => $e->{expr} };
- if (ref($select[0]) eq 'LIES::AS') {
- $res->{name} = identifier(shift @select);
- }
+ push @final,
+ (ref($select[0]) eq 'LIES::AS'
+ ? Alias(${shift(@select)}, $e->{expr})
+ : $e->{expr}
+ );
}
return +{
- expr => {
- type => DQ_SELECT,
- select => \@final
- },
+ expr => Select(\@final, ($_[0]||{})->{expr})
};
}
+sub BY (&;@) { @_ }
+
+sub FROM (&;@) {
+ my @from = _run_expr(shift);
+ if (@from == 2 and ref($from[1]) eq 'LIES::AS') {
+ return +{
+ expr => Alias(${$from[1]}, $from[0])
+ };
+ } elsif (@from == 1) {
+ return { expr => $from[0] };
+ }
+ die "Huh?"
+}
+
1;