select+join+where
[dbsrgits/Data-Query.git] / lib / Data / Query / ExprDeclare.pm
index 0a1bcaa..971e3cc 100644 (file)
@@ -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 {