From 55c4b9435d4659a5063c5a8f68cc3b6467ac4428 Mon Sep 17 00:00:00 2001 From: stronk7 Date: Thu, 28 Sep 2006 17:30:14 +0000 Subject: [PATCH] add_key() and drop_key() are working (with sync of undelying indexes automated) --- lib/ddllib.php | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) diff --git a/lib/ddllib.php b/lib/ddllib.php index 8e127b7407..be7568e26d 100644 --- a/lib/ddllib.php +++ b/lib/ddllib.php @@ -285,6 +285,7 @@ function find_key_name($xmldb_table, $xmldb_key) { case XMLDB_KEY_UNIQUE: $suffix = 'uk'; break; + case XMLDB_KEY_FOREIGN_UNIQUE: case XMLDB_KEY_FOREIGN: $suffix = 'fk'; break; @@ -577,6 +578,90 @@ function change_field_default($table, $field, $continue=true, $feedback=true) { return execute_sql_arr($sqlarr, $continue, $feedback); } +/** + * This function will create the key in the table passed as arguments + * + * @uses $CFG, $db + * @param XMLDBTable table object (just the name is mandatory) + * @param XMLDBKey index object (full specs are required) + * @param boolean continue to specify if must continue on error (true) or stop (false) + * @param boolean feedback to specify to show status info (true) or not (false) + * @return boolean true on success, false on error + */ +function add_key($table, $key, $continue=true, $feedback=true) { + + global $CFG, $db; + + $status = true; + + if (strtolower(get_class($table)) != 'xmldbtable') { + return false; + } + if (strtolower(get_class($key)) != 'xmldbkey') { + return false; + } + if ($key->getType() == XMLDB_KEY_PRIMARY) { // Prevent PRIMARY to be added (only in create table, being serious :-P) + /// TODO print some notify here (id debuglevel is DEVELOPER) + return true; + } + +/// Check there isn't any index with the same fields +/// if it exists we don't create the key + $index = new XMLDBIndex('anyname', XMLDB_INDEX_UNIQUE, $key->getFields()); + if ($indexexists = find_index_name($table, $index)) { + /// TODO print some notify here (id debuglevel is DEVELOPER) + return true; //Index exists, nothing to do + } + + if(!$sqlarr = $table->getAddKeySQL($CFG->dbtype, $CFG->prefix, $key, false)) { + return true; //Empty array = nothing to do = no error + } + + return execute_sql_arr($sqlarr, $continue, $feedback); +} + +/** + * This function will drop the key in the table passed as arguments + * + * @uses $CFG, $db + * @param XMLDBTable table object (just the name is mandatory) + * @param XMLDBIndex key object (full specs are required) + * @param boolean continue to specify if must continue on error (true) or stop (false) + * @param boolean feedback to specify to show status info (true) or not (false) + * @return boolean true on success, false on error + */ +function drop_key($table, $key, $continue=true, $feedback=true) { + + global $CFG, $db; + + $status = true; + + if (strtolower(get_class($table)) != 'xmldbtable') { + return false; + } + if (strtolower(get_class($key)) != 'xmldbkey') { + return false; + } + if ($key->getType() == XMLDB_KEY_PRIMARY) { // Prevent PRIMARY to be dropped (only in drop table, being serious :-P) + /// TODO print some notify here (id debuglevel is DEVELOPER) + return true; + } + +/// Check there is one index with the same fields +/// if it exists we'll drop the key + $index = new XMLDBIndex('anyname', XMLDB_INDEX_UNIQUE, $key->getFields()); + if (!$indexexists = find_index_name($table, $index)) { + /// TODO print some notify here (id debuglevel is DEVELOPER) + return true; //Index exists, nothing to do + } + + if(!$sqlarr = $table->getDropKeySQL($CFG->dbtype, $CFG->prefix, $key, false)) { + return true; //Empty array = nothing to do = no error + } + + return execute_sql_arr($sqlarr, $continue, $feedback); +} + /** * This function will create the index in the table passed as arguments * Before creating the index, the function will check it doesn't exists @@ -603,6 +688,7 @@ function add_index($table, $index, $continue=true, $feedback=true) { /// Check there isn't any index with the same fields if ($indexexists = find_index_name($table, $index)) { + /// TODO print some notify here (id debuglevel is DEVELOPER) return true; //Index exists, nothing to do } @@ -639,6 +725,7 @@ function drop_index($table, $index, $continue=true, $feedback=true) { /// Check there is one index with the same fields if (!$indexexists = find_index_name($table, $index)) { + /// TODO print some notify here (id debuglevel is DEVELOPER) return true; //Index doesn't exist, nothing to do } -- 2.39.5