X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI%2FOracle.pm;h=9651ba36f92ebf7af26c05752e6e6d6610ea15ec;hb=e52d195f8f7e0939fa325cf31e59804e00a30511;hp=e6ef0a9d7c61321c1d3b9811745aedec74df94d0;hpb=3b61a7ca5fade36343b5abdd11bb6b29e47e043c;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 e6ef0a9..9651ba3 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm @@ -7,7 +7,7 @@ use mro 'c3'; use Try::Tiny; use namespace::clean; -our $VERSION = '0.07028'; +our $VERSION = '0.07034_01'; =head1 NAME @@ -78,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) = @_;