mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-07 16:15:22 +02:00
[ticket/12012] Fix tools::mssql_get_existing_indexes() for SQL Server 2000
PHPBB3-12012
This commit is contained in:
parent
9036cdaaa2
commit
e2784d01ce
@ -2568,28 +2568,50 @@ class tools
|
|||||||
$mssql_server_properties = $this->db->sql_fetchrow($result);
|
$mssql_server_properties = $this->db->sql_fetchrow($result);
|
||||||
$this->db->sql_freeresult($result);
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
// Remove default constraints
|
|
||||||
if ($mssql_server_properties['mssql_version'][0] == '8') // SQL Server 2000
|
if ($mssql_server_properties['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
|
// Deprecated in SQL Server 2005
|
||||||
/**
|
$sql = "SELECT DISTINCT ix.name AS phpbb_index_name
|
||||||
* @todo Fix for SQL Server 2000
|
FROM sysindexes ix
|
||||||
$sql = "SELECT so.name AS def_name
|
INNER JOIN sysindexkeys ixc
|
||||||
FROM sysobjects so
|
ON ixc.id = ix.id
|
||||||
JOIN sysconstraints sc ON so.id = sc.constid
|
AND ixc.indid = ix.indid
|
||||||
WHERE object_name(so.parent_obj) = '{$table_name}'
|
INNER JOIN syscolumns cols
|
||||||
AND so.xtype = 'D'
|
ON cols.colid = ixc.colid
|
||||||
AND sc.colid = (SELECT colid FROM syscolumns
|
AND cols.id = ix.id
|
||||||
WHERE id = object_id('{$table_name}')
|
WHERE ix.id = object_id('{$table_name}')
|
||||||
AND name = '{$column_name}')";
|
AND cols.name = '{$column_name}'";
|
||||||
$result = $this->db->sql_query($sql);
|
$result = $this->db->sql_query($sql);
|
||||||
|
$existing_indexes = array();
|
||||||
while ($row = $this->db->sql_fetchrow($result))
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$statements[] = 'ALTER TABLE [' . $table_name . '] DROP CONSTRAINT [' . $row['def_name'] . ']';
|
$existing_indexes[$row['phpbb_index_name']] = array();
|
||||||
|
}
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
if (empty($existing_indexes))
|
||||||
|
{
|
||||||
|
return array();
|
||||||
|
}
|
||||||
|
|
||||||
|
$sql = "SELECT DISTINCT ix.name AS phpbb_index_name, cols.name AS phpbb_column_name
|
||||||
|
FROM sysindexes ix
|
||||||
|
INNER JOIN sysindexkeys ixc
|
||||||
|
ON ixc.id = ix.id
|
||||||
|
AND ixc.indid = ix.indid
|
||||||
|
INNER JOIN syscolumns cols
|
||||||
|
ON cols.colid = ixc.colid
|
||||||
|
AND cols.id = ix.id
|
||||||
|
WHERE ix.id = object_id('{$table_name}')
|
||||||
|
AND " . $this->db->sql_in_set('ix.name', array_keys($existing_indexes));
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
|
||||||
|
while ($row = $this->db->sql_fetchrow($result))
|
||||||
|
{
|
||||||
|
$existing_indexes[$row['phpbb_index_name']][] = $row['phpbb_column_name'];
|
||||||
}
|
}
|
||||||
$this->db->sql_freeresult($result);
|
$this->db->sql_freeresult($result);
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2600,7 +2622,7 @@ class tools
|
|||||||
AND ixc.index_id = ix.index_id
|
AND ixc.index_id = ix.index_id
|
||||||
INNER JOIN sys.columns cols
|
INNER JOIN sys.columns cols
|
||||||
ON cols.column_id = ixc.column_id
|
ON cols.column_id = ixc.column_id
|
||||||
AND cols.object_id = ix.object_id
|
AND cols.object_id = ix.object_id
|
||||||
WHERE ix.object_id = object_id('{$table_name}')
|
WHERE ix.object_id = object_id('{$table_name}')
|
||||||
AND cols.name = '{$column_name}'";
|
AND cols.name = '{$column_name}'";
|
||||||
$result = $this->db->sql_query($sql);
|
$result = $this->db->sql_query($sql);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user