diff options
-rw-r--r-- | phpBB/docs/CHANGELOG.html | 22 | ||||
-rw-r--r-- | phpBB/install/database_update.php | 122 |
2 files changed, 121 insertions, 23 deletions
diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index 198d21d885..a8a0349adf 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -169,6 +169,7 @@ p a { <ol class="menu"> <li><a href="#changelog">Changelog</a> <ol type="i"> + <li><a href="#v30rc4">Changes since RC-4</a></li> <li><a href="#v30rc3">Changes since RC-3</a></li> <li><a href="#v30rc2">Changes since RC-2</a></li> <li><a href="#v30rc1">Changes since RC-1</a></li> @@ -181,13 +182,28 @@ p a { <a name="changelog"></a><h1>1. Changelog</h1> - <a name="v30rc3"></a><b>1.i. Changes since 3.0.RC3</b> + <a name="v30rc4"></a><b>1.i. Changes since 3.0.RC4</b> <br /><br /> <div class="paragraph"> <p>These fixes/changes are currently only present within CVS and will appear within the next phpBB3 version.</p> <ul class="menu"> + <li>[Fix] MySQL, PostgreSQL and SQLite related database fixes (Bug #13862)</li> + + </ul> + + </div> + <a href="#top">Top</a> + <br /><br /> + + <hr /> + + <a name="v30rc3"></a><b>1.ii. Changes since 3.0.RC3</b> + <br /><br /> + <div class="paragraph"> + + <ul class="menu"> <li>[Fix] Fixing some subsilver2 and prosilver style issues</li> <li>[Fix] Parse error in MCP ban (Bug #13109)</li> <li>[Fix] Correctly hide online status in the profile (Bug #13059)</li> @@ -300,7 +316,7 @@ p a { <hr /> - <a name="v30rc2"></a><b>1.ii. Changes since 3.0.RC2</b> + <a name="v30rc2"></a><b>1.iii. Changes since 3.0.RC2</b> <br /><br /> <div class="paragraph"> @@ -354,7 +370,7 @@ p a { <hr /> - <a name="v30rc1"></a><b>1.iii. Changes since 3.0.RC1</b> + <a name="v30rc1"></a><b>1.iiii. Changes since 3.0.RC1</b> <br /><br /> <div class="paragraph"> diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 34f0aebb12..48b94595af 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -$updates_to_version = '3.0.RC4'; +$updates_to_version = '3.0.RC5'; // Return if we "just include it" to find out for which version the database update is responsuble for if (defined('IN_PHPBB') && defined('IN_INSTALL')) @@ -387,6 +387,43 @@ $database_update_info = array( ), ), ), + // Changes from 3.0.RC4 to the next version + '3.0.RC4' => array( + // Change the following columns + 'change_columns' => array( + STYLES_TABLE => array( + 'style_id' => array('USINT', NULL, 'auto_increment'), + 'template_id' => array('USINT', 0), + 'theme_id' => array('USINT', 0), + 'imageset_id' => array('USINT', 0), + ), + STYLES_TEMPLATE_TABLE => array( + 'template_id' => array('USINT', NULL, 'auto_increment'), + ), + STYLES_TEMPLATE_DATA_TABLE => array( + 'template_id' => array('USINT', NULL, 'auto_increment'), + ), + STYLES_THEME_TABLE => array( + 'theme_id' => array('USINT', NULL, 'auto_increment'), + ), + STYLES_IMAGESET_TABLE => array( + 'imageset_id' => array('USINT', NULL, 'auto_increment'), + ), + STYLES_IMAGESET_DATA_TABLE => array( + 'imageset_id' => array('USINT', 0), + ), + USERS_TABLE => array( + 'user_style' => array('USINT', 0), + ), + FORUMS_TABLE => array( + 'forum_style' => array('USINT', 0), + ), + GROUPS_TABLE => array( + 'group_avatar_width' => array('USINT', 0), + 'group_avatar_height' => array('USINT', 0), + ), + ), + ), ); // Determine mapping database type @@ -1253,6 +1290,44 @@ if (version_compare($current_version, '3.0.RC3', '<=')) $no_updates = false; } +if (version_compare($current_version, '3.0.RC4', '<=')) +{ + $update_auto_increment = array( + STYLES_TABLE => 'style_id', + STYLES_TEMPLATE_TABLE => 'template_id', + STYLES_TEMPLATE_DATA_TABLE => 'template_id', + STYLES_THEME_TABLE => 'theme_id', + STYLES_IMAGESET_TABLE => 'imageset_id' + ); + + if ($map_dbms == 'mysql_40' || $map_dbms == 'mysql_41') + { + foreach ($update_auto_increment as $auto_table_name => $auto_column_name) + { + $sql = "SELECT MAX({$auto_column_name}) as max_id + FROM {$auto_table_name}"; + $result = _sql($sql, $errored, $error_ary); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + $max_id = ((int) $row['max_id']) + 1; + _sql("ALTER TABLE {$auto_table_name} AUTO_INCREMENT = {$max_id}"); + } + + $no_updates = false; + } + else if ($map_dbms == 'sqlite') + { + foreach ($update_auto_increment as $auto_table_name => $auto_column_name) + { + var_dump('eh?'); + sql_column_change($dbms, $auto_table_name, $auto_column_name, array('USINT', NULL, 'auto_increment')); + } + + $no_updates = false; + } +} + _write_result($no_updates, $errored, $error_ary); $error_ary = array(); @@ -1570,7 +1645,7 @@ function column_exists($dbms, $table, $column_name) /** * Function to prepare some column information for better usage */ -function prepare_column_data($dbms, $column_data) +function prepare_column_data($dbms, $column_data, $table_name, $column_name) { global $dbms_type_map, $unsigned_types; @@ -1709,17 +1784,23 @@ function prepare_column_data($dbms, $column_data) case 'postgres': $return_array['column_type'] = $column_type; - $return_array['null'] = 'NOT NULL'; - if (!is_null($column_data[1])) + $sql .= " {$column_type} "; + + if (isset($column_data[2]) && $column_data[2] == 'auto_increment') { - $return_array['default'] = $column_data[1]; + $default_val = "nextval('{$table_name}_seq')"; + } + else if (!is_null($column_data[1])) + { + $default_val = "'" . $column_data[1] . "'"; + $return_array['null'] = 'NOT NULL'; + $sql .= 'NOT NULL '; } - $sql .= " {$column_type} "; - $sql .= 'NOT NULL '; + $return_array['default'] = $default_val; - $sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : ''; + $sql .= "DEFAULT {$default_val}"; // Unsigned? Then add a CHECK contraint if (in_array($orig_column_type, $unsigned_types)) @@ -1730,7 +1811,7 @@ function prepare_column_data($dbms, $column_data) break; case 'sqlite': -/* if (isset($column_data[2]) && $column_data[2] == 'auto_increment') + if (isset($column_data[2]) && $column_data[2] == 'auto_increment') { $sql .= ' INTEGER PRIMARY KEY'; } @@ -1738,8 +1819,6 @@ function prepare_column_data($dbms, $column_data) { $sql .= ' ' . $column_type; } -*/ - $sql .= ' ' . $column_type; $sql .= ' NOT NULL '; $sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}'" : ''; @@ -1758,7 +1837,7 @@ function sql_column_add($dbms, $table_name, $column_name, $column_data) { global $errored, $error_ary; - $column_data = prepare_column_data($dbms, $column_data); + $column_data = prepare_column_data($dbms, $column_data, $table_name, $column_name); switch ($dbms) { @@ -2300,7 +2379,7 @@ function sql_column_change($dbms, $table_name, $column_name, $column_data) global $dbms_type_map, $db; global $errored, $error_ary; - $column_data = prepare_column_data($dbms, $column_data); + $column_data = prepare_column_data($dbms, $column_data, $table_name, $column_name); switch ($dbms) { @@ -2332,18 +2411,21 @@ function sql_column_change($dbms, $table_name, $column_name, $column_data) $sql_array = array(); $sql_array[] = 'ALTER COLUMN ' . $column_name . ' TYPE ' . $column_data['column_type']; - if ($column_data['null'] == 'NOT NULL') - { - $sql_array[] = 'ALTER COLUMN ' . $column_name . ' SET NOT NULL'; - } - else + if (isset($column_data['null'])) { - $sql_array[] = 'ALTER COLUMN ' . $column_name . ' DROP NOT NULL'; + if ($column_data['null'] == 'NOT NULL') + { + $sql_array[] = 'ALTER COLUMN ' . $column_name . ' SET NOT NULL'; + } + else if ($column_data['null'] == 'NULL') + { + $sql_array[] = 'ALTER COLUMN ' . $column_name . ' DROP NOT NULL'; + } } if (isset($column_data['default'])) { - $sql_array[] = 'ALTER COLUMN ' . $column_name . " SET DEFAULT '" . $column_data['default'] . "'"; + $sql_array[] = 'ALTER COLUMN ' . $column_name . ' SET DEFAULT ' . $column_data['default']; } // we don't want to double up on constraints if we change different number data types |