X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FOracle%2FGeneric.pm;h=07abe5793e663e644c03cc37282617a8fdee2525;hb=373940e16de14913107bcd5cbb6e6a286a6b795e;hp=eeade7f2ac64bb3c2d79a3bb237e7f47032259da;hpb=66cab05c1e8ef4a12f19deca15791b45e5559905;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm index eeade7f..07abe57 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm @@ -12,6 +12,7 @@ DBIx::Class::Storage::DBI::Oracle - Automatic primary key class for Oracle # In your table classes __PACKAGE__->load_components(qw/PK::Auto Core/); + __PACKAGE__->add_columns({ id => { sequence => 'mysequence', auto_nextval => 1 } }); __PACKAGE__->set_primary_key('id'); __PACKAGE__->sequence('mysequence'); @@ -30,11 +31,14 @@ use base qw/DBIx::Class::Storage::DBI::MultiDistinctEmulation/; # __PACKAGE__->load_components(qw/PK::Auto/); 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) = $dbh->selectrow_array($sql); - return $id; + my ($self, $dbh, $source, @columns) = @_; + my @ids = (); + foreach my $col (@columns) { + my $seq = ($source->column_info($col)->{sequence} ||= $self->get_autoinc_seq($source,$col)); + my $id = $self->_sequence_fetch( 'currval', $seq ); + push @ids, $id; + } + return @ids; } sub _dbh_get_autoinc_seq { @@ -59,6 +63,12 @@ sub _dbh_get_autoinc_seq { $self->throw_exception("Unable to find a sequence INSERT trigger on table '" . $source->name . "'."); } +sub _sequence_fetch { + my ( $self, $type, $seq ) = @_; + my ($id) = $self->dbh->selectrow_array("SELECT ${seq}.${type} FROM DUAL"); + return $id; +} + =head2 get_autoinc_seq Returns the sequence name for an autoincrement column @@ -68,7 +78,7 @@ Returns the sequence name for an autoincrement column sub get_autoinc_seq { my ($self, $source, $col) = @_; - $self->dbh_do($self->can('_dbh_get_autoinc_seq'), $source, $col); + $self->dbh_do('_dbh_get_autoinc_seq', $source, $col); } =head2 columns_info_for @@ -84,6 +94,15 @@ sub columns_info_for { $self->next::method(uc($table)); } +=head2 datetime_parser_type + +This sets the proper DateTime::Format module for use with +L. + +=cut + +sub datetime_parser_type { return "DateTime::Format::Oracle"; } + =head1 AUTHORS Andy Grundman