From 5a08ca80ed3a8ac1b97e2ca78ee64e494a5509ed Mon Sep 17 00:00:00 2001 From: stronk7 Date: Sun, 28 Jan 2007 11:42:10 +0000 Subject: [PATCH] Oracle now introspects DB to fetch names of sequences and triggers. MDL-6880 --- .../generators/oci8po/oci8po.class.php | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/lib/xmldb/classes/generators/oci8po/oci8po.class.php b/lib/xmldb/classes/generators/oci8po/oci8po.class.php index 2c040d7bb1..7f380b565f 100644 --- a/lib/xmldb/classes/generators/oci8po/oci8po.class.php +++ b/lib/xmldb/classes/generators/oci8po/oci8po.class.php @@ -176,11 +176,11 @@ class XMLDBoci8po extends XMLDBgenerator { */ function getDropSequenceSQL ($xmldb_table, $xmldb_field, $include_trigger=false) { - $sequence_name = $this->getNameForObject($xmldb_table->getName(), $xmldb_field->getName(), 'seq'); + $sequence_name = $this->getSequenceFromDB($xmldb_table); $sequence = "DROP SEQUENCE " . $sequence_name; - $trigger_name = $this->getNameForObject($xmldb_table->getName(), $xmldb_field->getName(), 'trg'); + $trigger_name = $this->getTriggerFromDB($xmldb_table); $trigger = "DROP TRIGGER " . $trigger_name; @@ -241,13 +241,13 @@ class XMLDBoci8po extends XMLDBgenerator { $xmldb_field = new XMLDBField('id'); // Fields having sequences should be exclusively, id. - $oldseqname = $this->getNameForObject($xmldb_table->getName(), $xmldb_field->getName(), 'seq'); + $oldseqname = $this->getSequenceFromDB($xmldb_table); $newseqname = $this->getNameForObject($newname, $xmldb_field->getName(), 'seq'); /// Rename de sequence $results[] = 'RENAME ' . $oldseqname . ' TO ' . $newseqname; - $oldtriggername = $this->getNameForObject($xmldb_table->getName(), $xmldb_field->getName(), 'trg'); + $oldtriggername = $this->getTriggerFromDB($xmldb_table); $newtriggername = $this->getNameForObject($newname, $xmldb_field->getName(), 'trg'); /// Drop old trigger @@ -527,6 +527,25 @@ class XMLDBoci8po extends XMLDBgenerator { return $sequencename; } + /** + * Given one XMLDBTable returns one string with the trigger + * in the table (fetched from DB) + * If no trigger is found, returns false + */ + function getTriggerFromDB($xmldb_table) { + + $tablename = strtoupper($this->getTableName($xmldb_table)); + $triggername = false; + + if ($trigger = get_record_sql("SELECT trigger_name, trigger_body + FROM user_triggers + WHERE table_name = '{$tablename}'")) { + $triggername = $trigger->trigger_name; + } + + return $triggername; + } + /** * Given one object name and it's type (pk, uk, fk, ck, ix, uix, seq, trg) * return if such name is currently in use (true) or no (false) -- 2.39.5