mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
[ticket/9725] Do not use deprecated views to remove default constraints
PHPBB3-9725
This commit is contained in:
parent
31e610f0b1
commit
aaa846cb3a
1 changed files with 84 additions and 32 deletions
|
@ -1815,8 +1815,16 @@ class phpbb_db_tools
|
||||||
|
|
||||||
case 'mssql':
|
case 'mssql':
|
||||||
case 'mssqlnative':
|
case 'mssqlnative':
|
||||||
// remove default cosntraints first
|
$sql = "SELECT CAST(SERVERPROPERTY('productversion') AS VARCHAR(25)) AS mssql_version";
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
$row = $this->db->sql_fetchrow($result);
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
// Remove default constraints
|
||||||
|
if ($row['mssql_version'][0] == '8') // SQL Server 2000
|
||||||
|
{
|
||||||
// http://msdn.microsoft.com/en-us/library/aa175912%28v=sql.80%29.aspx
|
// http://msdn.microsoft.com/en-us/library/aa175912%28v=sql.80%29.aspx
|
||||||
|
// Deprecated in SQL Server 2005
|
||||||
$statements[] = "DECLARE @drop_default_name VARCHAR(100), @cmd VARCHAR(1000)
|
$statements[] = "DECLARE @drop_default_name VARCHAR(100), @cmd VARCHAR(1000)
|
||||||
SET @drop_default_name =
|
SET @drop_default_name =
|
||||||
(SELECT so.name FROM sysobjects so
|
(SELECT so.name FROM sysobjects so
|
||||||
|
@ -1831,6 +1839,25 @@ class phpbb_db_tools
|
||||||
SET @cmd = 'ALTER TABLE [{$table_name}] DROP CONSTRAINT [' + @drop_default_name + ']'
|
SET @cmd = 'ALTER TABLE [{$table_name}] DROP CONSTRAINT [' + @drop_default_name + ']'
|
||||||
EXEC(@cmd)
|
EXEC(@cmd)
|
||||||
END";
|
END";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sql = "SELECT dobj.name AS def_name
|
||||||
|
FROM sys.columns col
|
||||||
|
LEFT OUTER JOIN sys.objects dobj ON (dobj.object_id = col.default_object_id AND dobj.type = 'D')
|
||||||
|
WHERE col.object_id = object_id('{$table_name}')
|
||||||
|
AND col.name = '{$column_name}'
|
||||||
|
AND dobj.name IS NOT NULL";
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
$row = $this->db->sql_fetchrow($result);
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if ($row)
|
||||||
|
{
|
||||||
|
$statements[] = 'ALTER TABLE [' . $table_name . '] DROP CONSTRAINT [' . $row['def_name'] . ']';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$statements[] = 'ALTER TABLE [' . $table_name . '] DROP COLUMN [' . $column_name . ']';
|
$statements[] = 'ALTER TABLE [' . $table_name . '] DROP COLUMN [' . $column_name . ']';
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -2317,7 +2344,14 @@ class phpbb_db_tools
|
||||||
|
|
||||||
if (!empty($column_data['default']))
|
if (!empty($column_data['default']))
|
||||||
{
|
{
|
||||||
|
$sql = "SELECT CAST(SERVERPROPERTY('productversion') AS VARCHAR(25)) AS mssql_version";
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
$row = $this->db->sql_fetchrow($result);
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
// Using TRANSACT-SQL for this statement because we do not want to have colliding data if statements are executed at a later stage
|
// Using TRANSACT-SQL for this statement because we do not want to have colliding data if statements are executed at a later stage
|
||||||
|
if ($row['mssql_version'][0] == '8') // SQL Server 2000
|
||||||
|
{
|
||||||
$statements[] = "DECLARE @drop_default_name VARCHAR(100), @cmd VARCHAR(1000)
|
$statements[] = "DECLARE @drop_default_name VARCHAR(100), @cmd VARCHAR(1000)
|
||||||
SET @drop_default_name =
|
SET @drop_default_name =
|
||||||
(SELECT so.name FROM sysobjects so
|
(SELECT so.name FROM sysobjects so
|
||||||
|
@ -2335,6 +2369,24 @@ class phpbb_db_tools
|
||||||
SET @cmd = 'ALTER TABLE [{$table_name}] ADD CONSTRAINT [DF_{$table_name}_{$column_name}_1] {$column_data['default']} FOR [{$column_name}]'
|
SET @cmd = 'ALTER TABLE [{$table_name}] ADD CONSTRAINT [DF_{$table_name}_{$column_name}_1] {$column_data['default']} FOR [{$column_name}]'
|
||||||
EXEC(@cmd)";
|
EXEC(@cmd)";
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$statements[] = "DECLARE @drop_default_name VARCHAR(100), @cmd VARCHAR(1000)
|
||||||
|
SET @drop_default_name =
|
||||||
|
(SELECT dobj.name FROM sys.columns col
|
||||||
|
LEFT OUTER JOIN sys.objects dobj ON (dobj.object_id = col.default_object_id AND dobj.type = 'D')
|
||||||
|
WHERE col.object_id = object_id('{$table_name}')
|
||||||
|
AND col.name = '{$column_name}'
|
||||||
|
AND dobj.name IS NOT NULL)
|
||||||
|
IF @drop_default_name <> ''
|
||||||
|
BEGIN
|
||||||
|
SET @cmd = 'ALTER TABLE [{$table_name}] DROP CONSTRAINT [' + @drop_default_name + ']'
|
||||||
|
EXEC(@cmd)
|
||||||
|
END
|
||||||
|
SET @cmd = 'ALTER TABLE [{$table_name}] ADD CONSTRAINT [DF_{$table_name}_{$column_name}_1] {$column_data['default']} FOR [{$column_name}]'
|
||||||
|
EXEC(@cmd)";
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'mysql_40':
|
case 'mysql_40':
|
||||||
|
|
Loading…
Add table
Reference in a new issue