assorted backup fixes

git-svn-id: file:///svn/phpbb/trunk@6053 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
David M 2006-06-12 21:55:30 +00:00
parent fdaba4d67e
commit 4a0ddb9dfb

View file

@ -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;