X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FOracle.pm;h=cd5449b6ee9d2c45772316b2ee6486fe30327c85;hb=6fe735fad298585c8d6982d496bcbb7b75400a6b;hp=73859c52847da4ac777791d83ed77974216262f2;hpb=34470972fbb715106e4990bab61871498dae979f;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Oracle.pm b/lib/DBIx/Class/Storage/DBI/Oracle.pm index 73859c5..cd5449b 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle.pm @@ -5,30 +5,24 @@ use warnings; use Carp qw/croak/; -use base qw/DBIx::Class::Storage::DBI/; +use base qw/DBIx::Class::Storage::DBI::MultiDistinctEmulation/; # __PACKAGE__->load_components(qw/PK::Auto/); sub last_insert_id { - my ($self, $source) = shift; - $self->get_autoinc_seq($source) unless $source->{_autoinc_seq}; - my $sql = "SELECT " . $source->{_autoinc_seq} . ".currval FROM DUAL"; + my ($self,$source,$col) = @_; + my $seq = ($source->column_info($col)->{sequence} ||= $self->get_autoinc_seq($source,$col)); + my $sql = "SELECT " . $seq . ".currval FROM DUAL"; my ($id) = $self->_dbh->selectrow_array($sql); - return $id; + return $id; } sub get_autoinc_seq { - my ($self, $source) = @_; - - # return the user-defined sequence if known - my $result_class = $source->result_class; - if ($result_class->can('sequence') and $result_class->sequence) { - return ($source->{_autoinc_seq} = $result_class->sequence); - } - + my ($self,$source,$col) = @_; + # look up the correct sequence automatically my $dbh = $self->_dbh; - my $sql = qq{ + my $sql = q{ SELECT trigger_body FROM ALL_TRIGGERS t WHERE t.table_name = ? AND t.triggering_event = 'INSERT' @@ -39,18 +33,14 @@ sub get_autoinc_seq { my $sth = $dbh->prepare($sql); $sth->execute( uc($source->name) ); while (my ($insert_trigger) = $sth->fetchrow_array) { - if ($insert_trigger =~ m!(\w+)\.nextval!i ) { - $source->{_autoinc_seq} = uc($1); - } - } - unless ($source->{_autoinc_seq}) { - croak "Unable to find a sequence INSERT trigger on table '" . $self->_table_name . "'."; + return uc($1) if $insert_trigger =~ m!(\w+)\.nextval!i; # col name goes here??? } + croak "Unable to find a sequence INSERT trigger on table '" . $source->name . "'."; } 1; -=head1 NAME +=head1 NAME DBIx::Class::Storage::DBI::Oracle - Automatic primary key class for Oracle