RETURNING ... INTO support
Matt S Trout [Sun, 17 Mar 2013 22:31:06 +0000 (22:31 +0000)]
lib/Data/Query/ExprHelpers.pm
lib/Data/Query/Renderer/SQL/Dialect/ReturnInto.pm [new file with mode: 0644]
lib/Data/Query/Renderer/SQL/Naive.pm

index be56f2f..674bacc 100644 (file)
@@ -5,7 +5,11 @@ use Data::Query::Constants;
 
 use base qw(Exporter);
 
-our @EXPORT = qw(perl_scalar_value perl_operator Literal Identifier compose);
+our @EXPORT = qw(
+  perl_scalar_value perl_operator Literal Identifier compose intersperse
+);
+
+sub intersperse { my $i = shift; my @i = map +($_, $i), @_; pop @i; @i }
 
 sub perl_scalar_value {
   +{
diff --git a/lib/Data/Query/Renderer/SQL/Dialect/ReturnInto.pm b/lib/Data/Query/Renderer/SQL/Dialect/ReturnInto.pm
new file mode 100644 (file)
index 0000000..2d3b621
--- /dev/null
@@ -0,0 +1,20 @@
+package Data::Query::Renderer::SQL::Dialect::ReturnInto;
+
+use Data::Query::ExprHelpers;
+use Moo::Role;
+
+around _render_insert => sub {
+  my ($orig, $self) = (shift, shift);
+  my ($dq) = @_;
+  if (my $into = $dq->{__PACKAGE__.'.into'}) {
+    my @ret = @{$self->$orig(@_)};
+    return [
+      @ret, $self->_format_keyword('INTO'), 
+      intersperse(',', map $self->_render($_), @$into)
+    ];
+  } else {
+    return $self->$orig(@_);
+  }
+};
+
+1;
index aac3c73..fb18512 100644 (file)
@@ -2,8 +2,6 @@ package Data::Query::Renderer::SQL::Naive;
 
 use strictures 1;
 
-sub intersperse { my $i = shift; my @i = map +($_, $i), @_; pop @i; @i }
-
 use SQL::ReservedWords;
 use Data::Query::ExprHelpers;