X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI%2FOracle.pm;h=8d0ea19cd94d28ecacbf5d8826441931638dfdcc;hb=c34033b1f21ade200b20f78940c2c32a8843fd17;hp=c09da6784c22ca1078bb9ab849288c4f2e24e573;hpb=22f91663244e30dd4bcae10e54a761113f3a587c;p=dbsrgits%2FDBIx-Class-Schema-Loader.git diff --git a/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm b/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm index c09da67..8d0ea19 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm @@ -2,19 +2,16 @@ package DBIx::Class::Schema::Loader::DBI::Oracle; use strict; use warnings; -use base qw/ - DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault - DBIx::Class::Schema::Loader::DBI -/; +use base 'DBIx::Class::Schema::Loader::DBI::Component::QuotedDefault'; use mro 'c3'; use Try::Tiny; use namespace::clean; -our $VERSION = '0.07019'; +our $VERSION = '0.07032'; =head1 NAME -DBIx::Class::Schema::Loader::DBI::Oracle - DBIx::Class::Schema::Loader::DBI +DBIx::Class::Schema::Loader::DBI::Oracle - DBIx::Class::Schema::Loader::DBI Oracle Implementation. =head1 DESCRIPTION @@ -81,6 +78,32 @@ sub _filter_tables { return $self->next::method(@_); } +sub _table_fk_info { + my $self = shift; + my ($table) = @_; + + my $rels = $self->next::method(@_); + + my $deferrable_sth = $self->dbh->prepare_cached(<<'EOF'); +select deferrable from all_constraints +where owner = ? and table_name = ? and constraint_name = ? +EOF + + foreach my $rel (@$rels) { + # Oracle does not have update rules + $rel->{attrs}{on_update} = 'NO ACTION';; + + # DBD::Oracle's foreign_key_info does not return DEFERRABILITY, so we get it ourselves + my ($deferrable) = $self->dbh->selectrow_array( + $deferrable_sth, undef, $table->schema, $table->name, $rel->{_constraint_name} + ); + + $rel->{attrs}{is_deferrable} = $deferrable && $deferrable =~ /^DEFERRABLE/i ? 1 : 0; + } + + return $rels; +} + sub _table_uniq_info { my ($self, $table) = @_; @@ -103,7 +126,7 @@ EOF my $constr_col = $self->_lc($constr->[1]); push @{$constr_names{$constr_name}}, $constr_col; } - + my @uniqs = map { [ $_ => $constr_names{$_} ] } keys %constr_names; return \@uniqs; } @@ -118,7 +141,7 @@ sub _table_comment { ($table_comment) = $self->dbh->selectrow_array(<<'EOF', {}, $table->schema, $table->name); SELECT comments FROM all_tab_comments -WHERE owner = ? +WHERE owner = ? AND table_name = ? AND (table_type = 'TABLE' OR table_type = 'VIEW') EOF @@ -136,7 +159,7 @@ sub _column_comment { ($column_comment) = $self->dbh->selectrow_array(<<'EOF', {}, $table->schema, $table->name, $self->_uc($column_name)); SELECT comments FROM all_col_comments -WHERE owner = ? +WHERE owner = ? AND table_name = ? AND column_name = ? EOF @@ -318,7 +341,7 @@ EOF elsif (lc($info->{data_type}) eq 'binary_float') { $info->{data_type} = 'real'; $info->{original}{data_type} = 'binary_float'; - } + } elsif (lc($info->{data_type}) eq 'binary_double') { $info->{data_type} = 'double precision'; $info->{original}{data_type} = 'binary_double';