X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FOracle.pm;h=77cedf303e0a14d6b789f66cf8662017fc1ec563;hb=d4f16b21abb7a541e0c44bfe3ec68309a8d722fa;hp=063c88b55927aee7e70ca5c585d5447dded77619;hpb=ca48cd7ddaf84b1e9a37c975321f96f2e65e8198;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Oracle.pm b/lib/DBIx/Class/Storage/DBI/Oracle.pm index 063c88b..77cedf3 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle.pm @@ -3,33 +3,34 @@ package DBIx::Class::Storage::DBI::Oracle; use strict; use warnings; -use Carp qw/croak/; +use Carp::Clan qw/^DBIx::Class/; -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,$col) = @_; +sub _dbh_last_insert_id { + my ($self, $dbh, $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; + my $sql = 'SELECT ' . $seq . '.currval FROM DUAL'; + my ($id) = $dbh->selectrow_array($sql); + return $id; } -sub get_autoinc_seq { - my ($self,$source,$col) = @_; - +sub _dbh_get_autoinc_seq { + my ($self, $dbh, $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' AND t.status = 'ENABLED' }; + # trigger_body is a LONG $dbh->{LongReadLen} = 64 * 1024 if ($dbh->{LongReadLen} < 64 * 1024); + my $sth = $dbh->prepare($sql); $sth->execute( uc($source->name) ); while (my ($insert_trigger) = $sth->fetchrow_array) { @@ -38,9 +39,22 @@ sub get_autoinc_seq { croak "Unable to find a sequence INSERT trigger on table '" . $source->name . "'."; } +sub get_autoinc_seq { + my ($self, $source, $col) = @_; + + $self->dbh_do($self->can('_dbh_get_autoinc_seq'), $source, $col); +} + +sub columns_info_for { + my ($self, $table) = @_; + + $self->next::method(uc($table)); +} + + 1; -=head1 NAME +=head1 NAME DBIx::Class::Storage::DBI::Oracle - Automatic primary key class for Oracle