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),
|
'friend' => array('BOOL', 0),
|
||||||
'foe' => array('BOOL', 0),
|
'foe' => array('BOOL', 0),
|
||||||
),
|
),
|
||||||
'KEYS' => array(
|
'PRIMARY_KEY' => array('user_id', 'zebra_id'),
|
||||||
'user_id' => array('INDEX', 'user_id'),
|
|
||||||
'zebra_id' => array('INDEX', 'zebra_id'),
|
|
||||||
),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
return $schema_data;
|
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
|
// 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);
|
_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!)
|
* Change column type (not name!)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1502,6 +1502,6 @@ CREATE TABLE phpbb_zebra (
|
||||||
foe INTEGER DEFAULT 0 NOT NULL
|
foe INTEGER DEFAULT 0 NOT NULL
|
||||||
);;
|
);;
|
||||||
|
|
||||||
CREATE INDEX phpbb_zebra_user_id ON phpbb_zebra(user_id);;
|
ALTER TABLE phpbb_zebra ADD PRIMARY KEY (user_id, zebra_id);;
|
||||||
CREATE INDEX phpbb_zebra_zebra_id ON phpbb_zebra(zebra_id);;
|
|
||||||
|
|
||||||
|
|
|
@ -1744,10 +1744,12 @@ CREATE TABLE [phpbb_zebra] (
|
||||||
) ON [PRIMARY]
|
) ON [PRIMARY]
|
||||||
GO
|
GO
|
||||||
|
|
||||||
CREATE INDEX [user_id] ON [phpbb_zebra]([user_id]) ON [PRIMARY]
|
ALTER TABLE [phpbb_zebra] WITH NOCHECK ADD
|
||||||
GO
|
CONSTRAINT [PK_phpbb_zebra] PRIMARY KEY CLUSTERED
|
||||||
|
(
|
||||||
CREATE INDEX [zebra_id] ON [phpbb_zebra]([zebra_id]) ON [PRIMARY]
|
[user_id],
|
||||||
|
[zebra_id]
|
||||||
|
) ON [PRIMARY]
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1066,8 +1066,7 @@ CREATE TABLE phpbb_zebra (
|
||||||
zebra_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
zebra_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
friend tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
friend tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
foe tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
foe tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
KEY user_id (user_id),
|
PRIMARY KEY (user_id, zebra_id)
|
||||||
KEY zebra_id (zebra_id)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1066,8 +1066,7 @@ CREATE TABLE phpbb_zebra (
|
||||||
zebra_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
zebra_id mediumint(8) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
friend tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
friend tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
foe tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
foe tinyint(1) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
KEY user_id (user_id),
|
PRIMARY KEY (user_id, zebra_id)
|
||||||
KEY zebra_id (zebra_id)
|
|
||||||
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
|
) CHARACTER SET `utf8` COLLATE `utf8_bin`;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1935,12 +1935,9 @@ CREATE TABLE phpbb_zebra (
|
||||||
user_id number(8) DEFAULT '0' NOT NULL,
|
user_id number(8) DEFAULT '0' NOT NULL,
|
||||||
zebra_id number(8) DEFAULT '0' NOT NULL,
|
zebra_id number(8) DEFAULT '0' NOT NULL,
|
||||||
friend number(1) 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),
|
user_id INT4 DEFAULT '0' NOT NULL CHECK (user_id >= 0),
|
||||||
zebra_id INT4 DEFAULT '0' NOT NULL CHECK (zebra_id >= 0),
|
zebra_id INT4 DEFAULT '0' NOT NULL CHECK (zebra_id >= 0),
|
||||||
friend INT2 DEFAULT '0' NOT NULL CHECK (friend >= 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;
|
COMMIT;
|
|
@ -1033,11 +1033,10 @@ CREATE TABLE phpbb_zebra (
|
||||||
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
user_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||||
zebra_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
zebra_id INTEGER UNSIGNED NOT NULL DEFAULT '0',
|
||||||
friend 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;
|
COMMIT;
|
Loading…
Add table
Reference in a new issue