1 package Data::Query::ExprDeclare;
4 use Data::Query::ExprBuilder::Identifier;
5 use Data::Query::ExprHelpers;
6 use Data::Query::Constants;
11 our @EXPORT = qw(expr SELECT AS FROM BY JOIN ON LEFT);
14 _run_expr($_[0])->{expr};
18 local $_ = Data::Query::ExprBuilder::Identifier->new({
25 ref($_[0]) ? $_[0]->{expr} : perl_scalar_value($_[0])
30 (bless(\$as, 'LIES::AS'), @_);
34 my @select = map _value($_), _run_expr(shift);
37 my $e = shift @select;
39 (ref($select[0]) eq 'LIES::AS'
40 ? Alias(${shift(@select)}, $e)
45 return Select(\@final, $_[0]);
51 my @from = _run_expr(shift);
53 if (@from == 2 and ref($from[1]) eq 'LIES::AS') {
54 Alias(${$from[1]}, _value($from[0]))
55 } elsif (@from == 1) {
59 while ($_[0] and is_Join($_[0])) {
60 $from_dq = { %{+shift}, left => $from_dq };
67 my ($join, @rest) = @_;
68 die "LEFT used as modifier on non-join ${join}"
69 unless is_Join($join);
70 return +{ %$join, outer => 'LEFT' }, @rest;
74 my $join = FROM(\&{+shift});
76 if ($_[0]->$_isa('LIES::ON')) {
82 Join(undef, $join, $on), @_;
86 my $on = _value(_run_expr(shift));
87 return bless(\$on, 'LIES::ON'), @_;
92 return Where(_value(_run_expr($w))), @_;