Make WordPress Core

Changeset 19041


Ignore:
Timestamp:
10/21/2011 10:40:30 PM (15 years ago)
Author:
nacin
Message:

Undent (by two tabs) a whole lot of code in dbDelta(). Thx. see #17998.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/includes/upgrade.php

    r19040 r19041  
    14741474                        continue;
    14751475
    1476                                 // Clear the field and index arrays
    1477                                 $cfields = $indices = array();
    1478                                 // Get all of the field names in the query from between the parens
    1479                                 preg_match("|\((.*)\)|ms", $qry, $match2);
    1480                                 $qryline = trim($match2[1]);
    1481 
    1482                                 // Separate field lines into an array
    1483                                 $flds = explode("\n", $qryline);
    1484 
    1485                                 //echo "<hr/><pre>\n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."</pre><hr/>";
    1486 
    1487                                 // For every field line specified in the query
    1488                                 foreach ($flds as $fld) {
    1489                                         // Extract the field name
    1490                                         preg_match("|^([^ ]*)|", trim($fld), $fvals);
    1491                                         $fieldname = trim( $fvals[1], '`' );
    1492 
    1493                                         // Verify the found field name
    1494                                         $validfield = true;
    1495                                         switch (strtolower($fieldname)) {
    1496                                         case '':
    1497                                         case 'primary':
    1498                                         case 'index':
    1499                                         case 'fulltext':
    1500                                         case 'unique':
    1501                                         case 'key':
    1502                                                 $validfield = false;
    1503                                                 $indices[] = trim(trim($fld), ", \n");
    1504                                                 break;
    1505                                         }
    1506                                         $fld = trim($fld);
    1507 
    1508                                         // If it's a valid field, add it to the field array
    1509                                         if ($validfield) {
    1510                                                 $cfields[strtolower($fieldname)] = trim($fld, ", \n");
     1476                // Clear the field and index arrays
     1477                $cfields = $indices = array();
     1478                // Get all of the field names in the query from between the parens
     1479                preg_match("|\((.*)\)|ms", $qry, $match2);
     1480                $qryline = trim($match2[1]);
     1481
     1482                // Separate field lines into an array
     1483                $flds = explode("\n", $qryline);
     1484
     1485                //echo "<hr/><pre>\n".print_r(strtolower($table), true).":\n".print_r($cqueries, true)."</pre><hr/>";
     1486
     1487                // For every field line specified in the query
     1488                foreach ($flds as $fld) {
     1489                        // Extract the field name
     1490                        preg_match("|^([^ ]*)|", trim($fld), $fvals);
     1491                        $fieldname = trim( $fvals[1], '`' );
     1492
     1493                        // Verify the found field name
     1494                        $validfield = true;
     1495                        switch (strtolower($fieldname)) {
     1496                        case '':
     1497                        case 'primary':
     1498                        case 'index':
     1499                        case 'fulltext':
     1500                        case 'unique':
     1501                        case 'key':
     1502                                $validfield = false;
     1503                                $indices[] = trim(trim($fld), ", \n");
     1504                                break;
     1505                        }
     1506                        $fld = trim($fld);
     1507
     1508                        // If it's a valid field, add it to the field array
     1509                        if ($validfield) {
     1510                                $cfields[strtolower($fieldname)] = trim($fld, ", \n");
     1511                        }
     1512                }
     1513
     1514                // For every field in the table
     1515                foreach ($tablefields as $tablefield) {
     1516                        // If the table field exists in the field array...
     1517                        if (array_key_exists(strtolower($tablefield->Field), $cfields)) {
     1518                                // Get the field type from the query
     1519                                preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches);
     1520                                $fieldtype = $matches[1];
     1521
     1522                                // Is actual field type different from the field type in query?
     1523                                if ($tablefield->Type != $fieldtype) {
     1524                                        // Add a query to change the column type
     1525                                        $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)];
     1526                                        $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}";
     1527                                }
     1528
     1529                                // Get the default value from the array
     1530                                        //echo "{$cfields[strtolower($tablefield->Field)]}<br>";
     1531                                if (preg_match("| DEFAULT '(.*)'|i", $cfields[strtolower($tablefield->Field)], $matches)) {
     1532                                        $default_value = $matches[1];
     1533                                        if ($tablefield->Default != $default_value) {
     1534                                                // Add a query to change the column's default value
     1535                                                $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'";
     1536                                                $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}";
    15111537                                        }
    15121538                                }
    15131539
    1514                                 // For every field in the table
    1515                                 foreach ($tablefields as $tablefield) {
    1516                                         // If the table field exists in the field array...
    1517                                         if (array_key_exists(strtolower($tablefield->Field), $cfields)) {
    1518                                                 // Get the field type from the query
    1519                                                 preg_match("|".$tablefield->Field." ([^ ]*( unsigned)?)|i", $cfields[strtolower($tablefield->Field)], $matches);
    1520                                                 $fieldtype = $matches[1];
    1521 
    1522                                                 // Is actual field type different from the field type in query?
    1523                                                 if ($tablefield->Type != $fieldtype) {
    1524                                                         // Add a query to change the column type
    1525                                                         $cqueries[] = "ALTER TABLE {$table} CHANGE COLUMN {$tablefield->Field} " . $cfields[strtolower($tablefield->Field)];
    1526                                                         $for_update[$table.'.'.$tablefield->Field] = "Changed type of {$table}.{$tablefield->Field} from {$tablefield->Type} to {$fieldtype}";
    1527                                                 }
    1528 
    1529                                                 // Get the default value from the array
    1530                                                         //echo "{$cfields[strtolower($tablefield->Field)]}<br>";
    1531                                                 if (preg_match("| DEFAULT '(.*)'|i", $cfields[strtolower($tablefield->Field)], $matches)) {
    1532                                                         $default_value = $matches[1];
    1533                                                         if ($tablefield->Default != $default_value) {
    1534                                                                 // Add a query to change the column's default value
    1535                                                                 $cqueries[] = "ALTER TABLE {$table} ALTER COLUMN {$tablefield->Field} SET DEFAULT '{$default_value}'";
    1536                                                                 $for_update[$table.'.'.$tablefield->Field] = "Changed default value of {$table}.{$tablefield->Field} from {$tablefield->Default} to {$default_value}";
    1537                                                         }
    1538                                                 }
    1539 
    1540                                                 // Remove the field from the array (so it's not added)
    1541                                                 unset($cfields[strtolower($tablefield->Field)]);
    1542                                         } else {
    1543                                                 // This field exists in the table, but not in the creation queries?
     1540                                // Remove the field from the array (so it's not added)
     1541                                unset($cfields[strtolower($tablefield->Field)]);
     1542                        } else {
     1543                                // This field exists in the table, but not in the creation queries?
     1544                        }
     1545                }
     1546
     1547                // For every remaining field specified for the table
     1548                foreach ($cfields as $fieldname => $fielddef) {
     1549                        // Push a query line into $cqueries that adds the field to that table
     1550                        $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef";
     1551                        $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname;
     1552                }
     1553
     1554                // Index stuff goes here
     1555                // Fetch the table index structure from the database
     1556                $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};");
     1557
     1558                if ($tableindices) {
     1559                        // Clear the index array
     1560                        unset($index_ary);
     1561
     1562                        // For every index in the table
     1563                        foreach ($tableindices as $tableindex) {
     1564                                // Add the index to the index data array
     1565                                $keyname = $tableindex->Key_name;
     1566                                $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part);
     1567                                $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false;
     1568                        }
     1569
     1570                        // For each actual index in the index array
     1571                        foreach ($index_ary as $index_name => $index_data) {
     1572                                // Build a create string to compare to the query
     1573                                $index_string = '';
     1574                                if ($index_name == 'PRIMARY') {
     1575                                        $index_string .= 'PRIMARY ';
     1576                                } else if($index_data['unique']) {
     1577                                        $index_string .= 'UNIQUE ';
     1578                                }
     1579                                $index_string .= 'KEY ';
     1580                                if ($index_name != 'PRIMARY') {
     1581                                        $index_string .= $index_name;
     1582                                }
     1583                                $index_columns = '';
     1584                                // For each column in the index
     1585                                foreach ($index_data['columns'] as $column_data) {
     1586                                        if ($index_columns != '') $index_columns .= ',';
     1587                                        // Add the field to the column list string
     1588                                        $index_columns .= $column_data['fieldname'];
     1589                                        if ($column_data['subpart'] != '') {
     1590                                                $index_columns .= '('.$column_data['subpart'].')';
    15441591                                        }
    15451592                                }
    1546 
    1547                                 // For every remaining field specified for the table
    1548                                 foreach ($cfields as $fieldname => $fielddef) {
    1549                                         // Push a query line into $cqueries that adds the field to that table
    1550                                         $cqueries[] = "ALTER TABLE {$table} ADD COLUMN $fielddef";
    1551                                         $for_update[$table.'.'.$fieldname] = 'Added column '.$table.'.'.$fieldname;
     1593                                // Add the column list to the index create string
     1594                                $index_string .= ' ('.$index_columns.')';
     1595                                if (!(($aindex = array_search($index_string, $indices)) === false)) {
     1596                                        unset($indices[$aindex]);
     1597                                        //echo "<pre style=\"border:1px solid #ccc;margin-top:5px;\">{$table}:<br />Found index:".$index_string."</pre>\n";
    15521598                                }
    1553 
    1554                                 // Index stuff goes here
    1555                                 // Fetch the table index structure from the database
    1556                                 $tableindices = $wpdb->get_results("SHOW INDEX FROM {$table};");
    1557 
    1558                                 if ($tableindices) {
    1559                                         // Clear the index array
    1560                                         unset($index_ary);
    1561 
    1562                                         // For every index in the table
    1563                                         foreach ($tableindices as $tableindex) {
    1564                                                 // Add the index to the index data array
    1565                                                 $keyname = $tableindex->Key_name;
    1566                                                 $index_ary[$keyname]['columns'][] = array('fieldname' => $tableindex->Column_name, 'subpart' => $tableindex->Sub_part);
    1567                                                 $index_ary[$keyname]['unique'] = ($tableindex->Non_unique == 0)?true:false;
    1568                                         }
    1569 
    1570                                         // For each actual index in the index array
    1571                                         foreach ($index_ary as $index_name => $index_data) {
    1572                                                 // Build a create string to compare to the query
    1573                                                 $index_string = '';
    1574                                                 if ($index_name == 'PRIMARY') {
    1575                                                         $index_string .= 'PRIMARY ';
    1576                                                 } else if($index_data['unique']) {
    1577                                                         $index_string .= 'UNIQUE ';
    1578                                                 }
    1579                                                 $index_string .= 'KEY ';
    1580                                                 if ($index_name != 'PRIMARY') {
    1581                                                         $index_string .= $index_name;
    1582                                                 }
    1583                                                 $index_columns = '';
    1584                                                 // For each column in the index
    1585                                                 foreach ($index_data['columns'] as $column_data) {
    1586                                                         if ($index_columns != '') $index_columns .= ',';
    1587                                                         // Add the field to the column list string
    1588                                                         $index_columns .= $column_data['fieldname'];
    1589                                                         if ($column_data['subpart'] != '') {
    1590                                                                 $index_columns .= '('.$column_data['subpart'].')';
    1591                                                         }
    1592                                                 }
    1593                                                 // Add the column list to the index create string
    1594                                                 $index_string .= ' ('.$index_columns.')';
    1595                                                 if (!(($aindex = array_search($index_string, $indices)) === false)) {
    1596                                                         unset($indices[$aindex]);
    1597                                                         //echo "<pre style=\"border:1px solid #ccc;margin-top:5px;\">{$table}:<br />Found index:".$index_string."</pre>\n";
    1598                                                 }
    1599                                                 //else echo "<pre style=\"border:1px solid #ccc;margin-top:5px;\">{$table}:<br /><b>Did not find index:</b>".$index_string."<br />".print_r($indices, true)."</pre>\n";
    1600                                         }
    1601                                 }
    1602 
    1603                                 // For every remaining index specified for the table
    1604                                 foreach ( (array) $indices as $index ) {
    1605                                         // Push a query line into $cqueries that adds the index to that table
    1606                                         $cqueries[] = "ALTER TABLE {$table} ADD $index";
    1607                                         $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index;
    1608                                 }
     1599                                //else echo "<pre style=\"border:1px solid #ccc;margin-top:5px;\">{$table}:<br /><b>Did not find index:</b>".$index_string."<br />".print_r($indices, true)."</pre>\n";
     1600                        }
     1601                }
     1602
     1603                // For every remaining index specified for the table
     1604                foreach ( (array) $indices as $index ) {
     1605                        // Push a query line into $cqueries that adds the index to that table
     1606                        $cqueries[] = "ALTER TABLE {$table} ADD $index";
     1607                        $for_update[$table.'.'.$fieldname] = 'Added index '.$table.' '.$index;
     1608                }
    16091609
    16101610                // Remove the original table creation query from processing
Note: See TracChangeset for help on using the changeset viewer.