X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FData%2FQuery%2FExprDeclare.pm;h=971e3ccc57756518a785b376bec42ab74f957112;hb=4e0c6139c29c4d618adafef7d11c125dc111d821;hp=0a1bcaa763cb8a8e0a879517cd299fb4a1de080c;hpb=aad6ee1b9034ca9f7cb54cb7d29984c76e9906f0;p=dbsrgits%2FData-Query.git diff --git a/lib/Data/Query/ExprDeclare.pm b/lib/Data/Query/ExprDeclare.pm index 0a1bcaa..971e3cc 100644 --- a/lib/Data/Query/ExprDeclare.pm +++ b/lib/Data/Query/ExprDeclare.pm @@ -8,7 +8,7 @@ use Safe::Isa; use base qw(Exporter); -our @EXPORT = qw(expr SELECT AS FROM BY JOIN ON LEFT); +our @EXPORT = qw(expr SELECT AS FROM BY JOIN ON LEFT WHERE ORDER GROUP); sub expr (&) { _run_expr($_[0])->{expr}; @@ -22,7 +22,13 @@ sub _run_expr { } sub _value { - ref($_[0]) ? $_[0]->{expr} : perl_scalar_value($_[0]) + if ($_[0]->$_isa('Data::Query::ExprBuilder')) { + $_[0]->{expr}; + } elsif (ref($_[0])) { + $_[0] + } else { + perl_scalar_value($_[0]); + } } sub AS { @@ -56,11 +62,13 @@ sub FROM (&;@) { _value($from[0]); } }; - while ($_[0] and is_Join($_[0])) { + while (is_Join($_[0])) { $from_dq = { %{+shift}, left => $from_dq }; } + if (is_Where($_[0])) { + $from_dq = Where(shift->{where}, $from_dq); + } return $from_dq; - die "Huh?" } sub LEFT {