aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@gmx.de>2014-04-12 12:42:32 +0200
committerJoas Schilling <nickvergessen@gmx.de>2014-04-17 11:29:44 +0200
commite2784d01cee227a56f2ad7bcaee4b796dbf6dde6 (patch)
tree13c9103f211ca9cf0a8e1f52f154a0dc72e1a837
parent9036cdaaa2d45664bca1a0e0cdeaaf2bd13c662a (diff)
downloadforums-e2784d01cee227a56f2ad7bcaee4b796dbf6dde6.tar
forums-e2784d01cee227a56f2ad7bcaee4b796dbf6dde6.tar.gz
forums-e2784d01cee227a56f2ad7bcaee4b796dbf6dde6.tar.bz2
forums-e2784d01cee227a56f2ad7bcaee4b796dbf6dde6.tar.xz
forums-e2784d01cee227a56f2ad7bcaee4b796dbf6dde6.zip
[ticket/12012] Fix tools::mssql_get_existing_indexes() for SQL Server 2000
PHPBB3-12012
-rw-r--r--phpBB/phpbb/db/tools.php50
1 files changed, 36 insertions, 14 deletions
diff --git a/phpBB/phpbb/db/tools.php b/phpBB/phpbb/db/tools.php
index 1299df51dd..c2285bcf80 100644
--- a/phpBB/phpbb/db/tools.php
+++ b/phpBB/phpbb/db/tools.php
@@ -2568,28 +2568,50 @@ class tools
$mssql_server_properties = $this->db->sql_fetchrow($result);
$this->db->sql_freeresult($result);
- // Remove default constraints
if ($mssql_server_properties['mssql_version'][0] == '8') // SQL Server 2000
{
// http://msdn.microsoft.com/en-us/library/aa175912%28v=sql.80%29.aspx
// Deprecated in SQL Server 2005
- /**
- * @todo Fix for SQL Server 2000
- $sql = "SELECT so.name AS def_name
- FROM sysobjects so
- JOIN sysconstraints sc ON so.id = sc.constid
- WHERE object_name(so.parent_obj) = '{$table_name}'
- AND so.xtype = 'D'
- AND sc.colid = (SELECT colid FROM syscolumns
- WHERE id = object_id('{$table_name}')
- AND name = '{$column_name}')";
+ $sql = "SELECT DISTINCT ix.name AS phpbb_index_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 cols.name = '{$column_name}'";
$result = $this->db->sql_query($sql);
+ $existing_indexes = array();
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);
- */
}
else
{
@@ -2600,7 +2622,7 @@ class tools
AND ixc.index_id = ix.index_id
INNER JOIN sys.columns cols
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}')
AND cols.name = '{$column_name}'";
$result = $this->db->sql_query($sql);