diff --git a/wp-admin/includes/upgrade.php b/wp-admin/includes/upgrade.php
index c5255db80f..81646142b6 100644
--- a/wp-admin/includes/upgrade.php
+++ b/wp-admin/includes/upgrade.php
@@ -1473,139 +1473,139 @@ function dbDelta( $queries = '', $execute = true ) {
if ( ! $tablefields )
continue;
- // Clear the field and index arrays
- $cfields = $indices = array();
- // Get all of the field names in the query from between the parens
- preg_match("|\((.*)\)|ms", $qry, $match2);
- $qryline = trim($match2[1]);
+ // Clear the field and index arrays
+ $cfields = $indices = array();
+ // Get all of the field names in the query from between the parens
+ preg_match("|\((.*)\)|ms", $qry, $match2);
+ $qryline = trim($match2[1]);
- // Separate field lines into an array
- $flds = explode("\n", $qryline);
+ // Separate field lines into an array
+ $flds = explode("\n", $qryline);
- //echo "
\n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."
";
+ //echo "
\n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."
";
- // For every field line specified in the query
- foreach ($flds as $fld) {
- // Extract the field name
- preg_match("|^([^ ]*)|", trim($fld), $fvals);
- $fieldname = trim( $fvals[1], '`' );
+ // For every field line specified in the query
+ foreach ($flds as $fld) {
+ // Extract the field name
+ preg_match("|^([^ ]*)|", trim($fld), $fvals);
+ $fieldname = trim( $fvals[1], '`' );
- // Verify the found field name
- $validfield = true;
- switch (strtolower($fieldname)) {
- case '':
- case 'primary':
- case 'index':
- case 'fulltext':
- case 'unique':
- case 'key':
- $validfield = false;
- $indices[] = trim(trim($fld), ", \n");
- break;
- }
- $fld = trim($fld);
+ // Verify the found field name
+ $validfield = true;
+ switch (strtolower($fieldname)) {
+ case '':
+ case 'primary':
+ case 'index':
+ case 'fulltext':
+ case 'unique':
+ case 'key':
+ $validfield = false;
+ $indices[] = trim(trim($fld), ", \n");
+ break;
+ }
+ $fld = trim($fld);
- // If it's a valid field, add it to the field array
- if ($validfield) {
- $cfields[strtolower($fieldname)] = trim($fld, ", \n");
+ // If it's a valid field, add it to the field array
+ if ($validfield) {
+ $cfields[strtolower($fieldname)] = trim($fld, ", \n");
+ }
+ }
+
+ // For every field in the table
+ foreach ($tablefields as $tablefield) {
+ // If the table field exists in the field array...
+ if (array_key_exists(strtolower($tablefield->Field), $cfields)) {
+ // Get the field type from the query
+ preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches);
+ $fieldtype = $matches[1];
+
+ // Is actual field type different from the field type in query?
+ if ($tablefield->Type != $fieldtype) {
+ // Add a query to change the column type
+ $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)];
+ $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}";
+ }
+
+ // Get the default value from the array
+ //echo "{$cfields[strtolower($tablefield->Field)]}
";
+ if (preg_match("| DEFAULT '(.*)'|i", $cfields[strtolower($tablefield->Field)], $matches)) {
+ $default_value = $matches[1];
+ if ($tablefield->Default != $default_value) {
+ // Add a query to change the column's default value
+ $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'";
+ $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}";
}
}
- // For every field in the table
- foreach ($tablefields as $tablefield) {
- // If the table field exists in the field array...
- if (array_key_exists(strtolower($tablefield->Field), $cfields)) {
- // Get the field type from the query
- preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches);
- $fieldtype = $matches[1];
+ // Remove the field from the array (so it's not added)
+ unset($cfields[strtolower($tablefield->Field)]);
+ } else {
+ // This field exists in the table, but not in the creation queries?
+ }
+ }
- // Is actual field type different from the field type in query?
- if ($tablefield->Type != $fieldtype) {
- // Add a query to change the column type
- $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)];
- $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}";
- }
+ // For every remaining field specified for the table
+ foreach ($cfields as $fieldname => $fielddef) {
+ // Push a query line into $cqueries that adds the field to that table
+ $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef";
+ $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname;
+ }
- // Get the default value from the array
- //echo "{$cfields[strtolower($tablefield->Field)]}
";
- if (preg_match("| DEFAULT '(.*)'|i", $cfields[strtolower($tablefield->Field)], $matches)) {
- $default_value = $matches[1];
- if ($tablefield->Default != $default_value) {
- // Add a query to change the column's default value
- $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'";
- $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}";
- }
- }
+ // Index stuff goes here
+ // Fetch the table index structure from the database
+ $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};");
- // Remove the field from the array (so it's not added)
- unset($cfields[strtolower($tablefield->Field)]);
- } else {
- // This field exists in the table, but not in the creation queries?
+ if ($tableindices) {
+ // Clear the index array
+ unset($index_ary);
+
+ // For every index in the table
+ foreach ($tableindices as $tableindex) {
+ // Add the index to the index data array
+ $keyname = $tableindex->Key_name;
+ $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part);
+ $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false;
+ }
+
+ // For each actual index in the index array
+ foreach ($index_ary as $index_name => $index_data) {
+ // Build a create string to compare to the query
+ $index_string = '';
+ if ($index_name == 'PRIMARY') {
+ $index_string .= 'PRIMARY ';
+ } else if($index_data['unique']) {
+ $index_string .= 'UNIQUE ';
+ }
+ $index_string .= 'KEY ';
+ if ($index_name != 'PRIMARY') {
+ $index_string .= $index_name;
+ }
+ $index_columns = '';
+ // For each column in the index
+ foreach ($index_data['columns'] as $column_data) {
+ if ($index_columns != '') $index_columns .= ',';
+ // Add the field to the column list string
+ $index_columns .= $column_data['fieldname'];
+ if ($column_data['subpart'] != '') {
+ $index_columns .= '('.$column_data['subpart'].')';
}
}
-
- // For every remaining field specified for the table
- foreach ($cfields as $fieldname => $fielddef) {
- // Push a query line into $cqueries that adds the field to that table
- $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef";
- $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname;
+ // Add the column list to the index create string
+ $index_string .= ' ('.$index_columns.')';
+ if (!(($aindex = array_search($index_string, $indices)) === false)) {
+ unset($indices[$aindex]);
+ //echo "{$table}:
Found index:".$index_string."
\n";
}
+ //else echo "{$table}:
Did not find index:".$index_string."
".print_r($indices, true)."
\n";
+ }
+ }
- // Index stuff goes here
- // Fetch the table index structure from the database
- $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};");
-
- if ($tableindices) {
- // Clear the index array
- unset($index_ary);
-
- // For every index in the table
- foreach ($tableindices as $tableindex) {
- // Add the index to the index data array
- $keyname = $tableindex->Key_name;
- $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part);
- $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false;
- }
-
- // For each actual index in the index array
- foreach ($index_ary as $index_name => $index_data) {
- // Build a create string to compare to the query
- $index_string = '';
- if ($index_name == 'PRIMARY') {
- $index_string .= 'PRIMARY ';
- } else if($index_data['unique']) {
- $index_string .= 'UNIQUE ';
- }
- $index_string .= 'KEY ';
- if ($index_name != 'PRIMARY') {
- $index_string .= $index_name;
- }
- $index_columns = '';
- // For each column in the index
- foreach ($index_data['columns'] as $column_data) {
- if ($index_columns != '') $index_columns .= ',';
- // Add the field to the column list string
- $index_columns .= $column_data['fieldname'];
- if ($column_data['subpart'] != '') {
- $index_columns .= '('.$column_data['subpart'].')';
- }
- }
- // Add the column list to the index create string
- $index_string .= ' ('.$index_columns.')';
- if (!(($aindex = array_search($index_string, $indices)) === false)) {
- unset($indices[$aindex]);
- //echo "{$table}:
Found index:".$index_string."
\n";
- }
- //else echo "{$table}:
Did not find index:".$index_string."
".print_r($indices, true)."
\n";
- }
- }
-
- // For every remaining index specified for the table
- foreach ( (array) $indices as $index ) {
- // Push a query line into $cqueries that adds the index to that table
- $cqueries[] = "ALTER TABLE {$table} ADD $index";
- $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index;
- }
+ // For every remaining index specified for the table
+ foreach ( (array) $indices as $index ) {
+ // Push a query line into $cqueries that adds the index to that table
+ $cqueries[] = "ALTER TABLE {$table} ADD $index";
+ $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index;
+ }
// Remove the original table creation query from processing
unset( $cqueries[ $table ], $for_update[ $table ] );