mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-16 04:19:41 +02:00
Merge pull request #4678 from DavidIQ/ticket/15047
[ticket/15047] Various db tools fixes for MSSQL
This commit is contained in:
commit
b859559c8f
@ -477,7 +477,7 @@ class mssql extends tools
|
|||||||
{
|
{
|
||||||
$statements = array();
|
$statements = array();
|
||||||
|
|
||||||
$statements[] = 'DROP INDEX ' . $table_name . '.' . $index_name;
|
$statements[] = 'DROP INDEX [' . $table_name . '].[' . $index_name . ']';
|
||||||
|
|
||||||
return $this->_sql_run_sql($statements);
|
return $this->_sql_run_sql($statements);
|
||||||
}
|
}
|
||||||
@ -524,7 +524,10 @@ class mssql extends tools
|
|||||||
{
|
{
|
||||||
$statements = array();
|
$statements = array();
|
||||||
|
|
||||||
|
if ($this->is_sql_server_2000())
|
||||||
|
{
|
||||||
$this->check_index_name_length($table_name, $index_name);
|
$this->check_index_name_length($table_name, $index_name);
|
||||||
|
}
|
||||||
|
|
||||||
$statements[] = 'CREATE UNIQUE INDEX [' . $index_name . '] ON [' . $table_name . ']([' . implode('], [', $column) . '])';
|
$statements[] = 'CREATE UNIQUE INDEX [' . $index_name . '] ON [' . $table_name . ']([' . implode('], [', $column) . '])';
|
||||||
|
|
||||||
@ -538,7 +541,10 @@ class mssql extends tools
|
|||||||
{
|
{
|
||||||
$statements = array();
|
$statements = array();
|
||||||
|
|
||||||
|
if ($this->is_sql_server_2000())
|
||||||
|
{
|
||||||
$this->check_index_name_length($table_name, $index_name);
|
$this->check_index_name_length($table_name, $index_name);
|
||||||
|
}
|
||||||
|
|
||||||
// remove index length
|
// remove index length
|
||||||
$column = preg_replace('#:.*$#', '', $column);
|
$column = preg_replace('#:.*$#', '', $column);
|
||||||
@ -601,7 +607,7 @@ class mssql extends tools
|
|||||||
// Change the column
|
// Change the column
|
||||||
$statements[] = 'ALTER TABLE [' . $table_name . '] ALTER COLUMN [' . $column_name . '] ' . $column_data['column_type_sql'];
|
$statements[] = 'ALTER TABLE [' . $table_name . '] ALTER COLUMN [' . $column_name . '] ' . $column_data['column_type_sql'];
|
||||||
|
|
||||||
if (!empty($column_data['default']))
|
if (!empty($column_data['default']) && !$this->mssql_is_column_identity($table_name, $column_name))
|
||||||
{
|
{
|
||||||
// Add new default value constraint
|
// Add new default value constraint
|
||||||
$statements[] = 'ALTER TABLE [' . $table_name . '] ADD CONSTRAINT [DF_' . $table_name . '_' . $column_name . '_1] ' . $column_data['default'] . ' FOR [' . $column_name . ']';
|
$statements[] = 'ALTER TABLE [' . $table_name . '] ADD CONSTRAINT [DF_' . $table_name . '_' . $column_name . '_1] ' . $column_data['default'] . ' FOR [' . $column_name . ']';
|
||||||
@ -678,6 +684,37 @@ class mssql extends tools
|
|||||||
return $statements;
|
return $statements;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks to see if column is an identity column
|
||||||
|
*
|
||||||
|
* Identity columns cannot have defaults set for them.
|
||||||
|
*
|
||||||
|
* @param string $table_name
|
||||||
|
* @param string $column_name
|
||||||
|
* @return bool true if identity, false if not
|
||||||
|
*/
|
||||||
|
protected function mssql_is_column_identity($table_name, $column_name)
|
||||||
|
{
|
||||||
|
if ($this->mssql_is_sql_server_2000())
|
||||||
|
{
|
||||||
|
// http://msdn.microsoft.com/en-us/library/aa175912%28v=sql.80%29.aspx
|
||||||
|
// Deprecated in SQL Server 2005
|
||||||
|
$sql = "SELECT COLUMNPROPERTY(object_id('{$table_name}'), '{$column_name}', 'IsIdentity') AS is_identity";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$sql = "SELECT is_identity FROM sys.columns
|
||||||
|
WHERE object_id = object_id('{$table_name}')
|
||||||
|
AND name = '{$column_name}'";
|
||||||
|
}
|
||||||
|
|
||||||
|
$result = $this->db->sql_query($sql);
|
||||||
|
$is_identity = $this->db->sql_fetchfield('is_identity');
|
||||||
|
$this->db->sql_freeresult($result);
|
||||||
|
|
||||||
|
return (bool) $is_identity;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a list with existing indexes for the column
|
* Get a list with existing indexes for the column
|
||||||
*
|
*
|
||||||
@ -717,6 +754,7 @@ class mssql extends tools
|
|||||||
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}'
|
||||||
|
AND ix.is_primary_key = 0
|
||||||
AND ix.is_unique = " . ($unique ? '1' : '0');
|
AND ix.is_unique = " . ($unique ? '1' : '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user