mirror of
https://github.com/moodle/moodle.git
synced 2025-01-18 05:58:34 +01:00
MDL-29514 drop support for enum data types
This commit is contained in:
parent
23778a4dfa
commit
05aae0a571
@ -277,40 +277,6 @@ class main_view extends XMLDBAction {
|
||||
}
|
||||
}
|
||||
}
|
||||
// TODO: Drop this check in Moodle 2.1
|
||||
// Intercept loaded structure here and look for ENUM fields
|
||||
if (isset($dbdir->xml_file)) {
|
||||
if ($structure =& $dbdir->xml_file->getStructure()) {
|
||||
if ($tables = $structure->getTables()) {
|
||||
foreach ($tables as $table) {
|
||||
if ($fields = $table->getFields()) {
|
||||
foreach ($fields as $field) {
|
||||
if (!empty($field->hasenums)) {
|
||||
if ($hithis) {
|
||||
$o .= '<tr class="highlight"><td class="error cell" colspan="10">';
|
||||
} else {
|
||||
$o .= '<tr class="r' . $row . '"><td class="error cell" colspan="10">';
|
||||
}
|
||||
$o .= 'Table ' . $table->getName() . ', field ' . $field->getName() . ' has ENUM info';
|
||||
if (!empty($field->hasenumsenabled)) {
|
||||
$o .= ' that seems to be active (true). ENUMs support has been dropped in Moodle 2.0, ' .
|
||||
' the XMLDB Editor will delete any ENUM reference next time you save this file' .
|
||||
' and you MUST provide one upgrade block in your code to drop them from DB. See' .
|
||||
' <a href="http://docs.moodle.org/dev/DB_layer_2.0_migration_docs#The_changes">' .
|
||||
' Moodle Docs</a> for more info and examples.';
|
||||
} else {
|
||||
$o .= ' that seem to be inactive (false). ENUMs support has been dropped in Moodle 2.0,' .
|
||||
' the XMLDB Editor will, simply, delete any ENUM reference next time you save this file.' .
|
||||
' No further action is necessary.';
|
||||
}
|
||||
$o .= '</td></tr>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// If there are changes pending to be saved, but the file cannot be written... inform here
|
||||
if ($dbdir->path_exists &&
|
||||
file_exists($key . '/install.xml') &&
|
||||
|
@ -127,7 +127,6 @@ class view_table_php extends XMLDBAction {
|
||||
$optionspacer . 'change_field_precision',
|
||||
$optionspacer . 'change_field_notnull',
|
||||
$optionspacer . 'change_field_default',
|
||||
$optionspacer . 'drop_enum_from_field', // TODO: Moodle 2.1 - Drop drop_enum_from_field
|
||||
'Keys',
|
||||
$optionspacer . 'add_key',
|
||||
$optionspacer . 'drop_key',
|
||||
@ -224,13 +223,6 @@ class view_table_php extends XMLDBAction {
|
||||
$o.= $this->str['mustselectonefield'];
|
||||
}
|
||||
break;
|
||||
case 'drop_enum_from_field': // TODO: Moodle 2.1 - Drop drop_enum_from_field
|
||||
if ($fieldkeyindexinitial == 'f') { // Only if we have got one field
|
||||
$o.= s($this->drop_enum_from_field_php($structure, $tableparam, $fieldkeyindexparam));
|
||||
} else {
|
||||
$o.= $this->str['mustselectonefield'];
|
||||
}
|
||||
break;
|
||||
case 'change_field_default':
|
||||
if ($fieldkeyindexinitial == 'f') { // Only if we have got one field
|
||||
$o.= s($this->change_field_default_php($structure, $tableparam, $fieldkeyindexparam));
|
||||
@ -593,57 +585,6 @@ class view_table_php extends XMLDBAction {
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will generate all the PHP code needed to
|
||||
* drop the enum values (check constraint) of one field
|
||||
* using XMLDB objects and functions
|
||||
*
|
||||
* Note this function is here as part of the process of
|
||||
* dropping enums completely from Moodle 2.0: MDL-18577
|
||||
* and will be out in Moodle 2.1
|
||||
* TODO: Moodle 2.1 - Drop drop_enum_from_field_php
|
||||
*
|
||||
* @param xmldb_structure structure object containing all the info
|
||||
* @param string table table name
|
||||
* @param string field field name to change its enum
|
||||
*/
|
||||
function drop_enum_from_field_php($structure, $table, $field) {
|
||||
|
||||
$result = '';
|
||||
// Validate if we can do it
|
||||
if (!$table = $structure->getTable($table)) {
|
||||
return false;
|
||||
}
|
||||
if (!$field = $table->getField($field)) {
|
||||
return false;
|
||||
}
|
||||
if ($table->getAllErrors()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Add the standard PHP header
|
||||
$result .= XMLDB_PHP_HEADER;
|
||||
|
||||
// Add contents
|
||||
$result .= XMLDB_LINEFEED;
|
||||
$result .= ' // Drop list of values (enum) from field ' . $field->getName() . ' on table ' . $table->getName() . XMLDB_LINEFEED;
|
||||
$result .= ' $table = new xmldb_table(' . "'" . $table->getName() . "'" . ');' . XMLDB_LINEFEED;
|
||||
$result .= ' $field = new xmldb_field(' . "'" . $field->getName() . "', " . $field->getPHP(true) . ');' . XMLDB_LINEFEED;
|
||||
|
||||
// Launch the proper DDL
|
||||
$result .= XMLDB_LINEFEED;
|
||||
$result .= ' // Launch drop of list of values from field ' . $field->getName() . XMLDB_LINEFEED;
|
||||
$result .= ' $dbman->drop_enum_from_field($table, $field);' . XMLDB_LINEFEED;
|
||||
|
||||
// Add the proper upgrade_xxxx_savepoint call
|
||||
$result .= $this->upgrade_savepoint_php ($structure);
|
||||
|
||||
// Add standard PHP footer
|
||||
$result .= XMLDB_PHP_FOOTER;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will generate all the PHP code needed to
|
||||
* change the default of one field using XMLDB objects and functions
|
||||
|
@ -221,57 +221,6 @@ class database_manager {
|
||||
return ($this->find_index_name($xmldb_table, $xmldb_index) !== false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_field, the function returns the name of the check constraint in DB (if exists)
|
||||
* of false if it doesn't exist. Note that XMLDB limits the number of check constraints per field
|
||||
* to 1 "enum-like" constraint. So, if more than one is returned, only the first one will be
|
||||
* retrieved by this function.
|
||||
*
|
||||
* @todo MDL-31147 Moodle 2.1 - Drop find_check_constraint_name()
|
||||
*
|
||||
* @param xmldb_table $xmldb_table The table to be searched.
|
||||
* @param xmldb_field $xmldb_field The field to be searched.
|
||||
* @return string|bool check constraint name or false
|
||||
*/
|
||||
public function find_check_constraint_name(xmldb_table $xmldb_table, xmldb_field $xmldb_field) {
|
||||
|
||||
/// Check the table exists
|
||||
if (!$this->table_exists($xmldb_table)) {
|
||||
throw new ddl_table_missing_exception($xmldb_table->getName());
|
||||
}
|
||||
|
||||
/// Check the field exists
|
||||
if (!$this->field_exists($xmldb_table, $xmldb_field)) {
|
||||
throw new ddl_field_missing_exception($xmldb_field->getName(), $xmldb_table->getName());
|
||||
}
|
||||
|
||||
/// Get list of check_constraints in table/field
|
||||
$checks = false;
|
||||
if ($objchecks = $this->generator->getCheckConstraintsFromDB($xmldb_table, $xmldb_field)) {
|
||||
/// Get only the 1st element. Shouldn't be more than 1 under XMLDB
|
||||
$objcheck = array_shift($objchecks);
|
||||
if ($objcheck) {
|
||||
$checks = strtolower($objcheck->name);
|
||||
}
|
||||
}
|
||||
|
||||
/// Arriving here, check not found
|
||||
return $checks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_field, check if it has a check constraint in DB
|
||||
*
|
||||
* TODO: Moodle 2.1 - Drop check_constraint_exists()
|
||||
*
|
||||
* @param xmldb_table $xmldb_table The table.
|
||||
* @param xmldb_field $xmldb_field The field to be searched for any existing constraint.
|
||||
* @return boolean true/false
|
||||
*/
|
||||
public function check_constraint_exists(xmldb_table $xmldb_table, xmldb_field $xmldb_field) {
|
||||
return ($this->find_check_constraint_name($xmldb_table, $xmldb_field) !== false);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function IS NOT IMPLEMENTED. ONCE WE'LL BE USING RELATIONAL
|
||||
* INTEGRITY IT WILL BECOME MORE USEFUL. FOR NOW, JUST CALCULATE "OFFICIAL"
|
||||
@ -707,37 +656,6 @@ class database_manager {
|
||||
$this->execute_sql_arr($sqlarr);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will drop the existing enum of the field in the table passed as arguments
|
||||
*
|
||||
* TODO: Moodle 2.1 - Drop drop_enum_from_field()
|
||||
*
|
||||
* @param xmldb_table $xmldb_table Table object (just the name is mandatory).
|
||||
* @param xmldb_field $xmldb_field Index object (full specs are required).
|
||||
* @return void
|
||||
*/
|
||||
public function drop_enum_from_field(xmldb_table $xmldb_table, xmldb_field $xmldb_field) {
|
||||
if (!$this->table_exists($xmldb_table)) {
|
||||
throw new ddl_table_missing_exception($xmldb_table->getName());
|
||||
}
|
||||
/// Check the field exists
|
||||
if (!$this->field_exists($xmldb_table, $xmldb_field)) {
|
||||
throw new ddl_field_missing_exception($xmldb_field->getName(), $xmldb_table->getName());
|
||||
}
|
||||
|
||||
if (!$this->check_constraint_exists($xmldb_table, $xmldb_field)) {
|
||||
debugging('Enum for ' . $xmldb_table->getName() . '->' . $xmldb_field->getName() .
|
||||
' does not exist. Delete skipped', DEBUG_DEVELOPER);
|
||||
return; //Enum does not exist, nothing to delete
|
||||
}
|
||||
|
||||
if (!$sqlarr = $this->generator->getDropEnumSQL($xmldb_table, $xmldb_field)) {
|
||||
return; //Empty array = nothing to do = no error
|
||||
}
|
||||
|
||||
$this->execute_sql_arr($sqlarr);
|
||||
}
|
||||
|
||||
/**
|
||||
* This function will rename the field in the table passed as arguments
|
||||
* Before renaming the field, the function will check it exists
|
||||
|
@ -51,8 +51,6 @@ class mssql_sql_generator extends sql_generator {
|
||||
public $sequence_name = 'IDENTITY(1,1)'; //Particular name for inline sequences in this generator
|
||||
public $sequence_only = false; //To avoid to output the rest of the field specs, leaving only the name and the sequence_name variable
|
||||
|
||||
public $enum_inline_code = false; //Does the generator need to add inline code in the column definition
|
||||
|
||||
public $add_table_comments = false; // Does the generator need to add code for table comments
|
||||
|
||||
public $concat_character = '+'; //Characters to be used as concatenation operator. If not defined
|
||||
@ -214,11 +212,6 @@ class mssql_sql_generator extends sql_generator {
|
||||
$results[] = 'ALTER TABLE ' . $tablename . ' DROP CONSTRAINT ' . $defaultname;
|
||||
}
|
||||
|
||||
/// Look for any check constraint in this field and drop it
|
||||
if ($drop_check = $this->getDropEnumSQL($xmldb_table, $xmldb_field)) {
|
||||
$results = array_merge($results, $drop_check);
|
||||
}
|
||||
|
||||
/// Build the standard alter table drop column
|
||||
$results[] = 'ALTER TABLE ' . $tablename . ' DROP COLUMN ' . $fieldname;
|
||||
|
||||
@ -259,22 +252,6 @@ class mssql_sql_generator extends sql_generator {
|
||||
|
||||
$results = array();
|
||||
|
||||
$newt = new xmldb_table($newname); //Temporal table for name calculations
|
||||
|
||||
$oldtablename = $this->getTableName($xmldb_table);
|
||||
$newtablename = $this->getTableName($newt);
|
||||
|
||||
/// Rename all the check constraints in the table
|
||||
$oldconstraintprefix = $this->getNameForObject($xmldb_table->getName(), '');
|
||||
$newconstraintprefix = $this->getNameForObject($newt->getName(), '', '');
|
||||
|
||||
if ($constraints = $this->getCheckConstraintsFromDB($xmldb_table)) {
|
||||
foreach ($constraints as $constraint) {
|
||||
/// Drop the old constraint
|
||||
$results[] = 'ALTER TABLE ' . $newtablename . ' DROP CONSTRAINT ' . $constraint->name;
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
@ -435,25 +412,6 @@ class mssql_sql_generator extends sql_generator {
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to drop its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getDropEnumSQL($xmldb_table, $xmldb_field) {
|
||||
/// Let's introspect to know the real name of the check constraint
|
||||
if ($check_constraints = $this->getCheckConstraintsFromDB($xmldb_table, $xmldb_field)) {
|
||||
$check_constraint = array_shift($check_constraints); /// Get the 1st (should be only one)
|
||||
$constraint_name = strtolower($check_constraint->name); /// Extract the REAL name
|
||||
/// All we have to do is to drop the check constraint
|
||||
return array('ALTER TABLE ' . $this->getTableName($xmldb_table) .
|
||||
' DROP CONSTRAINT ' . $constraint_name);
|
||||
} else { /// Constraint not found. Nothing to do
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to create its default
|
||||
* (usually invoked from getModifyDefaultSQL()
|
||||
@ -521,55 +479,6 @@ class mssql_sql_generator extends sql_generator {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table returns one array with all the check constraints
|
||||
* in the table (fetched from DB)
|
||||
* Optionally the function allows one xmldb_field to be specified in
|
||||
* order to return only the check constraints belonging to one field.
|
||||
* Each element contains the name of the constraint and its description
|
||||
* If no check constraints are found, returns an empty array
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getCheckConstraintsFromDB($xmldb_table, $xmldb_field = null) {
|
||||
|
||||
|
||||
$results = array();
|
||||
|
||||
$tablename = $this->getTableName($xmldb_table);
|
||||
|
||||
if ($constraints = $this->mdb->get_records_sql("SELECT o.name, c.text AS description
|
||||
FROM sysobjects o,
|
||||
sysobjects p,
|
||||
syscomments c
|
||||
WHERE p.id = o.parent_obj
|
||||
AND o.id = c.id
|
||||
AND o.xtype = 'C'
|
||||
AND p.name = ?", array($tablename))) {
|
||||
foreach ($constraints as $constraint) {
|
||||
$results[$constraint->name] = $constraint;
|
||||
}
|
||||
}
|
||||
|
||||
/// Filter by the required field if specified
|
||||
if ($xmldb_field) {
|
||||
$filtered_results = array();
|
||||
$filter = $xmldb_field->getName();
|
||||
/// Lets clean a bit each constraint description, looking for the filtered field
|
||||
foreach ($results as $key => $result) {
|
||||
$description = trim(preg_replace('/[\(\)]/', '', $result->description)); // Parenthesis out & trim
|
||||
/// description starts by [$filter] assume it's a constraint belonging to the field
|
||||
if (preg_match("/^\[{$filter}\]/i", $description)) {
|
||||
$filtered_results[$key] = $result;
|
||||
}
|
||||
}
|
||||
/// Assign filtered results to the final results array
|
||||
$results = $filtered_results;
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given three strings (table name, list of fields (comma separated) and suffix),
|
||||
* create the proper object name quoting it if necessary.
|
||||
|
@ -59,8 +59,6 @@ class mysql_sql_generator extends sql_generator {
|
||||
public $sequence_extra_code = false; //Does the generator need to add extra code to generate the sequence fields
|
||||
public $sequence_name = 'auto_increment'; //Particular name for inline sequences in this generator
|
||||
|
||||
public $enum_extra_code = false; //Does the generator need to add extra code to generate code for the enums in the table
|
||||
|
||||
public $add_after_clause = true; // Does the generator need to add the after clause for fields
|
||||
|
||||
public $concat_character = null; //Characters to be used as concatenation operator. If not defined
|
||||
@ -233,31 +231,6 @@ class mysql_sql_generator extends sql_generator {
|
||||
return $dbtype;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to create its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*/
|
||||
public function getCreateEnumSQL($xmldb_table, $xmldb_field) {
|
||||
/// For MySQL, just alter the field
|
||||
return $this->getAlterFieldSQL($xmldb_table, $xmldb_field);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to drop its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getDropEnumSQL($xmldb_table, $xmldb_field) {
|
||||
/// Let's introspect to know if there is one enum
|
||||
if ($check_constraints = $this->getCheckConstraintsFromDB($xmldb_table, $xmldb_field)) {
|
||||
/// For MySQL, just alter the field
|
||||
return $this->getAlterFieldSQL($xmldb_table, $xmldb_field);
|
||||
} else {
|
||||
return array(); /// Enum not found. Nothing to do
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to create its default
|
||||
* (usually invoked from getModifyDefaultSQL()
|
||||
@ -311,59 +284,6 @@ class mysql_sql_generator extends sql_generator {
|
||||
return array($comment);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table returns one array with all the check constraints
|
||||
* in the table (fetched from DB)
|
||||
* Optionally the function allows one xmldb_field to be specified in
|
||||
* order to return only the check constraints belonging to one field.
|
||||
* Each element contains the name of the constraint and its description
|
||||
* If no check constraints are found, returns an empty array
|
||||
* MySQL doesn't have check constraints in this implementation, but
|
||||
* we return them based on the enum fields in the table
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getCheckConstraintsFromDB($xmldb_table, $xmldb_field = null) {
|
||||
|
||||
$tablename = $xmldb_table->getName($xmldb_table);
|
||||
|
||||
/// Fetch all the columns in the table
|
||||
if (!$columns = $this->mdb->get_columns($tablename)) {
|
||||
return array();
|
||||
}
|
||||
|
||||
/// Filter by the required field if specified
|
||||
if ($xmldb_field) {
|
||||
$filter = $xmldb_field->getName();
|
||||
if (!isset($columns[$filter])) {
|
||||
return array();
|
||||
}
|
||||
$column = ($columns[$filter]);
|
||||
if (!empty($column->enums)) {
|
||||
$result = new stdClass();
|
||||
$result->name = $filter;
|
||||
$result->description = implode(', ', $column->enums);
|
||||
return array($result);
|
||||
} else {
|
||||
return array();
|
||||
}
|
||||
|
||||
} else {
|
||||
$results = array();
|
||||
/// Iterate over columns searching for enums
|
||||
foreach ($columns as $key => $column) {
|
||||
/// Enum found, let's add it to the constraints list
|
||||
if (!empty($column->enums)) {
|
||||
$result = new stdClass();
|
||||
$result->name = $key;
|
||||
$result->description = implode(', ', $column->enums);
|
||||
$results[$key] = $result;
|
||||
}
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
|
@ -55,8 +55,6 @@ class oracle_sql_generator extends sql_generator {
|
||||
public $sequence_name = ''; //Particular name for inline sequences in this generator
|
||||
public $sequence_cache_size = 20; //Size of the sequences values cache (20 = Oracle Default)
|
||||
|
||||
public $enum_inline_code = false; //Does the generator need to add inline code in the column definition
|
||||
|
||||
public $alter_column_sql = 'ALTER TABLE TABLENAME MODIFY (COLUMNSPECS)'; //The SQL template to alter columns
|
||||
|
||||
/**
|
||||
@ -288,20 +286,6 @@ class oracle_sql_generator extends sql_generator {
|
||||
$newt = new xmldb_table($newname); /// Temp table for trigger code generation
|
||||
$results = array_merge($results, $this->getCreateTriggerSQL($newt, $xmldb_field, $newseqname));
|
||||
|
||||
/// Rename all the check constraints in the table
|
||||
$oldtablename = $this->getTableName($xmldb_table);
|
||||
$newtablename = $this->getTableName($newt);
|
||||
|
||||
$oldconstraintprefix = $this->getNameForObject($xmldb_table->getName(), '');
|
||||
$newconstraintprefix = $this->getNameForObject($newt->getName(), '', '');
|
||||
|
||||
if ($constraints = $this->getCheckConstraintsFromDB($xmldb_table)) {
|
||||
foreach ($constraints as $constraint) {
|
||||
/// Drop the old constraint
|
||||
$results[] = 'ALTER TABLE ' . $newtablename . ' DROP CONSTRAINT ' . $constraint->name;
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
@ -484,25 +468,6 @@ class oracle_sql_generator extends sql_generator {
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to drop its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getDropEnumSQL($xmldb_table, $xmldb_field) {
|
||||
/// Let's introspect to know the real name of the check constraint
|
||||
if ($check_constraints = $this->getCheckConstraintsFromDB($xmldb_table, $xmldb_field)) {
|
||||
$check_constraint = array_shift($check_constraints); /// Get the 1st (should be only one)
|
||||
$constraint_name = strtolower($check_constraint->name); /// Extract the REAL name
|
||||
/// All we have to do is to drop the check constraint
|
||||
return array('ALTER TABLE ' . $this->getTableName($xmldb_table) .
|
||||
' DROP CONSTRAINT ' . $constraint_name);
|
||||
} else { /// Constraint not found. Nothing to do
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to create its default
|
||||
* (usually invoked from getModifyDefaultSQL()
|
||||
@ -523,51 +488,6 @@ class oracle_sql_generator extends sql_generator {
|
||||
return $this->getAlterFieldSQL($xmldb_table, $xmldb_field);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table returns one array with all the check constraints
|
||||
* in the table (fetched from DB)
|
||||
* Optionally the function allows one xmldb_field to be specified in
|
||||
* order to return only the check constraints belonging to one field.
|
||||
* Each element contains the name of the constraint and its description
|
||||
* If no check constraints are found, returns an empty array
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getCheckConstraintsFromDB($xmldb_table, $xmldb_field = null) {
|
||||
|
||||
$results = array();
|
||||
|
||||
$tablename = strtoupper($this->getTableName($xmldb_table));
|
||||
|
||||
if ($constraints = $this->mdb->get_records_sql("SELECT lower(c.constraint_name) AS name, c.search_condition AS description
|
||||
FROM user_constraints c
|
||||
WHERE c.table_name = ?
|
||||
AND c.constraint_type = 'C'
|
||||
AND c.constraint_name not like 'SYS%'",
|
||||
array($tablename))) {
|
||||
foreach ($constraints as $constraint) {
|
||||
$results[$constraint->name] = $constraint;
|
||||
}
|
||||
}
|
||||
|
||||
/// Filter by the required field if specified
|
||||
if ($xmldb_field) {
|
||||
$filtered_results = array();
|
||||
$filter = $xmldb_field->getName();
|
||||
/// Lets clean a bit each constraint description, looking for the filtered field
|
||||
foreach ($results as $key => $result) {
|
||||
/// description starts by "$filter IN" assume it's a constraint belonging to the field
|
||||
if (preg_match("/^{$filter} IN/i", $result->description)) {
|
||||
$filtered_results[$key] = $result;
|
||||
}
|
||||
}
|
||||
/// Assign filtered results to the final results array
|
||||
$results = $filtered_results;
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table returns one string with the sequence of the table
|
||||
* in the table (fetched from DB)
|
||||
|
@ -47,8 +47,6 @@ class postgres_sql_generator extends sql_generator {
|
||||
public $sequence_name_small = 'SERIAL'; //Particular name for inline sequences in this generator
|
||||
public $sequence_only = true; //To avoid to output the rest of the field specs, leaving only the name and the sequence_name variable
|
||||
|
||||
public $enum_inline_code = false; //Does the generator need to add inline code in the column definition
|
||||
|
||||
public $rename_index_sql = 'ALTER TABLE OLDINDEXNAME RENAME TO NEWINDEXNAME'; //SQL sentence to rename one index
|
||||
//TABLENAME, OLDINDEXNAME, NEWINDEXNAME are dynamically replaced
|
||||
|
||||
@ -181,20 +179,6 @@ class postgres_sql_generator extends sql_generator {
|
||||
/// Rename de sequence
|
||||
$results[] = 'ALTER TABLE ' . $oldseqname . ' RENAME TO ' . $newseqname;
|
||||
|
||||
/// Rename all the check constraints in the table
|
||||
$oldtablename = $this->getTableName($xmldb_table);
|
||||
$newtablename = $this->getTableName($newt);
|
||||
|
||||
$oldconstraintprefix = $this->getNameForObject($xmldb_table->getName(), '');
|
||||
$newconstraintprefix = $this->getNameForObject($newt->getName(), '', '');
|
||||
|
||||
if ($constraints = $this->getCheckConstraintsFromDB($xmldb_table)) {
|
||||
foreach ($constraints as $constraint) {
|
||||
/// Drop the old constraint
|
||||
$results[] = 'ALTER TABLE ' . $newtablename . ' DROP CONSTRAINT ' . $constraint->name;
|
||||
}
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
@ -317,25 +301,6 @@ class postgres_sql_generator extends sql_generator {
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to drop its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getDropEnumSQL($xmldb_table, $xmldb_field) {
|
||||
/// Let's introspect to know the real name of the check constraint
|
||||
if ($check_constraints = $this->getCheckConstraintsFromDB($xmldb_table, $xmldb_field)) {
|
||||
$check_constraint = array_shift($check_constraints); /// Get the 1st (should be only one)
|
||||
$constraint_name = strtolower($check_constraint->name); /// Extract the REAL name
|
||||
/// All we have to do is to drop the check constraint
|
||||
return array('ALTER TABLE ' . $this->getTableName($xmldb_table) .
|
||||
' DROP CONSTRAINT ' . $constraint_name);
|
||||
} else { /// Constraint not found. Nothing to do
|
||||
return array();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to create its default
|
||||
* (usually invoked from getModifyDefaultSQL()
|
||||
@ -356,55 +321,6 @@ class postgres_sql_generator extends sql_generator {
|
||||
return $this->getAlterFieldSQL($xmldb_table, $xmldb_field);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table returns one array with all the check constraints
|
||||
* in the table (fetched from DB)
|
||||
* Optionally the function allows one xmldb_field to be specified in
|
||||
* order to return only the check constraints belonging to one field.
|
||||
* Each element contains the name of the constraint and its description
|
||||
* If no check constraints are found, returns an empty array
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getCheckConstraintsFromDB($xmldb_table, $xmldb_field = null) {
|
||||
|
||||
$results = array();
|
||||
|
||||
$tablename = $this->getTableName($xmldb_table);
|
||||
|
||||
if ($constraints = $this->mdb->get_records_sql("SELECT co.conname AS name, co.consrc AS description
|
||||
FROM pg_constraint co, pg_class cl
|
||||
WHERE co.conrelid = cl.oid
|
||||
AND co.contype = 'c' AND cl.relname = ?",
|
||||
array($tablename))) {
|
||||
foreach ($constraints as $constraint) {
|
||||
$results[$constraint->name] = $constraint;
|
||||
}
|
||||
}
|
||||
|
||||
/// Filter by the required field if specified
|
||||
if ($xmldb_field) {
|
||||
$filtered_results = array();
|
||||
$filter = $xmldb_field->getName();
|
||||
/// Lets clean a bit each constraint description, looking for the filtered field
|
||||
foreach ($results as $key => $result) {
|
||||
$description = preg_replace('/\("(.*?)"\)/', '($1)', $result->description);// Double quotes out
|
||||
$description = preg_replace('/[\(\)]/', '', $description); // Parenthesis out
|
||||
$description = preg_replace('/::[a-z]+/i', '', $description); // Casts out
|
||||
$description = preg_replace("/({$filter})/i", '@$1@', $description);
|
||||
$description = trim(preg_replace('/ or /i', ' OR ', $description)); // Uppercase or & trim
|
||||
/// description starts by @$filter@ assume it's a constraint belonging to the field
|
||||
if (preg_match("/^@{$filter}@/i", $description)) {
|
||||
$filtered_results[$key] = $result;
|
||||
}
|
||||
}
|
||||
/// Assign filtered results to the final results array
|
||||
$results = $filtered_results;
|
||||
}
|
||||
|
||||
return $results;
|
||||
}
|
||||
|
||||
public function addslashes($s) {
|
||||
// Postgres is gradually switching to ANSI quotes, we need to check what is expected
|
||||
if (!isset($this->std_strings)) {
|
||||
|
@ -1132,73 +1132,6 @@ class ddl_test extends UnitTestCase {
|
||||
$dbman->drop_key($table, $key);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test behaviour of drop_enum_from_field() and related functions (find_check_constraint_name
|
||||
* and check_constraint_exists). Needed to be able to drop existing "enum" fields in the upgrade
|
||||
* from 1.9 to 2.0, will be completely deleted for Moodle 2.1
|
||||
*
|
||||
* Because we already have dropped support for creation of enum fields in 2.0, we are going to
|
||||
* create them here "manually" (hardcoded DB-dependent SQL). Just to be able to test the
|
||||
* find and drop functions properly.
|
||||
*
|
||||
* TODO: Drop this tests completely from Moodle 2.1
|
||||
*/
|
||||
public function test_drop_enum_from_field() {
|
||||
$DB = $this->tdb; // do not use global $DB!
|
||||
$dbman = $this->tdb->get_manager();
|
||||
|
||||
// Create normal table, no enums.
|
||||
$table = new xmldb_table('test_table_cust0');
|
||||
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
|
||||
$table->add_field('course', XMLDB_TYPE_INTEGER, '10', XMLDB_UNSIGNED, XMLDB_NOTNULL, null, '0');
|
||||
$field = new xmldb_field('type');
|
||||
$field->set_attributes(XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, 'general');
|
||||
$table->addField($field);
|
||||
$table->add_key('primary', XMLDB_KEY_PRIMARY, array('id'));
|
||||
$dbman->create_table($table);
|
||||
|
||||
$this->assertTrue($dbman->table_exists($table));
|
||||
$this->assertTrue($dbman->field_exists($table, $field));
|
||||
|
||||
// Check table hasn't enums at all
|
||||
$this->assertFalse($dbman->check_constraint_exists($table, $field));
|
||||
$this->assertFalse($dbman->find_check_constraint_name($table, $field));
|
||||
ob_start();
|
||||
$this->assertFalse($dbman->drop_enum_from_field($table, $field)); // This just outputs debug warning if field hasn't enums
|
||||
ob_end_clean();
|
||||
|
||||
// Insert some info
|
||||
$record = new stdClass();
|
||||
$record->course = 666;
|
||||
$record->type = 'qanda';
|
||||
$this->assertTrue($DB->insert_record('test_table_cust0', $record, false));
|
||||
|
||||
// Hackery starts here, depending of the db family we are testing... execute
|
||||
// the needed SQL statements to get the "type" field defined as enum
|
||||
$stmt = '';
|
||||
switch ($DB->get_dbfamily()) {
|
||||
case 'mysql': // It's ENUM field for mysql
|
||||
$stmt = "ALTER TABLE {$DB->get_prefix()}test_table_cust0 MODIFY type ENUM ('general', 'qanda', 'moodle') NOT NULL DEFAULT 'general'";
|
||||
break;
|
||||
default: // It's check constraint for "normal" DBs
|
||||
$stmt = "ALTER TABLE {$DB->get_prefix()}test_table_cust0 ADD CONSTRAINT ttcu0_ck CHECK (type IN ('general', 'qanda', 'moodle'))";
|
||||
}
|
||||
$DB->change_database_structure($stmt);
|
||||
|
||||
// Check table has enums now
|
||||
$this->assertTrue($dbman->check_constraint_exists($table, $field));
|
||||
$this->assertTrue($dbman->find_check_constraint_name($table, $field));
|
||||
|
||||
// Removing an enum value
|
||||
$dbman->drop_enum_from_field($table, $field);
|
||||
|
||||
// Chech table hasn't enum anymore
|
||||
$this->assertFalse($dbman->check_constraint_exists($table, $field));
|
||||
$this->assertFalse($dbman->find_check_constraint_name($table, $field));
|
||||
|
||||
$dbman->drop_table($table);
|
||||
}
|
||||
|
||||
public function testRenameField() {
|
||||
$DB = $this->tdb; // do not use global $DB!
|
||||
$dbman = $this->tdb->get_manager();
|
||||
|
@ -1358,19 +1358,6 @@ abstract class sql_generator {
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to drop its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*
|
||||
* Note that this method may be dropped in future.
|
||||
*
|
||||
* @param xmldb_table $xmldb_table The xmldb_table object instance.
|
||||
* @param xmldb_field $xmldb_field The xmldb_field object instance.
|
||||
*
|
||||
* @todo MDL-31147 Moodle 2.1 - Drop getDropEnumSQL()
|
||||
*/
|
||||
public abstract function getDropEnumSQL($xmldb_table, $xmldb_field);
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to drop its default
|
||||
* (usually invoked from getModifyDefaultSQL()
|
||||
@ -1384,20 +1371,6 @@ abstract class sql_generator {
|
||||
*/
|
||||
public abstract function getDropDefaultSQL($xmldb_table, $xmldb_field);
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one optional xmldb_field, return one array with all the check
|
||||
* constrainst found for that table (or field). Must exist for each DB supported.
|
||||
* (usually invoked from find_check_constraint_name)
|
||||
*
|
||||
* Note that this method may be dropped in future.
|
||||
*
|
||||
* @param xmldb_table $xmldb_table The xmldb_table object instance.
|
||||
* @param xmldb_field $xmldb_field The xmldb_field object instance.
|
||||
*
|
||||
* @todo MDL-31147 Moodle 2.1 - Drop getCheckConstraintsFromDB
|
||||
*/
|
||||
public abstract function getCheckConstraintsFromDB($xmldb_table, $xmldb_field=null);
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to add its default
|
||||
* (usually invoked from getModifyDefaultSQL()
|
||||
|
@ -54,9 +54,6 @@ class sqlite_sql_generator extends sql_generator {
|
||||
public $sequence_extra_code = false; //Does the generator need to add extra code to generate the sequence fields
|
||||
public $sequence_name = 'INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL'; //Particular name for inline sequences in this generator
|
||||
|
||||
public $enum_inline_code = true; //Does the generator need to add inline code in the column definition
|
||||
public $enum_extra_code = false; //Does the generator need to add extra code to generate code for the enums in the table
|
||||
|
||||
public $drop_index_sql = 'ALTER TABLE TABLENAME DROP INDEX INDEXNAME'; //SQL sentence to drop one index
|
||||
//TABLENAME, INDEXNAME are dynamically replaced
|
||||
|
||||
@ -281,22 +278,6 @@ class sqlite_sql_generator extends sql_generator {
|
||||
return $this->getAlterTableSchema($xmldb_table);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to create its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*/
|
||||
public function getCreateEnumSQL($xmldb_table, $xmldb_field) {
|
||||
return $this->getAlterTableSchema($xmldb_table, $xmldb_field, $xmldb_field);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to drop its enum
|
||||
* (usually invoked from getModifyEnumSQL()
|
||||
*/
|
||||
public function getDropEnumSQL($xmldb_table, $xmldb_field) {
|
||||
return $this->getAlterTableSchema($xmldb_table, $xmldb_field, $xmldb_field);
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table and one xmldb_field, return the SQL statements needed to create its default
|
||||
* (usually invoked from getModifyDefaultSQL()
|
||||
@ -377,37 +358,6 @@ class sqlite_sql_generator extends sql_generator {
|
||||
return array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Given one xmldb_table returns one array with all the check constraints
|
||||
* in the table (fetched from DB)
|
||||
* Optionally the function allows one xmldb_field to be specified in
|
||||
* order to return only the check constraints belonging to one field.
|
||||
* Each element contains the name of the constraint and its description
|
||||
* If no check constraints are found, returns an empty array.
|
||||
*
|
||||
* TODO: Moodle 2.1 - drop in Moodle 2.1
|
||||
*/
|
||||
public function getCheckConstraintsFromDB($xmldb_table, $xmldb_field = null) {
|
||||
$tablename = $xmldb_table->getName($xmldb_table);
|
||||
// Fetch all the columns in the table
|
||||
if (!$columns = $this->mdb->get_columns($tablename, false)) {
|
||||
return array();
|
||||
}
|
||||
$results = array();
|
||||
$filter = $xmldb_field ? $xmldb_field->getName() : NULL;
|
||||
// Iterate over columns searching for enums
|
||||
foreach ($columns as $key => $column) {
|
||||
// Enum found, let's add it to the constraints list
|
||||
if (!empty($column->enums) && (!$filter || $column->name == $filter)) {
|
||||
$result = new stdClass();
|
||||
$result->name = $key;
|
||||
$result->description = implode(', ', $column->enums);
|
||||
$results[$key] = $result;
|
||||
}
|
||||
}
|
||||
return $results;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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)
|
||||
|
@ -884,29 +884,6 @@ function index_exists($table, $index) {
|
||||
return $DB->get_manager()->index_exists($table, $index);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @global object
|
||||
* @param string $table
|
||||
* @param string $field
|
||||
* @return bool
|
||||
*/
|
||||
function find_check_constraint_name($table, $field) {
|
||||
global $DB;
|
||||
debugging('Deprecated ddllib function used!');
|
||||
return $DB->get_manager()->find_check_constraint_name($table, $field);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @global object
|
||||
*/
|
||||
function check_constraint_exists($table, $field) {
|
||||
global $DB;
|
||||
debugging('Deprecated ddllib function used!');
|
||||
return $DB->get_manager()->check_constraint_exists($table, $field);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @global object
|
||||
@ -1070,20 +1047,6 @@ function change_field_notnull($table, $field) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @global object
|
||||
* @param string $table
|
||||
* @param string $field
|
||||
* @return bool
|
||||
*/
|
||||
function change_field_enum($table, $field) {
|
||||
global $DB;
|
||||
debugging('Deprecated ddllib function used! Only dropping of enums is allowed.');
|
||||
$DB->get_manager()->drop_enum_from_field($table, $field);
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @global object
|
||||
|
@ -60,7 +60,6 @@ class database_column_info {
|
||||
* integer - number of digits
|
||||
* float - digits left from floating point
|
||||
* boolean - 1
|
||||
* enums - null
|
||||
* @var int
|
||||
*/
|
||||
public $max_length;
|
||||
@ -73,16 +72,6 @@ class database_column_info {
|
||||
*/
|
||||
public $scale;
|
||||
|
||||
/**
|
||||
* Enumerated field options,
|
||||
* null if not enum type
|
||||
*
|
||||
* For performance reasons this field is optional!
|
||||
* You can use DDL sql_generator::getCheckConstraintsFromDB() if needed.
|
||||
* @var string
|
||||
*/
|
||||
public $enums;
|
||||
|
||||
/**
|
||||
* True if not null, false otherwise
|
||||
* @var bool
|
||||
|
@ -455,10 +455,10 @@ class mysqli_native_moodle_database extends moodle_database {
|
||||
$info->name = $rawcolumn->field;
|
||||
$matches = null;
|
||||
|
||||
if (preg_match('/varchar\((\d+)\)/i', $rawcolumn->type, $matches)) {
|
||||
if (preg_match('/(enum|varchar)\((\d+)\)/i', $rawcolumn->type, $matches)) {
|
||||
$info->type = 'varchar';
|
||||
$info->meta_type = 'C';
|
||||
$info->max_length = $matches[1];
|
||||
$info->max_length = $matches[2];
|
||||
$info->scale = null;
|
||||
$info->not_null = ($rawcolumn->null === 'NO');
|
||||
$info->default_value = $rawcolumn->default;
|
||||
@ -552,28 +552,6 @@ class mysqli_native_moodle_database extends moodle_database {
|
||||
$info->auto_increment= false;
|
||||
$info->unique = null;
|
||||
|
||||
} else if (preg_match('/enum\((.*)\)/i', $rawcolumn->type, $matches)) {
|
||||
$info->type = 'enum';
|
||||
$info->meta_type = 'C';
|
||||
$info->enums = array();
|
||||
$info->max_length = 0;
|
||||
$values = $matches[1];
|
||||
$values = explode(',', $values);
|
||||
foreach ($values as $val) {
|
||||
$val = trim($val, "'");
|
||||
$length = textlib::strlen($val);
|
||||
$info->enums[] = $val;
|
||||
$info->max_length = ($info->max_length < $length) ? $length : $info->max_length;
|
||||
}
|
||||
$info->scale = null;
|
||||
$info->not_null = ($rawcolumn->null === 'NO');
|
||||
$info->default_value = $rawcolumn->default;
|
||||
$info->has_default = is_null($info->default_value) ? false : true;
|
||||
$info->primary_key = ($rawcolumn->key === 'PRI');
|
||||
$info->binary = false;
|
||||
$info->unsigned = null;
|
||||
$info->auto_increment= false;
|
||||
$info->unique = null;
|
||||
}
|
||||
|
||||
$this->columns[$table][$info->name] = new database_column_info($info);
|
||||
@ -604,16 +582,6 @@ class mysqli_native_moodle_database extends moodle_database {
|
||||
} else if (is_float($value) and ($column->meta_type == 'C' or $column->meta_type == 'X')) {
|
||||
$value = "$value";
|
||||
}
|
||||
// workaround for problem with wrong enums in mysql - TODO: Out in Moodle 2.1
|
||||
if (!empty($column->enums)) {
|
||||
if (is_null($value) and !$column->not_null) {
|
||||
// ok - nulls allowed
|
||||
} else {
|
||||
if (!in_array((string)$value, $column->enums)) {
|
||||
throw new dml_write_exception('Enum value '.s($value).' not allowed in field '.$field.' table '.$table.'.');
|
||||
}
|
||||
}
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
|
@ -523,7 +523,6 @@ class oci_native_moodle_database extends moodle_database {
|
||||
or $rawcolumn->COLTYPE === 'NVARCHAR'
|
||||
or $rawcolumn->COLTYPE === 'CHAR'
|
||||
or $rawcolumn->COLTYPE === 'NCHAR') {
|
||||
//TODO add some basic enum support here
|
||||
$info->type = $rawcolumn->COLTYPE;
|
||||
$info->meta_type = 'C';
|
||||
$info->max_length = $rawcolumn->WIDTH;
|
||||
|
@ -411,17 +411,6 @@ abstract class pdo_moodle_database extends moodle_database {
|
||||
if (is_bool($value)) {
|
||||
$value = (int)$value; // prevent "false" problems
|
||||
}
|
||||
if (!empty($column->enums)) {
|
||||
// workaround for problem with wrong enums
|
||||
if (is_null($value) and !$column->not_null) {
|
||||
// ok - nulls allowed
|
||||
} else {
|
||||
if (!in_array((string)$value, $column->enums)) {
|
||||
debugging('Enum value '.s($value).' not allowed in field '.$field.' table '.$table.'.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
$cleaned[$field] = $value;
|
||||
}
|
||||
|
||||
|
@ -260,13 +260,6 @@ class sqlite3_pdo_moodle_database extends pdo_moodle_database {
|
||||
$columninfo['meta_type'] = 'C';
|
||||
break;
|
||||
case 'enu': // enums
|
||||
if (preg_match('|'.$columninfo['name'].'\W+in\W+\(/\*liststart\*/(.*?)/\*listend\*/\)|im', $createsql, $tmp)) {
|
||||
$tmp = explode(',', $tmp[1]);
|
||||
foreach($tmp as $value) {
|
||||
$columninfo['enums'][] = trim($value, '\'"');
|
||||
}
|
||||
unset($tmp);
|
||||
}
|
||||
$columninfo['meta_type'] = 'C';
|
||||
break;
|
||||
case 'tex': // text
|
||||
|
@ -1,9 +1,6 @@
|
||||
<!ELEMENT FIELD EMPTY >
|
||||
<!ATTLIST FIELD DECIMALS NMTOKEN #IMPLIED >
|
||||
<!ATTLIST FIELD DEFAULT NMTOKEN #IMPLIED >
|
||||
<!-- TODO: Moodle 2.1 - Drop ENUM and ENUMVALUES attributes -->
|
||||
<!ATTLIST FIELD ENUM ( false | true ) #IMPLIED >
|
||||
<!ATTLIST FIELD ENUMVALUES CDATA #IMPLIED >
|
||||
<!ATTLIST FIELD LENGTH NMTOKEN #REQUIRED >
|
||||
<!ATTLIST FIELD NAME NMTOKEN #REQUIRED >
|
||||
<!ATTLIST FIELD NEXT NMTOKEN #IMPLIED >
|
||||
|
@ -64,9 +64,6 @@
|
||||
<xs:attribute name="DECIMALS" type="xs:positiveInteger" use="optional" />
|
||||
<!-- TODO: Moodle 2.4 - Drop ignored UNSIGNED attribute -->
|
||||
<xs:attribute name="UNSIGNED" type="trueFalse" use="optional" />
|
||||
<!-- TODO: Moodle 2.1 - Drop ENUM and ENUMVALUES attributes -->
|
||||
<xs:attribute name="ENUM" type="trueFalse" use="optional" />
|
||||
<xs:attribute name="ENUMVALUES" type="xs:string" use="optional" />
|
||||
<xs:attribute name="DEFAULT" type="xs:string" use="optional" />
|
||||
<xs:attribute name="COMMENT" type="xs:string" use="optional" />
|
||||
<xs:attribute name="PREVIOUS" type="fieldName" use="optional" />
|
||||
|
@ -66,9 +66,6 @@ class xmldb_field extends xmldb_object {
|
||||
function setAttributes($type, $precision=null, $unsigned=null, $notnull=null, $sequence=null, $enum=null, $enumvalues=null, $default=null, $previous=null) {
|
||||
|
||||
debugging('XMLDBField->setAttributes() has been deprecated in Moodle 2.0. Will be out in Moodle 2.1. Please use xmldb_field->set_attributes() instead.', DEBUG_DEVELOPER);
|
||||
if ($enum) {
|
||||
debugging('Also, ENUMs support has been dropped in Moodle 2.0. Your fields specs are incorrect because you are trying to introduce one new ENUM. Created DB estructures will ignore that.');
|
||||
}
|
||||
|
||||
return $this->set_attributes($type, $precision, $unsigned, $notnull, $sequence, $default, $previous);
|
||||
}
|
||||
@ -360,15 +357,6 @@ class xmldb_field extends xmldb_object {
|
||||
$this->next = trim($xmlarr['@']['NEXT']);
|
||||
}
|
||||
|
||||
/// TODO: Drop this check in Moodle 2.1
|
||||
/// Detect if there is old enum information in the XML file
|
||||
if (isset($xmlarr['@']['ENUM']) && isset($xmlarr['@']['ENUMVALUES'])) {
|
||||
$this->hasenums = true;
|
||||
if ($xmlarr['@']['ENUM'] == 'true') {
|
||||
$this->hasenumsenabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// Set some attributes
|
||||
if ($result) {
|
||||
$this->loaded = true;
|
||||
|
@ -709,9 +709,6 @@ class xmldb_table extends xmldb_object {
|
||||
function addFieldInfo($name, $type, $precision=null, $unsigned=null, $notnull=null, $sequence=null, $enum=null, $enumvalues=null, $default=null, $previous=null) {
|
||||
|
||||
debugging('XMLDBTable->addFieldInfo() has been deprecated in Moodle 2.0. Will be out in Moodle 2.1. Please use xmldb_table->add_field() instead', DEBUG_DEVELOPER);
|
||||
if ($enum) {
|
||||
debugging('Also, ENUMs support has been dropped in Moodle 2.0. Your fields specs are incorrect because you are trying to introduce one new ENUM. Created DB estructures will ignore that.');
|
||||
}
|
||||
|
||||
return $this->add_field($name, $type, $precision, $unsigned, $notnull, $sequence, $default, $previous);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user