X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FSchema%2FLoader%2FDBI%2FOracle.pm;h=4f65da745e3658a01647a655280b9759dedb712f;hb=5975bbe6;hp=68b2ff65efe42e0c628fe0a2c8e8af20d8c5d168;hpb=4a01c33f6602206d763851bcd795561499baa6e6;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 68b2ff6..4f65da7 100644 --- a/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm +++ b/lib/DBIx/Class/Schema/Loader/DBI/Oracle.pm @@ -91,10 +91,12 @@ sub _table_uniq_info { my ($self, $table) = @_; my $sth = $self->dbh->prepare_cached(<<'EOF', {}, 1); -SELECT constraint_name, acc.column_name -FROM all_constraints -JOIN all_cons_columns acc USING (constraint_name) -WHERE acc.table_name=? and acc.owner = ? AND constraint_type='U' +SELECT ac.constraint_name, acc.column_name +FROM all_constraints ac, all_cons_columns acc +WHERE acc.table_name=? AND acc.owner = ? + AND ac.table_name = acc.table_name AND ac.owner = acc.owner + AND acc.constraint_name = ac.constraint_name + AND ac.constraint_type='U' ORDER BY acc.position EOF @@ -158,26 +160,26 @@ sub _columns_info_for { local $self->dbh->{LongTruncOk} = 1; my $sth = $self->dbh->prepare_cached(<<'EOF', {}, 1); -SELECT atc.column_name, ut.trigger_body -FROM all_triggers ut -JOIN all_trigger_cols atc USING (trigger_name) -WHERE atc.table_name = ? -AND lower(column_usage) LIKE '%new%' AND lower(column_usage) LIKE '%out%' +SELECT trigger_body +FROM all_triggers +WHERE table_name = ? AND table_owner = ? AND upper(trigger_type) LIKE '%BEFORE EACH ROW%' AND lower(triggering_event) LIKE '%insert%' EOF - $sth->execute($table->name); + $sth->execute($table->name, $table->schema); - while (my ($col_name, $trigger_body) = $sth->fetchrow_array) { - $col_name = $self->_lc($col_name); + while (my ($trigger_body) = $sth->fetchrow_array) { + if (my ($seq_schema, $seq_name) = $trigger_body =~ /(?:\."?(\w+)"?)?"?(\w+)"?\.nextval/i) { + if (my ($col_name) = $trigger_body =~ /:new\.(\w+)/i) { + $col_name = $self->_lc($col_name); - $result->{$col_name}{is_auto_increment} = 1; + $result->{$col_name}{is_auto_increment} = 1; - if (my ($seq_schema, $seq_name) = $trigger_body =~ /(?:\."?(\w+)"?)?"?(\w+)"?\.nextval/i) { - $seq_schema = $self->_lc($seq_schema || $table->schema); - $seq_name = $self->_lc($seq_name); + $seq_schema = $self->_lc($seq_schema || $table->schema); + $seq_name = $self->_lc($seq_name); - $result->{$col_name}{sequence} = ($self->qualify_objects ? ($seq_schema . '.') : '') . $seq_name; + $result->{$col_name}{sequence} = ($self->qualify_objects ? ($seq_schema . '.') : '') . $seq_name; + } } }