X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FOracle%2FGeneric.pm;h=d049d6c644f0866e0876e3bcaf7544ddf6a16eda;hb=4bea1fe7a2b4827947b3d0d64b16a0f2c5e594bd;hp=be1faf89f11758bb493b9b5dceb501e1168bcfc7;hpb=cca282b601b57a8de658986fc3f0d789a72749ea;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm index be1faf8..d049d6c 100644 --- a/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm +++ b/lib/DBIx/Class/Storage/DBI/Oracle/Generic.pm @@ -8,6 +8,7 @@ use Try::Tiny; use namespace::clean; __PACKAGE__->sql_limit_dialect ('RowNum'); +__PACKAGE__->sql_quote_char ('"'); =head1 NAME @@ -79,6 +80,21 @@ use base qw/DBIx::Class::Storage::DBI/; use mro 'c3'; __PACKAGE__->sql_maker_class('DBIx::Class::SQLMaker::Oracle'); +__PACKAGE__->datetime_parser_type('DateTime::Format::Oracle'); + +sub _determine_supports_insert_returning { + my $self = shift; + +# TODO find out which version supports the RETURNING syntax +# 8i has it and earlier docs are a 404 on oracle.com + + return 1 + if $self->_server_info->{normalized_dbms_version} >= 8.001; + + return 0; +} + +__PACKAGE__->_use_insert_returning_bound (1); sub deployment_statements { my $self = shift;; @@ -136,9 +152,12 @@ sub _dbh_get_autoinc_seq { # disable default bindtype local $sql_maker->{bindtype} = 'normal'; - # look up the correct sequence automatically my ( $schema, $table ) = $source_name =~ /( (?:${ql})? \w+ (?:${qr})? ) \. ( (?:${ql})? \w+ (?:${qr})? )/x; + + # if no explicit schema was requested - use the default schema (which in the case of Oracle is the db user) + $schema ||= uc( ($self->_dbi_connect_info||[])->[1] || ''); + my ($sql, @bind) = $sql_maker->select ( 'ALL_TRIGGERS', [qw/TRIGGER_BODY TABLE_OWNER TRIGGER_NAME/], @@ -291,6 +310,15 @@ sub _dbh_execute { return wantarray ? @res : $res[0]; } +sub _dbh_execute_array { + #my ($self, $sth, $tuple_status, @extra) = @_; + + # DBD::Oracle warns loudly on partial execute_array failures + local $_[1]->{PrintWarn} = 0; + + shift->next::method(@_); +} + =head2 get_autoinc_seq Returns the sequence name for an autoincrement column @@ -308,10 +336,6 @@ sub get_autoinc_seq { This sets the proper DateTime::Format module for use with L. -=cut - -sub datetime_parser_type { return "DateTime::Format::Oracle"; } - =head2 connect_call_datetime_setup Used as: @@ -383,15 +407,14 @@ sub source_bind_attributes my $self = shift; my($source) = @_; - my %bind_attributes; + my %bind_attributes = %{ $self->next::method(@_) }; foreach my $column ($source->columns) { - my $data_type = $source->column_info($column)->{data_type} - or next; + my %column_bind_attrs = %{ $bind_attributes{$column} || {} }; - my %column_bind_attrs = $self->bind_attribute_by_data_type($data_type); + my $data_type = $source->column_info($column)->{data_type}; - if ($data_type =~ /^[BC]LOB$/i) { + if ($self->_is_lob_type($data_type)) { if ($DBD::Oracle::VERSION eq '1.23') { $self->throw_exception( "BLOB/CLOB support in DBD::Oracle == 1.23 is broken, use an earlier or later ". @@ -399,7 +422,7 @@ sub source_bind_attributes ); } - $column_bind_attrs{'ora_type'} = uc($data_type) eq 'CLOB' + $column_bind_attrs{'ora_type'} = $self->_is_text_lob_type($data_type) ? DBD::Oracle::ORA_CLOB() : DBD::Oracle::ORA_BLOB() ;