X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSQLMaker%2FOracle.pm;h=b2a2c1f55a9143410be77ea2a08a9fe7dbfa9a0d;hp=0a773e7ad063a65666268182e63fa157ed8e03b6;hb=bf51641f97a504ae9796fcc45da4e409c6466ca4;hpb=5fe8a42eafc90d2c472b4c94e1733d87fd75021d diff --git a/lib/DBIx/Class/SQLMaker/Oracle.pm b/lib/DBIx/Class/SQLMaker/Oracle.pm index 0a773e7..b2a2c1f 100644 --- a/lib/DBIx/Class/SQLMaker/Oracle.pm +++ b/lib/DBIx/Class/SQLMaker/Oracle.pm @@ -183,4 +183,48 @@ 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 croak ('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;