]> git.mjollnir.org Git - moodle.git/commitdiff
Oracle now introspects DB to fetch names of
authorstronk7 <stronk7>
Sun, 28 Jan 2007 11:42:10 +0000 (11:42 +0000)
committerstronk7 <stronk7>
Sun, 28 Jan 2007 11:42:10 +0000 (11:42 +0000)
sequences and triggers. MDL-6880

lib/xmldb/classes/generators/oci8po/oci8po.class.php

index 2c040d7bb1bf3ee33774998049816a8f07b0b8f5..7f380b565f9cc99d8083c04f0eb6344be038dbd5 100644 (file)
@@ -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)