mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
assorted backup fixes
git-svn-id: file:///svn/phpbb/trunk@6053 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
fdaba4d67e
commit
4a0ddb9dfb
1 changed files with 72 additions and 15 deletions
|
@ -176,6 +176,7 @@ class acp_database
|
||||||
case 'mssql':
|
case 'mssql':
|
||||||
case 'mssql_odbc':
|
case 'mssql_odbc':
|
||||||
$sql_data .= '# Table: ' . $table_name . "\n";
|
$sql_data .= '# Table: ' . $table_name . "\n";
|
||||||
|
$sql_data .= "IF OBJECT_ID(N'$table_name', N'U') IS NOT NULL\n";
|
||||||
$sql_data .= "DROP TABLE $table_name;\nGO\n";
|
$sql_data .= "DROP TABLE $table_name;\nGO\n";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -520,6 +521,7 @@ class acp_database
|
||||||
|
|
||||||
case 'mssql_odbc':
|
case 'mssql_odbc':
|
||||||
$ary_type = $ary_name = array();
|
$ary_type = $ary_name = array();
|
||||||
|
$ident_set = false;
|
||||||
|
|
||||||
// Grab all of the data from current table.
|
// Grab all of the data from current table.
|
||||||
$sql = "SELECT * FROM {$table_name}";
|
$sql = "SELECT * FROM {$table_name}";
|
||||||
|
@ -529,7 +531,17 @@ class acp_database
|
||||||
|
|
||||||
if ($retrieved_data)
|
if ($retrieved_data)
|
||||||
{
|
{
|
||||||
$sql_data .= "\nSET IDENTITY_INSERT $table_name ON\n";
|
$sql = "SELECT 1 as has_identity
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE COLUMNPROPERTY(object_id('$table_name'), COLUMN_NAME, 'IsIdentity') = 1";
|
||||||
|
$result2 = $db->sql_query($sql);
|
||||||
|
$row2 = $db->sql_fetchrow($result2);
|
||||||
|
if (!empty($row2['has_identity']))
|
||||||
|
{
|
||||||
|
$sql_data .= "\nSET IDENTITY_INSERT $table_name ON\nGO\n";
|
||||||
|
$ident_set = true;
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result2);
|
||||||
}
|
}
|
||||||
|
|
||||||
$i_num_fields = odbc_num_fields($result);
|
$i_num_fields = odbc_num_fields($result);
|
||||||
|
@ -572,7 +584,7 @@ class acp_database
|
||||||
$str_empty = 'NULL';
|
$str_empty = 'NULL';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($str_val) && $str_val !== '0')
|
if (empty($str_val) && $str_val !== '0' && !(is_int($str_val) || is_float($str_val)))
|
||||||
{
|
{
|
||||||
$str_val = $str_empty;
|
$str_val = $str_empty;
|
||||||
}
|
}
|
||||||
|
@ -609,12 +621,17 @@ class acp_database
|
||||||
|
|
||||||
if ($retrieved_data)
|
if ($retrieved_data)
|
||||||
{
|
{
|
||||||
$sql_data .= "\nSET IDENTITY_INSERT $table_name OFF\n";
|
$sql_data = "\nGO\n";
|
||||||
|
if ($ident_set)
|
||||||
|
{
|
||||||
|
$sql_data .= "\nSET IDENTITY_INSERT $table_name OFF\nGO\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'mssql':
|
case 'mssql':
|
||||||
$ary_type = $ary_name = array();
|
$ary_type = $ary_name = array();
|
||||||
|
$ident_set = false;
|
||||||
|
|
||||||
// Grab all of the data from current table.
|
// Grab all of the data from current table.
|
||||||
$sql = "SELECT * FROM {$table_name}";
|
$sql = "SELECT * FROM {$table_name}";
|
||||||
|
@ -622,11 +639,6 @@ class acp_database
|
||||||
|
|
||||||
$retrieved_data = mssql_num_rows($result);
|
$retrieved_data = mssql_num_rows($result);
|
||||||
|
|
||||||
if ($retrieved_data)
|
|
||||||
{
|
|
||||||
$sql_data .= "\nSET IDENTITY_INSERT $table_name ON\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
$i_num_fields = mssql_num_fields($result);
|
$i_num_fields = mssql_num_fields($result);
|
||||||
|
|
||||||
for ($i = 0; $i < $i_num_fields; $i++)
|
for ($i = 0; $i < $i_num_fields; $i++)
|
||||||
|
@ -635,6 +647,21 @@ class acp_database
|
||||||
$ary_name[$i] = mssql_field_name($result, $i);
|
$ary_name[$i] = mssql_field_name($result, $i);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($retrieved_data)
|
||||||
|
{
|
||||||
|
$sql = "SELECT 1 as has_identity
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE COLUMNPROPERTY(object_id('$table_name'), COLUMN_NAME, 'IsIdentity') = 1";
|
||||||
|
$result2 = $db->sql_query($sql);
|
||||||
|
$row2 = $db->sql_fetchrow($result2);
|
||||||
|
if (!empty($row2['has_identity']))
|
||||||
|
{
|
||||||
|
$sql_data .= "\nSET IDENTITY_INSERT $table_name ON\nGO\n";
|
||||||
|
$ident_set = true;
|
||||||
|
}
|
||||||
|
$db->sql_freeresult($result2);
|
||||||
|
}
|
||||||
|
|
||||||
while ($row = $db->sql_fetchrow($result))
|
while ($row = $db->sql_fetchrow($result))
|
||||||
{
|
{
|
||||||
$schema_vals = $schema_fields = array();
|
$schema_vals = $schema_fields = array();
|
||||||
|
@ -667,7 +694,7 @@ class acp_database
|
||||||
$str_empty = 'NULL';
|
$str_empty = 'NULL';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($str_val) && $str_val !== '0')
|
if (empty($str_val) && $str_val !== '0' && !(is_int($str_val) || is_float($str_val)))
|
||||||
{
|
{
|
||||||
$str_val = $str_empty;
|
$str_val = $str_empty;
|
||||||
}
|
}
|
||||||
|
@ -704,7 +731,11 @@ class acp_database
|
||||||
|
|
||||||
if ($retrieved_data)
|
if ($retrieved_data)
|
||||||
{
|
{
|
||||||
$sql_data .= "\nSET IDENTITY_INSERT $table_name OFF\n";
|
$sql_data = "\nGO\n";
|
||||||
|
if ($ident_set)
|
||||||
|
{
|
||||||
|
$sql_data .= "\nSET IDENTITY_INSERT $table_name OFF\nGO\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1095,7 +1126,30 @@ class acp_database
|
||||||
{
|
{
|
||||||
// Strip out sql comments...
|
// Strip out sql comments...
|
||||||
remove_remarks($data);
|
remove_remarks($data);
|
||||||
$pieces = split_sql_file($data, ';');
|
switch (SQL_LAYER)
|
||||||
|
{
|
||||||
|
case 'firebird':
|
||||||
|
$delim = ';;';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'mysql':
|
||||||
|
case 'mysql4':
|
||||||
|
case 'mysqli':
|
||||||
|
case 'sqlite':
|
||||||
|
case 'postgres':
|
||||||
|
$delim = ';';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'oracle':
|
||||||
|
$delim = '/';
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'mssql':
|
||||||
|
case 'mssql-odbc':
|
||||||
|
$delim = 'GO';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$pieces = split_sql_file($data, $delim);
|
||||||
|
|
||||||
$sql_count = count($pieces);
|
$sql_count = count($pieces);
|
||||||
for($i = 0; $i < $sql_count; $i++)
|
for($i = 0; $i < $sql_count; $i++)
|
||||||
|
@ -1556,8 +1610,11 @@ class acp_database
|
||||||
}
|
}
|
||||||
$rows[] = "\t\t[{$row['COLUMN_NAME']}]";
|
$rows[] = "\t\t[{$row['COLUMN_NAME']}]";
|
||||||
}
|
}
|
||||||
$sql_data .= implode(",\n", $rows);
|
if (sizeof($rows))
|
||||||
$sql_data .= "\n\t) ON [PRIMARY] \nGO\n";
|
{
|
||||||
|
$sql_data .= implode(",\n", $rows);
|
||||||
|
$sql_data .= "\n\t) ON [PRIMARY] \nGO\n";
|
||||||
|
}
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
|
|
||||||
$index = array();
|
$index = array();
|
||||||
|
@ -1567,7 +1624,7 @@ class acp_database
|
||||||
{
|
{
|
||||||
if ($row['TYPE'] == 3)
|
if ($row['TYPE'] == 3)
|
||||||
{
|
{
|
||||||
$index[$row['INDEX_NAME']][] = $row['COLUMN_NAME'];
|
$index[$row['INDEX_NAME']][] = '[' . $row['COLUMN_NAME'] . ']';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$db->sql_freeresult($result);
|
$db->sql_freeresult($result);
|
||||||
|
@ -1579,7 +1636,7 @@ class acp_database
|
||||||
|
|
||||||
foreach ($index as $index_name => $columns)
|
foreach ($index as $index_name => $columns)
|
||||||
{
|
{
|
||||||
$sql_data .= "\nCREATE INDEX [$index_name] ON [$table_name]([$columns]) ON [PRIMARY]\nGO\n";
|
$sql_data .= "\nCREATE INDEX [$index_name] ON [$table_name]($columns) ON [PRIMARY]\nGO\n";
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue