first cut at GenericSubquery
[dbsrgits/Data-Query.git] / t / expr.include
index 0521b29..7215502 100644 (file)
@@ -1,17 +1,17 @@
 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 {
@@ -24,27 +24,34 @@ sub SELECT (&;@) {
     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;