1 package Data::Query::ExprHelpers;
4 use Data::Query::Constants;
8 our @EXPORT = qw(perl_scalar_value perl_operator Literal Identifier compose);
10 sub perl_scalar_value {
13 subtype => { Perl => 'Scalar' },
15 $_[1] ? (value_meta => $_[1]) : ()
23 operator => { Perl => $op },
29 Join => [ qw(left right on outer) ],
30 Alias => [ qw(to from) ],
31 Operator => [ qw(operator args) ],
32 Select => [ qw(select from) ],
33 Where => [ qw(where from) ],
34 Order => [ qw(by reverse from) ],
35 Group => [ qw(by from) ],
36 Delete => [ qw(where target) ],
37 Update => [ qw(set where target) ],
38 Insert => [ qw(names values target returning) ],
39 Slice => [ qw(offset limit from) ],
55 ($_[1] ? (values => $_[1]) : ())
61 type => DQ_IDENTIFIER,
66 foreach my $name (values %Data::Query::Constants::CONST) {
68 my $sub = "is_${name}";
75 my @map = @{$map{$name}};
77 my $dq = { type => $name };
79 $dq->{$map[$_]} = $_[$_] if defined $_[$_];
90 my $type = Scalar::Util::reftype($code);
91 unless($type and $type eq 'CODE') {
93 Carp::croak("Not a subroutine reference");
97 return shift unless @_ > 1;
102 local(*{$caller."::a"}) = \my $a;
103 local(*{$caller."::b"}) = \my $b;
106 foreach (reverse @_) {