mirror of
https://github.com/phpbb/phpbb.git
synced 2025-04-21 00:02:18 +02:00
Merge remote-tracking branch 'Noxwizard/ticket/10349' into develop-olympus
* Noxwizard/ticket/10349: [ticket/10349] Removed duplicated functions from schema loading in tests [ticket/10349] Update function comment [ticket/10349] Use new schema comment function in installer [ticket/10349] Unit tests: Consolidate schema comment removal functions [ticket/10349] Unit tests: Remove comments while loading schema files
This commit is contained in:
commit
bf6d501ab1
@ -2293,41 +2293,6 @@ function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_fr
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
* remove_comments will strip the sql comment lines out of an uploaded sql file
|
||||
* specifically for mssql and postgres type files in the install....
|
||||
*/
|
||||
function remove_comments(&$output)
|
||||
{
|
||||
$lines = explode("\n", $output);
|
||||
$output = '';
|
||||
|
||||
// try to keep mem. use down
|
||||
$linecount = sizeof($lines);
|
||||
|
||||
$in_comment = false;
|
||||
for ($i = 0; $i < $linecount; $i++)
|
||||
{
|
||||
if (trim($lines[$i]) == '/*')
|
||||
{
|
||||
$in_comment = true;
|
||||
}
|
||||
|
||||
if (!$in_comment)
|
||||
{
|
||||
$output .= $lines[$i] . "\n";
|
||||
}
|
||||
|
||||
if (trim($lines[$i]) == '*/')
|
||||
{
|
||||
$in_comment = false;
|
||||
}
|
||||
}
|
||||
|
||||
unset($lines);
|
||||
return $output;
|
||||
}
|
||||
|
||||
/**
|
||||
* Cache moderators, called whenever permissions are changed via admin_permissions. Changes of username
|
||||
* and group names must be carried through for the moderators table
|
||||
|
@ -50,7 +50,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'firebird',
|
||||
'MODULE' => 'interbase',
|
||||
'DELIM' => ';;',
|
||||
'COMMENTS' => 'remove_remarks',
|
||||
'DRIVER' => 'firebird',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => false,
|
||||
@ -60,7 +59,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'mysql_41',
|
||||
'MODULE' => 'mysqli',
|
||||
'DELIM' => ';',
|
||||
'COMMENTS' => 'remove_remarks',
|
||||
'DRIVER' => 'mysqli',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => true,
|
||||
@ -70,7 +68,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'mysql',
|
||||
'MODULE' => 'mysql',
|
||||
'DELIM' => ';',
|
||||
'COMMENTS' => 'remove_remarks',
|
||||
'DRIVER' => 'mysql',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => true,
|
||||
@ -80,7 +77,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'mssql',
|
||||
'MODULE' => 'mssql',
|
||||
'DELIM' => 'GO',
|
||||
'COMMENTS' => 'remove_comments',
|
||||
'DRIVER' => 'mssql',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => true,
|
||||
@ -90,7 +86,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'mssql',
|
||||
'MODULE' => 'odbc',
|
||||
'DELIM' => 'GO',
|
||||
'COMMENTS' => 'remove_comments',
|
||||
'DRIVER' => 'mssql_odbc',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => true,
|
||||
@ -100,7 +95,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'mssql',
|
||||
'MODULE' => 'sqlsrv',
|
||||
'DELIM' => 'GO',
|
||||
'COMMENTS' => 'remove_comments',
|
||||
'DRIVER' => 'mssqlnative',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => false,
|
||||
@ -110,7 +104,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'oracle',
|
||||
'MODULE' => 'oci8',
|
||||
'DELIM' => '/',
|
||||
'COMMENTS' => 'remove_comments',
|
||||
'DRIVER' => 'oracle',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => false,
|
||||
@ -120,7 +113,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'postgres',
|
||||
'MODULE' => 'pgsql',
|
||||
'DELIM' => ';',
|
||||
'COMMENTS' => 'remove_comments',
|
||||
'DRIVER' => 'postgres',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => true,
|
||||
@ -130,7 +122,6 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20
|
||||
'SCHEMA' => 'sqlite',
|
||||
'MODULE' => 'sqlite',
|
||||
'DELIM' => ';',
|
||||
'COMMENTS' => 'remove_remarks',
|
||||
'DRIVER' => 'sqlite',
|
||||
'AVAILABLE' => true,
|
||||
'2.0.x' => false,
|
||||
@ -473,11 +464,17 @@ function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix,
|
||||
}
|
||||
|
||||
/**
|
||||
* remove_remarks will strip the sql comment lines out of an uploaded sql file
|
||||
* Removes comments from schema files
|
||||
*/
|
||||
function remove_remarks(&$sql)
|
||||
function remove_comments($sql)
|
||||
{
|
||||
// Remove /* */ comments (http://ostermiller.org/findcomment.html)
|
||||
$sql = preg_replace('#/\*(.|[\r\n])*?\*/#', "\n", $sql);
|
||||
|
||||
// Remove # style comments
|
||||
$sql = preg_replace('/\n{2,}/', "\n", preg_replace('/^#.*$/m', "\n", $sql));
|
||||
|
||||
return $sql;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1178,14 +1178,13 @@ class install_install extends module
|
||||
$dbms_schema = 'schemas/' . $available_dbms[$data['dbms']]['SCHEMA'] . '_schema.sql';
|
||||
|
||||
// How should we treat this schema?
|
||||
$remove_remarks = $available_dbms[$data['dbms']]['COMMENTS'];
|
||||
$delimiter = $available_dbms[$data['dbms']]['DELIM'];
|
||||
|
||||
$sql_query = @file_get_contents($dbms_schema);
|
||||
|
||||
$sql_query = preg_replace('#phpbb_#i', $data['table_prefix'], $sql_query);
|
||||
|
||||
$remove_remarks($sql_query);
|
||||
$sql_query = remove_comments($sql_query);
|
||||
|
||||
$sql_query = split_sql_file($sql_query, $delimiter);
|
||||
|
||||
@ -1223,8 +1222,7 @@ class install_install extends module
|
||||
// Change language strings...
|
||||
$sql_query = preg_replace_callback('#\{L_([A-Z0-9\-_]*)\}#s', 'adjust_language_keys_callback', $sql_query);
|
||||
|
||||
// Since there is only one schema file we know the comment style and are able to remove it directly with remove_remarks
|
||||
remove_remarks($sql_query);
|
||||
$sql_query = remove_comments($sql_query);
|
||||
$sql_query = split_sql_file($sql_query, ';');
|
||||
|
||||
foreach ($sql_query as $sql)
|
||||
|
@ -7,6 +7,8 @@
|
||||
*
|
||||
*/
|
||||
|
||||
require_once dirname(__FILE__) . '/../../phpBB/includes/functions_install.php';
|
||||
|
||||
class phpbb_database_test_connection_manager
|
||||
{
|
||||
private $config;
|
||||
@ -239,7 +241,11 @@ class phpbb_database_test_connection_manager
|
||||
}
|
||||
|
||||
$filename = $directory . $schema . '_schema.sql';
|
||||
$sql = $this->split_sql(file_get_contents($filename));
|
||||
|
||||
$queries = file_get_contents($filename);
|
||||
$sql = remove_comments($queries);
|
||||
|
||||
$sql = split_sql_file($sql, $this->dbms['DELIM']);
|
||||
|
||||
foreach ($sql as $query)
|
||||
{
|
||||
@ -247,43 +253,6 @@ class phpbb_database_test_connection_manager
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Split contents of an SQL file into an array of SQL statements
|
||||
*
|
||||
* Note: This method is not the same as split_sql_file from functions_install.
|
||||
*
|
||||
* @param string $sql Raw contents of an SQL file
|
||||
*
|
||||
* @return Array of runnable SQL statements
|
||||
*/
|
||||
protected function split_sql($sql)
|
||||
{
|
||||
$sql = str_replace("\r" , '', $sql);
|
||||
$data = preg_split('/' . preg_quote($this->dbms['DELIM'], '/') . '$/m', $sql);
|
||||
|
||||
$data = array_map('trim', $data);
|
||||
|
||||
// The empty case
|
||||
$end_data = end($data);
|
||||
|
||||
if (empty($end_data))
|
||||
{
|
||||
unset($data[key($data)]);
|
||||
}
|
||||
|
||||
if ($this->config['dbms'] == 'sqlite')
|
||||
{
|
||||
// remove comment lines starting with # - they are not proper sqlite
|
||||
// syntax and break sqlite2
|
||||
foreach ($data as $i => $query)
|
||||
{
|
||||
$data[$i] = preg_replace('/^#.*$/m', "\n", $query);
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Map a phpBB dbms driver name to dbms data array
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user