Remove obsolete Oracle _insert_returning method
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / SQLMaker / Oracle.pm
index c7b36c5..715083a 100644 (file)
@@ -1,10 +1,11 @@
 package # Hide from PAUSE
   DBIx::Class::SQLMaker::Oracle;
 
-use warnings;
-use strict;
+use Module::Runtime ();
+use Moo;
+use namespace::clean;
 
-use base qw( DBIx::Class::SQLMaker );
+extends 'DBIx::Class::SQLMaker';
 
 BEGIN {
   use DBIx::Class::Optional::Dependencies;
@@ -12,20 +13,22 @@ BEGIN {
     unless DBIx::Class::Optional::Dependencies->req_ok_for ('id_shortener');
 }
 
-sub new {
-  my $self = shift;
-  my %opts = (ref $_[0] eq 'HASH') ? %{$_[0]} : @_;
-  push @{$opts{special_ops}}, {
-    regex => qr/^prior$/i,
-    handler => '_where_field_PRIOR',
-  };
-
-  $self->SUPER::new (\%opts);
+sub _build_converter_class {
+  Module::Runtime::use_module('DBIx::Class::SQLMaker::Converter::Oracle');
 }
 
+around _build_renderer_roles => sub {
+  my ($orig, $self) = (shift, shift);
+  (
+    'Data::Query::Renderer::SQL::Extension::ConnectBy',
+    'Data::Query::Renderer::SQL::Dialect::ReturnInto',
+    $self->$orig(@_),
+  );
+};
+
 sub _assemble_binds {
   my $self = shift;
-  return map { @{ (delete $self->{"${_}_bind"}) || [] } } (qw/select from where oracle_connect_by group having order/);
+  return map { @{ (delete $self->{"${_}_bind"}) || [] } } (qw/pre_select select from where oracle_connect_by group having order limit/);
 }
 
 
@@ -36,7 +39,7 @@ sub _parse_rs_attrs {
     my ($cb_sql, @cb_bind) = $self->_connect_by($rs_attrs);
     push @{$self->{oracle_connect_by_bind}}, @cb_bind;
 
-    my $sql = $self->SUPER::_parse_rs_attrs(@_);
+    my $sql = $self->next::method(@_);
 
     return "$cb_sql $sql";
 }
@@ -75,13 +78,13 @@ sub _order_siblings_by {
 
     my ( @sql, @bind );
     for my $c ( $self->_order_by_chunks($arg) ) {
-        $self->_SWITCH_refkind(
-            $c,
-            {
-                SCALAR   => sub { push @sql, $c },
-                ARRAYREF => sub { push @sql, shift @$c; push @bind, @$c },
-            }
-        );
+        if (ref $c) {
+            push @sql, shift @$c;
+            push @bind, @$c;
+        }
+        else {
+            push @sql, $c;
+        }
     }
 
     my $sql =
@@ -201,48 +204,4 @@ sub _unqualify_colname {
   return $self->_shorten_identifier($self->next::method($fqcn));
 }
 
-#
-# Oracle has a different INSERT...RETURNING syntax
-#
-
-sub _insert_returning {
-  my ($self, $options) = @_;
-
-  my $f = $options->{returning};
-
-  my ($f_list, @f_names) = $self->_SWITCH_refkind($f, {
-    ARRAYREF => sub {
-      (join ', ', map { $self->_quote($_) } @$f),
-      @$f
-    },
-    SCALAR => sub {
-      $self->_quote($f),
-      $f,
-    },
-    SCALARREF => sub {
-      $$f,
-      $$f,
-    },
-  });
-
-  my $rc_ref = $options->{returning_container}
-    or $self->throw_exception('No returning container supplied for IR values');
-
-  @$rc_ref = (undef) x @f_names;
-
-  return (
-    ( join (' ',
-      $self->_sqlcase(' returning'),
-      $f_list,
-      $self->_sqlcase('into'),
-      join (', ', ('?') x @f_names ),
-    )),
-    map {
-      $self->{bindtype} eq 'columns'
-        ? [ $f_names[$_] => \$rc_ref->[$_] ]
-        : \$rc_ref->[$_]
-    } (0 .. $#f_names),
-  );
-}
-
 1;