Switch sql_maker_class and datetime_parser_type to component_class accessors
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Oracle / Generic.pm
index d9d230a..d049d6c 100644 (file)
@@ -8,6 +8,7 @@ use Try::Tiny;
 use namespace::clean;
 
 __PACKAGE__->sql_limit_dialect ('RowNum');
+__PACKAGE__->sql_quote_char ('"');
 
 =head1 NAME
 
@@ -79,6 +80,7 @@ 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;
@@ -150,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/],
@@ -305,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
@@ -322,10 +336,6 @@ sub get_autoinc_seq {
 This sets the proper DateTime::Format module for use with
 L<DBIx::Class::InflateColumn::DateTime>.
 
-=cut
-
-sub datetime_parser_type { return "DateTime::Format::Oracle"; }
-
 =head2 connect_call_datetime_setup
 
 Used as:
@@ -397,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 ".
@@ -413,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()
       ;