mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
git-svn-id: file:///svn/phpbb/trunk@6793 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
9b6e76a808
commit
6d0a00a446
9 changed files with 166 additions and 25 deletions
|
@ -1934,10 +1934,7 @@ function get_schema_struct()
|
|||
'friend' => array('BOOL', 0),
|
||||
'foe' => array('BOOL', 0),
|
||||
),
|
||||
'KEYS' => array(
|
||||
'user_id' => array('INDEX', 'user_id'),
|
||||
'zebra_id' => array('INDEX', 'zebra_id'),
|
||||
),
|
||||
'PRIMARY_KEY' => array('user_id', 'zebra_id'),
|
||||
);
|
||||
|
||||
return $schema_data;
|
||||
|
|
|
@ -321,6 +321,23 @@ $database_update_info = array(
|
|||
),
|
||||
),
|
||||
),
|
||||
// Latest version
|
||||
'3.0.b5' => array(
|
||||
// Remove the following keys
|
||||
'drop_keys' => array(
|
||||
ZEBRA_TABLE => array(
|
||||
'user_id',
|
||||
'zebra_id',
|
||||
),
|
||||
),
|
||||
// Add the following primary keys
|
||||
'add_primary_keys' => array(
|
||||
ZEBRA_TABLE => array(
|
||||
'user_id',
|
||||
'zebra_id',
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
// Determine mapping database type
|
||||
|
@ -472,6 +489,27 @@ foreach ($database_update_info as $version => $schema_changes)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove keys?
|
||||
if (!empty($schema_changes['drop_keys']))
|
||||
{
|
||||
foreach ($schema_changes['drop_keys'] as $table => $indexes)
|
||||
{
|
||||
foreach ($indexes as $index_name)
|
||||
{
|
||||
sql_index_drop($map_dbms, $index_name, $table);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add primary keys?
|
||||
if (!empty($schema_changes['add_primary_keys']))
|
||||
{
|
||||
foreach ($schema_changes['add_primary_keys'] as $table => $columns)
|
||||
{
|
||||
sql_create_primary_key($map_dbms, $table, $columns);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_write_result($no_updates, $errored, $error_ary);
|
||||
|
@ -968,6 +1006,117 @@ function sql_column_add($dbms, $table_name, $column_name, $column_data)
|
|||
}
|
||||
}
|
||||
|
||||
function sql_index_drop($dbms, $index_name, $table_name)
|
||||
{
|
||||
global $dbms_type_map, $db;
|
||||
global $errored, $error_ary;
|
||||
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'mssql':
|
||||
$sql = 'DROP INDEX ' . $table_name . '\.' . $index_name . ' ON ' . $table_name;
|
||||
_sql($sql, $errored, $error_ary);
|
||||
break;
|
||||
|
||||
case 'mysql_40':
|
||||
case 'mysql_41':
|
||||
$sql = 'DROP INDEX ' . $index_name . ' ON ' . $table_name;
|
||||
_sql($sql, $errored, $error_ary);
|
||||
break;
|
||||
|
||||
case 'firebird':
|
||||
case 'oracle':
|
||||
case 'postgres':
|
||||
case 'sqlite':
|
||||
$sql = 'DROP INDEX ' . $table_name . '_' . $index_name;
|
||||
_sql($sql, $errored, $error_ary);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function sql_create_primary_key($dbms, $table_name, $column)
|
||||
{
|
||||
global $dbms_type_map, $db;
|
||||
global $errored, $error_ary;
|
||||
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'firebird':
|
||||
case 'postgres':
|
||||
$sql = 'ALTER TABLE ' . $table_name . ' ADD PRIMARY KEY (' . implode(', ', $column) . ')';
|
||||
_sql($sql, $errored, $error_ary);
|
||||
break;
|
||||
|
||||
case 'mssql':
|
||||
$sql = "ALTER TABLE [{$table_name}] WITH NOCHECK ADD ";
|
||||
$sql .= "CONSTRAINT [PK_{$table_name}] PRIMARY KEY CLUSTERED (";
|
||||
$sql .= '[' . implode("],\n\t\t[", $column) . ']';
|
||||
$sql .= ') ON [PRIMARY]';
|
||||
_sql($sql, $errored, $error_ary);
|
||||
break;
|
||||
|
||||
case 'mysql_40':
|
||||
case 'mysql_41':
|
||||
$sql = 'ALTER TABLE ' . $table_name . ' ADD PRIMARY KEY (' . implode(', ', $column) . ')';
|
||||
_sql($sql, $errored, $error_ary);
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$sql = 'ALTER TABLE ' . $table_name . 'add CONSTRAINT pk_' . $table_name . ' PRIMARY KEY (' . implode(', ', $column) . ')';
|
||||
_sql($sql, $errored, $error_ary);
|
||||
break;
|
||||
|
||||
case 'sqlite':
|
||||
$sql = "SELECT sql
|
||||
FROM sqlite_master
|
||||
WHERE type = 'table'
|
||||
AND name = '{$table_name}'
|
||||
ORDER BY type DESC, name;";
|
||||
$result = _sql($sql, $errored, $error_ary);
|
||||
|
||||
if (!$result)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
$row = $db->sql_fetchrow($result);
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$db->sql_transaction('begin');
|
||||
|
||||
// Create a backup table and populate it, destroy the existing one
|
||||
$db->sql_query(preg_replace('#CREATE\s+TABLE\s+"?' . $table_name . '"?#i', 'CREATE TEMPORARY TABLE ' . $table_name . '_temp', $row['sql']));
|
||||
$db->sql_query('INSERT INTO ' . $table_name . '_temp SELECT * FROM ' . $table_name);
|
||||
$db->sql_query('DROP TABLE ' . $table_name);
|
||||
|
||||
preg_match('#\((.*)\)#s', $row['sql'], $matches);
|
||||
|
||||
$new_table_cols = trim($matches[1]);
|
||||
$old_table_cols = preg_split('/,(?=[\\sa-z])/im', $new_table_cols);
|
||||
$column_list = array();
|
||||
|
||||
foreach ($old_table_cols as $declaration)
|
||||
{
|
||||
$entities = preg_split('#\s+#', trim($declaration));
|
||||
if ($entities == 'PRIMARY')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
$column_list[] = $entities[0];
|
||||
}
|
||||
|
||||
$columns = implode(',', $column_list);
|
||||
|
||||
// create a new table and fill it up. destroy the temp one
|
||||
$db->sql_query('CREATE TABLE ' . $table_name . ' (' . $new_table_cols . ', PRIMARY KEY (' . implode(', ', $column) . '));');
|
||||
$db->sql_query('INSERT INTO ' . $table_name . ' (' . $columns . ') SELECT ' . $columns . ' FROM ' . $table_name . '_temp;');
|
||||
$db->sql_query('DROP TABLE ' . $table_name . '_temp');
|
||||
|
||||
$db->sql_transaction('commit');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Change column type (not name!)
|
||||
*/
|
||||
|
|
|
@ -1502,6 +1502,6 @@ CREATE TABLE phpbb_zebra (
|
|||
foe INTEGER DEFAULT 0 NOT NULL
|
||||
);;
|
||||
|
||||
CREATE INDEX phpbb_zebra_user_id ON phpbb_zebra(user_id);;
|
||||
CREATE INDEX phpbb_zebra_zebra_id ON phpbb_zebra(zebra_id);;
|
||||
ALTER TABLE phpbb_zebra ADD PRIMARY KEY (user_id, zebra_id);;
|
||||
|
||||
|
||||
|
|
|
@ -1744,10 +1744,12 @@ CREATE TABLE [phpbb_zebra] (
|
|||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE INDEX [user_id] ON [phpbb_zebra]([user_id]) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
CREATE INDEX [zebra_id] ON [phpbb_zebra]([zebra_id]) ON [PRIMARY]
|
||||
ALTER TABLE [phpbb_zebra] WITH NOCHECK ADD
|
||||
CONSTRAINT [PK_phpbb_zebra] PRIMARY KEY CLUSTERED
|
||||
(
|
||||
[user_id],
|
||||
[zebra_id]
|
||||
) ON [PRIMARY]
|
||||
GO
|
||||
|
||||
|
||||
|
|
|
@ -1066,8 +1066,7 @@ CREATE TABLE phpbb_zebra (
|
|||
zebra_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
friend tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
foe tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
KEY user_id (user_id),
|
||||
KEY zebra_id (zebra_id)
|
||||
PRIMARY KEY (user_id, zebra_id)
|
||||
);
|
||||
|
||||
|
||||
|
|
|
@ -1066,8 +1066,7 @@ CREATE TABLE phpbb_zebra (
|
|||
zebra_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
friend tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
foe tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||
KEY user_id (user_id),
|
||||
KEY zebra_id (zebra_id)
|
||||
PRIMARY KEY (user_id, zebra_id)
|
||||
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
|
||||
|
||||
|
||||
|
|
|
@ -1935,12 +1935,9 @@ CREATE TABLE phpbb_zebra (
|
|||
user_id number(8) DEFAULT '0' NOT NULL,
|
||||
zebra_id number(8) DEFAULT '0' NOT NULL,
|
||||
friend number(1) DEFAULT '0' NOT NULL,
|
||||
foe number(1) DEFAULT '0' NOT NULL
|
||||
foe number(1) DEFAULT '0' NOT NULL,
|
||||
CONSTRAINT pk_phpbb_zebra PRIMARY KEY (user_id, zebra_id)
|
||||
)
|
||||
/
|
||||
|
||||
CREATE INDEX phpbb_zebra_user_id ON phpbb_zebra (user_id)
|
||||
/
|
||||
CREATE INDEX phpbb_zebra_zebra_id ON phpbb_zebra (zebra_id)
|
||||
/
|
||||
|
||||
|
|
|
@ -1335,11 +1335,10 @@ CREATE TABLE phpbb_zebra (
|
|||
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
|
||||
zebra_id INT4 DEFAULT '0' NOT NULL CHECK (zebra_id >= 0),
|
||||
friend INT2 DEFAULT '0' NOT NULL CHECK (friend >= 0),
|
||||
foe INT2 DEFAULT '0' NOT NULL CHECK (foe >= 0)
|
||||
foe INT2 DEFAULT '0' NOT NULL CHECK (foe >= 0),
|
||||
PRIMARY KEY (user_id, zebra_id)
|
||||
);
|
||||
|
||||
CREATE INDEX phpbb_zebra_user_id ON phpbb_zebra (user_id);
|
||||
CREATE INDEX phpbb_zebra_zebra_id ON phpbb_zebra (zebra_id);
|
||||
|
||||
|
||||
COMMIT;
|
|
@ -1033,11 +1033,10 @@ CREATE TABLE phpbb_zebra (
|
|||
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
zebra_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
friend INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
foe INTEGER UNSIGNED NOT NULL DEFAULT '0'
|
||||
foe INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (user_id, zebra_id)
|
||||
);
|
||||
|
||||
CREATE INDEX phpbb_zebra_user_id ON phpbb_zebra (user_id);
|
||||
CREATE INDEX phpbb_zebra_zebra_id ON phpbb_zebra (zebra_id);
|
||||
|
||||
|
||||
COMMIT;
|
Loading…
Add table
Reference in a new issue