diff options
Diffstat (limited to 'phpBB/develop/create_schema_files.php')
| -rw-r--r-- | phpBB/develop/create_schema_files.php | 2116 | 
1 files changed, 37 insertions, 2079 deletions
diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index b5f1202c0d..60ffe04330 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -1,10 +1,17 @@  <?php  /**  * -* @package phpBB3 -* @copyright (c) 2006 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* This file is part of the phpBB Forum Software package.  * +* @copyright (c) phpBB Limited <https://www.phpbb.com> +* @license GNU General Public License, version 2 (GPL-2.0) +* +* For full copyright and license information, please see +* the docs/CREDITS.txt file. +* +*/ + +/**  * This file creates new schema files for every database.  * The filenames will be prefixed with an underscore to not overwrite the current schema files.  * @@ -12,2090 +19,41 @@  */  $schema_path = dirname(__FILE__) . '/../install/schemas/'; +$supported_dbms = array( +	'mssql', +	'mysql_40', +	'mysql_41', +	'oracle', +	'postgres', +	'sqlite', +); +$table_prefix = 'phpbb_';  if (!is_writable($schema_path))  {  	die('Schema path not writable');  } -$schema_data = get_schema_struct(); -$dbms_type_map = array( -	'mysql_41'	=> array( -		'INT:'		=> 'int(%d)', -		'BINT'		=> 'bigint(20)', -		'UINT'		=> 'mediumint(8) UNSIGNED', -		'UINT:'		=> 'int(%d) UNSIGNED', -		'TINT:'		=> 'tinyint(%d)', -		'USINT'		=> 'smallint(4) UNSIGNED', -		'BOOL'		=> 'tinyint(1) UNSIGNED', -		'VCHAR'		=> 'varchar(255)', -		'VCHAR:'	=> 'varchar(%d)', -		'CHAR:'		=> 'char(%d)', -		'XSTEXT'	=> 'text', -		'XSTEXT_UNI'=> 'varchar(100)', -		'STEXT'		=> 'text', -		'STEXT_UNI'	=> 'varchar(255)', -		'TEXT'		=> 'text', -		'TEXT_UNI'	=> 'text', -		'MTEXT'		=> 'mediumtext', -		'MTEXT_UNI'	=> 'mediumtext', -		'TIMESTAMP'	=> 'int(11) UNSIGNED', -		'DECIMAL'	=> 'decimal(5,2)', -		'DECIMAL:'	=> 'decimal(%d,2)', -		'PDECIMAL'	=> 'decimal(6,3)', -		'PDECIMAL:'	=> 'decimal(%d,3)', -		'VCHAR_UNI'	=> 'varchar(255)', -		'VCHAR_UNI:'=> 'varchar(%d)', -		'VCHAR_CI'	=> 'varchar(255)', -		'VARBINARY'	=> 'varbinary(255)', -	), - -	'mysql_40'	=> array( -		'INT:'		=> 'int(%d)', -		'BINT'		=> 'bigint(20)', -		'UINT'		=> 'mediumint(8) UNSIGNED', -		'UINT:'		=> 'int(%d) UNSIGNED', -		'TINT:'		=> 'tinyint(%d)', -		'USINT'		=> 'smallint(4) UNSIGNED', -		'BOOL'		=> 'tinyint(1) UNSIGNED', -		'VCHAR'		=> 'varbinary(255)', -		'VCHAR:'	=> 'varbinary(%d)', -		'CHAR:'		=> 'binary(%d)', -		'XSTEXT'	=> 'blob', -		'XSTEXT_UNI'=> 'blob', -		'STEXT'		=> 'blob', -		'STEXT_UNI'	=> 'blob', -		'TEXT'		=> 'blob', -		'TEXT_UNI'	=> 'blob', -		'MTEXT'		=> 'mediumblob', -		'MTEXT_UNI'	=> 'mediumblob', -		'TIMESTAMP'	=> 'int(11) UNSIGNED', -		'DECIMAL'	=> 'decimal(5,2)', -		'DECIMAL:'	=> 'decimal(%d,2)', -		'PDECIMAL'	=> 'decimal(6,3)', -		'PDECIMAL:'	=> 'decimal(%d,3)', -		'VCHAR_UNI'	=> 'blob', -		'VCHAR_UNI:'=> array('varbinary(%d)', 'limit' => array('mult', 3, 255, 'blob')), -		'VCHAR_CI'	=> 'blob', -		'VARBINARY'	=> 'varbinary(255)', -	), - -	'firebird'	=> array( -		'INT:'		=> 'INTEGER', -		'BINT'		=> 'DOUBLE PRECISION', -		'UINT'		=> 'INTEGER', -		'UINT:'		=> 'INTEGER', -		'TINT:'		=> 'INTEGER', -		'USINT'		=> 'INTEGER', -		'BOOL'		=> 'INTEGER', -		'VCHAR'		=> 'VARCHAR(255) CHARACTER SET NONE', -		'VCHAR:'	=> 'VARCHAR(%d) CHARACTER SET NONE', -		'CHAR:'		=> 'CHAR(%d) CHARACTER SET NONE', -		'XSTEXT'	=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -		'STEXT'		=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -		'TEXT'		=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -		'MTEXT'		=> 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', -		'XSTEXT_UNI'=> 'VARCHAR(100) CHARACTER SET UTF8', -		'STEXT_UNI'	=> 'VARCHAR(255) CHARACTER SET UTF8', -		'TEXT_UNI'	=> 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', -		'MTEXT_UNI'	=> 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', -		'TIMESTAMP'	=> 'INTEGER', -		'DECIMAL'	=> 'DOUBLE PRECISION', -		'DECIMAL:'	=> 'DOUBLE PRECISION', -		'PDECIMAL'	=> 'DOUBLE PRECISION', -		'PDECIMAL:'	=> 'DOUBLE PRECISION', -		'VCHAR_UNI'	=> 'VARCHAR(255) CHARACTER SET UTF8', -		'VCHAR_UNI:'=> 'VARCHAR(%d) CHARACTER SET UTF8', -		'VCHAR_CI'	=> 'VARCHAR(255) CHARACTER SET UTF8', -		'VARBINARY'	=> 'CHAR(255) CHARACTER SET NONE', -	), - -	'mssql'		=> array( -		'INT:'		=> '[int]', -		'BINT'		=> '[float]', -		'UINT'		=> '[int]', -		'UINT:'		=> '[int]', -		'TINT:'		=> '[int]', -		'USINT'		=> '[int]', -		'BOOL'		=> '[int]', -		'VCHAR'		=> '[varchar] (255)', -		'VCHAR:'	=> '[varchar] (%d)', -		'CHAR:'		=> '[char] (%d)', -		'XSTEXT'	=> '[varchar] (1000)', -		'STEXT'		=> '[varchar] (3000)', -		'TEXT'		=> '[varchar] (8000)', -		'MTEXT'		=> '[text]', -		'XSTEXT_UNI'=> '[varchar] (100)', -		'STEXT_UNI'	=> '[varchar] (255)', -		'TEXT_UNI'	=> '[varchar] (4000)', -		'MTEXT_UNI'	=> '[text]', -		'TIMESTAMP'	=> '[int]', -		'DECIMAL'	=> '[float]', -		'DECIMAL:'	=> '[float]', -		'PDECIMAL'	=> '[float]', -		'PDECIMAL:'	=> '[float]', -		'VCHAR_UNI'	=> '[varchar] (255)', -		'VCHAR_UNI:'=> '[varchar] (%d)', -		'VCHAR_CI'	=> '[varchar] (255)', -		'VARBINARY'	=> '[varchar] (255)', -	), - -	'oracle'	=> array( -		'INT:'		=> 'number(%d)', -		'BINT'		=> 'number(20)', -		'UINT'		=> 'number(8)', -		'UINT:'		=> 'number(%d)', -		'TINT:'		=> 'number(%d)', -		'USINT'		=> 'number(4)', -		'BOOL'		=> 'number(1)', -		'VCHAR'		=> 'varchar2(255)', -		'VCHAR:'	=> 'varchar2(%d)', -		'CHAR:'		=> 'char(%d)', -		'XSTEXT'	=> 'varchar2(1000)', -		'STEXT'		=> 'varchar2(3000)', -		'TEXT'		=> 'clob', -		'MTEXT'		=> 'clob', -		'XSTEXT_UNI'=> 'varchar2(300)', -		'STEXT_UNI'	=> 'varchar2(765)', -		'TEXT_UNI'	=> 'clob', -		'MTEXT_UNI'	=> 'clob', -		'TIMESTAMP'	=> 'number(11)', -		'DECIMAL'	=> 'number(5, 2)', -		'DECIMAL:'	=> 'number(%d, 2)', -		'PDECIMAL'	=> 'number(6, 3)', -		'PDECIMAL:'	=> 'number(%d, 3)', -		'VCHAR_UNI'	=> 'varchar2(765)', -		'VCHAR_UNI:'=> array('varchar2(%d)', 'limit' => array('mult', 3, 765, 'clob')), -		'VCHAR_CI'	=> 'varchar2(255)', -		'VARBINARY'	=> 'raw(255)', -	), - -	'sqlite'	=> array( -		'INT:'		=> 'int(%d)', -		'BINT'		=> 'bigint(20)', -		'UINT'		=> 'INTEGER UNSIGNED', //'mediumint(8) UNSIGNED', -		'UINT:'		=> 'INTEGER UNSIGNED', // 'int(%d) UNSIGNED', -		'TINT:'		=> 'tinyint(%d)', -		'USINT'		=> 'INTEGER UNSIGNED', //'mediumint(4) UNSIGNED', -		'BOOL'		=> 'INTEGER UNSIGNED', //'tinyint(1) UNSIGNED', -		'VCHAR'		=> 'varchar(255)', -		'VCHAR:'	=> 'varchar(%d)', -		'CHAR:'		=> 'char(%d)', -		'XSTEXT'	=> 'text(65535)', -		'STEXT'		=> 'text(65535)', -		'TEXT'		=> 'text(65535)', -		'MTEXT'		=> 'mediumtext(16777215)', -		'XSTEXT_UNI'=> 'text(65535)', -		'STEXT_UNI'	=> 'text(65535)', -		'TEXT_UNI'	=> 'text(65535)', -		'MTEXT_UNI'	=> 'mediumtext(16777215)', -		'TIMESTAMP'	=> 'INTEGER UNSIGNED', //'int(11) UNSIGNED', -		'DECIMAL'	=> 'decimal(5,2)', -		'DECIMAL:'	=> 'decimal(%d,2)', -		'PDECIMAL'	=> 'decimal(6,3)', -		'PDECIMAL:'	=> 'decimal(%d,3)', -		'VCHAR_UNI'	=> 'varchar(255)', -		'VCHAR_UNI:'=> 'varchar(%d)', -		'VCHAR_CI'	=> 'varchar(255)', -		'VARBINARY'	=> 'blob', -	), - -	'postgres'	=> array( -		'INT:'		=> 'INT4', -		'BINT'		=> 'INT8', -		'UINT'		=> 'INT4', // unsigned -		'UINT:'		=> 'INT4', // unsigned -		'USINT'		=> 'INT2', // unsigned -		'BOOL'		=> 'INT2', // unsigned -		'TINT:'		=> 'INT2', -		'VCHAR'		=> 'varchar(255)', -		'VCHAR:'	=> 'varchar(%d)', -		'CHAR:'		=> 'char(%d)', -		'XSTEXT'	=> 'varchar(1000)', -		'STEXT'		=> 'varchar(3000)', -		'TEXT'		=> 'varchar(8000)', -		'MTEXT'		=> 'TEXT', -		'XSTEXT_UNI'=> 'varchar(100)', -		'STEXT_UNI'	=> 'varchar(255)', -		'TEXT_UNI'	=> 'varchar(4000)', -		'MTEXT_UNI'	=> 'TEXT', -		'TIMESTAMP'	=> 'INT4', // unsigned -		'DECIMAL'	=> 'decimal(5,2)', -		'DECIMAL:'	=> 'decimal(%d,2)', -		'PDECIMAL'	=> 'decimal(6,3)', -		'PDECIMAL:'	=> 'decimal(%d,3)', -		'VCHAR_UNI'	=> 'varchar(255)', -		'VCHAR_UNI:'=> 'varchar(%d)', -		'VCHAR_CI'	=> 'varchar_ci', -		'VARBINARY'	=> 'bytea', -	), -); - -// A list of types being unsigned for better reference in some db's -$unsigned_types = array('UINT', 'UINT:', 'USINT', 'BOOL', 'TIMESTAMP'); -$supported_dbms = array('firebird', 'mssql', 'mysql_40', 'mysql_41', 'oracle', 'postgres', 'sqlite'); - -foreach ($supported_dbms as $dbms) -{ -	$schema_data = get_schema_struct(); -	if ($dbms == 'mssql') -	{ -		foreach ($schema_data as $table_name => $table_data) -		{ -			if (!isset($table_data['PRIMARY_KEY'])) -			{ -				$schema_data[$table_name]['COLUMNS']['mssqlindex'] = array('UINT', NULL, 'auto_increment'); -				$schema_data[$table_name]['PRIMARY_KEY'] = 'mssqlindex'; -			} -		} -	} - -	$fp = fopen($schema_path . $dbms . '_schema.sql', 'wb'); - -	$line = ''; - -	// Write Header -	switch ($dbms) -	{ -		case 'mysql_40': -		case 'mysql_41': -		case 'firebird': -		case 'sqlite': -			fwrite($fp, "# DO NOT EDIT THIS FILE, IT IS GENERATED\n"); -			fwrite($fp, "#\n"); -			fwrite($fp, "# To change the contents of this file, edit\n"); -			fwrite($fp, "# phpBB/develop/create_schema_files.php and\n"); -			fwrite($fp, "# run it.\n"); -		break; - -		case 'mssql': -		case 'oracle': -		case 'postgres': -			fwrite($fp, "/*\n"); -			fwrite($fp, " * DO NOT EDIT THIS FILE, IT IS GENERATED\n"); -			fwrite($fp, " *\n"); -			fwrite($fp, " * To change the contents of this file, edit\n"); -			fwrite($fp, " * phpBB/develop/create_schema_files.php and\n"); -			fwrite($fp, " * run it.\n"); -			fwrite($fp, " */\n\n"); -		break; -	} - -	switch ($dbms) -	{ -		case 'firebird': -			$line .= custom_data('firebird') . "\n"; -		break; - -		case 'sqlite': -			$line .= "BEGIN TRANSACTION;\n\n"; -		break; - -		case 'oracle': -			$line .= custom_data('oracle') . "\n"; -		break; - -		case 'postgres': -			$line .= "BEGIN;\n\n"; -			$line .= custom_data('postgres') . "\n"; -		break; -	} - -	fwrite($fp, $line); - -	foreach ($schema_data as $table_name => $table_data) -	{ -		// Write comment about table -		switch ($dbms) -		{ -			case 'mysql_40': -			case 'mysql_41': -			case 'firebird': -			case 'sqlite': -				fwrite($fp, "# Table: '{$table_name}'\n"); -			break; - -			case 'mssql': -			case 'oracle': -			case 'postgres': -				fwrite($fp, "/*\n\tTable: '{$table_name}'\n*/\n"); -			break; -		} - -		// Create Table statement -		$generator = $textimage = false; -		$line = ''; - -		switch ($dbms) -		{ -			case 'mysql_40': -			case 'mysql_41': -			case 'firebird': -			case 'oracle': -			case 'sqlite': -			case 'postgres': -				$line = "CREATE TABLE {$table_name} (\n"; -			break; - -			case 'mssql': -				$line = "CREATE TABLE [{$table_name}] (\n"; -			break; -		} - -		// Table specific so we don't get overlap -		$modded_array = array(); - -		// Write columns one by one... -		foreach ($table_data['COLUMNS'] as $column_name => $column_data) -		{ -			if (strlen($column_name) > 30) -			{ -				trigger_error("Column name '$column_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); -			} -			if (isset($column_data[2]) && $column_data[2] == 'auto_increment' && strlen($column_name) > 26) // "${column_name}_gen" -			{ -				trigger_error("Index name '${column_name}_gen' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); -			} - -			// Get type -			if (strpos($column_data[0], ':') !== false) -			{ -				list($orig_column_type, $column_length) = explode(':', $column_data[0]); -				if (!is_array($dbms_type_map[$dbms][$orig_column_type . ':'])) -				{ -					$column_type = sprintf($dbms_type_map[$dbms][$orig_column_type . ':'], $column_length); -				} -				else -				{ -					if (isset($dbms_type_map[$dbms][$orig_column_type . ':']['rule'])) -					{ -						switch ($dbms_type_map[$dbms][$orig_column_type . ':']['rule'][0]) -						{ -							case 'div': -								$column_length /= $dbms_type_map[$dbms][$orig_column_type . ':']['rule'][1]; -								$column_length = ceil($column_length); -								$column_type = sprintf($dbms_type_map[$dbms][$orig_column_type . ':'][0], $column_length); -							break; -						} -					} - -					if (isset($dbms_type_map[$dbms][$orig_column_type . ':']['limit'])) -					{ -						switch ($dbms_type_map[$dbms][$orig_column_type . ':']['limit'][0]) -						{ -							case 'mult': -								$column_length *= $dbms_type_map[$dbms][$orig_column_type . ':']['limit'][1]; -								if ($column_length > $dbms_type_map[$dbms][$orig_column_type . ':']['limit'][2]) -								{ -									$column_type = $dbms_type_map[$dbms][$orig_column_type . ':']['limit'][3]; -									$modded_array[$column_name] = $column_type; -								} -								else -								{ -									$column_type = sprintf($dbms_type_map[$dbms][$orig_column_type . ':'][0], $column_length); -								} -							break; -						} -					} -				} -				$orig_column_type .= ':'; -			} -			else -			{ -				$orig_column_type = $column_data[0]; -				$column_type = $dbms_type_map[$dbms][$column_data[0]]; -				if ($column_type == 'text' || $column_type == 'blob') -				{ -					$modded_array[$column_name] = $column_type; -				} -			} - -			// Adjust default value if db-dependant specified -			if (is_array($column_data[1])) -			{ -				$column_data[1] = (isset($column_data[1][$dbms])) ? $column_data[1][$dbms] : $column_data[1]['default']; -			} - -			switch ($dbms) -			{ -				case 'mysql_40': -				case 'mysql_41': -					$line .= "\t{$column_name} {$column_type} "; - -					// For hexadecimal values do not use single quotes -					if (!is_null($column_data[1]) && substr($column_type, -4) !== 'text' && substr($column_type, -4) !== 'blob') -					{ -						$line .= (strpos($column_data[1], '0x') === 0) ? "DEFAULT {$column_data[1]} " : "DEFAULT '{$column_data[1]}' "; -					} -					$line .= 'NOT NULL'; - -					if (isset($column_data[2])) -					{ -						if ($column_data[2] == 'auto_increment') -						{ -							$line .= ' auto_increment'; -						} -						else if ($dbms === 'mysql_41' && $column_data[2] == 'true_sort') -						{ -							$line .= ' COLLATE utf8_unicode_ci'; -						} -					} - -					$line .= ",\n"; -				break; - -				case 'sqlite': -					if (isset($column_data[2]) && $column_data[2] == 'auto_increment') -					{ -						$line .= "\t{$column_name} INTEGER PRIMARY KEY "; -						$generator = $column_name; -					} -					else -					{ -						$line .= "\t{$column_name} {$column_type} "; -					} - -					$line .= 'NOT NULL '; -					$line .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}'" : ''; -					$line .= ",\n"; -				break; - -				case 'firebird': -					$line .= "\t{$column_name} {$column_type} "; - -					if (!is_null($column_data[1])) -					{ -						$line .= 'DEFAULT ' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ' '; -					} - -					$line .= 'NOT NULL'; - -					// This is a UNICODE column and thus should be given it's fair share -					if (preg_match('/^X?STEXT_UNI|VCHAR_(CI|UNI:?)/', $column_data[0])) -					{ -						$line .= ' COLLATE UNICODE'; -					} - -					$line .= ",\n"; - -					if (isset($column_data[2]) && $column_data[2] == 'auto_increment') -					{ -						$generator = $column_name; -					} -				break; - -				case 'mssql': -					if ($column_type == '[text]') -					{ -						$textimage = true; -					} - -					$line .= "\t[{$column_name}] {$column_type} "; +define('IN_PHPBB', true); +$phpbb_root_path = dirname(__FILE__) . '/../'; +$phpEx = substr(strrchr(__FILE__, '.'), 1); -					if (!is_null($column_data[1])) -					{ -						// For hexadecimal values do not use single quotes -						if (strpos($column_data[1], '0x') === 0) -						{ -							$line .= 'DEFAULT (' . $column_data[1] . ') '; -						} -						else -						{ -							$line .= 'DEFAULT (' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ') '; -						} -					} - -					if (isset($column_data[2]) && $column_data[2] == 'auto_increment') -					{ -						$line .= 'IDENTITY (1, 1) '; -					} - -					$line .= 'NOT NULL'; -					$line .= " ,\n"; -				break; - -				case 'oracle': -					$line .= "\t{$column_name} {$column_type} "; -					$line .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : ''; - -					// In Oracle empty strings ('') are treated as NULL. -					// Therefore in oracle we allow NULL's for all DEFAULT '' entries -					$line .= ($column_data[1] === '') ? ",\n" : "NOT NULL,\n"; - -					if (isset($column_data[2]) && $column_data[2] == 'auto_increment') -					{ -						$generator = $column_name; -					} -				break; - -				case 'postgres': -					$line .= "\t{$column_name} {$column_type} "; - -					if (isset($column_data[2]) && $column_data[2] == 'auto_increment') -					{ -						$line .= "DEFAULT nextval('{$table_name}_seq'),\n"; - -						// Make sure the sequence will be created before creating the table -						$line = "CREATE SEQUENCE {$table_name}_seq;\n\n" . $line; -					} -					else -					{ -						$line .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : ''; -						$line .= "NOT NULL"; - -						// Unsigned? Then add a CHECK contraint -						if (in_array($orig_column_type, $unsigned_types)) -						{ -							$line .= " CHECK ({$column_name} >= 0)"; -						} - -						$line .= ",\n"; -					} -				break; -			} -		} - -		switch ($dbms) -		{ -			case 'firebird': -				// Remove last line delimiter... -				$line = substr($line, 0, -2); -				$line .= "\n);;\n\n"; -			break; - -			case 'mssql': -				$line = substr($line, 0, -2); -				$line .= "\n)";// ON [PRIMARY]" . (($textimage) ? ' TEXTIMAGE_ON [PRIMARY]' : '') . "\n"; -				$line .= "GO\n\n"; -			break; -		} - -		// Write primary key -		if (isset($table_data['PRIMARY_KEY'])) -		{ -			if (!is_array($table_data['PRIMARY_KEY'])) -			{ -				$table_data['PRIMARY_KEY'] = array($table_data['PRIMARY_KEY']); -			} - -			switch ($dbms) -			{ -				case 'mysql_40': -				case 'mysql_41': -				case 'postgres': -					$line .= "\tPRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n"; -				break; - -				case 'firebird': -					$line .= "ALTER TABLE {$table_name} ADD PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . ");;\n\n"; -				break; - -				case 'sqlite': -					if ($generator === false || !in_array($generator, $table_data['PRIMARY_KEY'])) -					{ -						$line .= "\tPRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n"; -					} -				break; - -				case 'mssql': -					$line .= "ALTER TABLE [{$table_name}] WITH NOCHECK ADD \n"; -					$line .= "\tCONSTRAINT [PK_{$table_name}] PRIMARY KEY  CLUSTERED \n"; -					$line .= "\t(\n"; -					$line .= "\t\t[" . implode("],\n\t\t[", $table_data['PRIMARY_KEY']) . "]\n"; -					$line .= "\t)\n"; -					$line .= "GO\n\n"; -				break; - -				case 'oracle': -					$line .= "\tCONSTRAINT pk_{$table_name} PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n"; -				break; -			} -		} - -		switch ($dbms) -		{ -			case 'oracle': -				// UNIQUE contrains to be added? -				if (isset($table_data['KEYS'])) -				{ -					foreach ($table_data['KEYS'] as $key_name => $key_data) -					{ -						if (!is_array($key_data[1])) -						{ -							$key_data[1] = array($key_data[1]); -						} - -						if ($key_data[0] == 'UNIQUE') -						{ -							$line .= "\tCONSTRAINT u_phpbb_{$key_name} UNIQUE (" . implode(', ', $key_data[1]) . "),\n"; -						} -					} -				} - -				// Remove last line delimiter... -				$line = substr($line, 0, -2); -				$line .= "\n)\n/\n\n"; -			break; - -			case 'postgres': -				// Remove last line delimiter... -				$line = substr($line, 0, -2); -				$line .= "\n);\n\n"; -			break; - -			case 'sqlite': -				// Remove last line delimiter... -				$line = substr($line, 0, -2); -				$line .= "\n);\n\n"; -			break; -		} - -		// Write Keys -		if (isset($table_data['KEYS'])) -		{ -			foreach ($table_data['KEYS'] as $key_name => $key_data) -			{ -				if (!is_array($key_data[1])) -				{ -					$key_data[1] = array($key_data[1]); -				} - -				if (strlen($table_name . $key_name) > 30) -				{ -					trigger_error("Index name '${table_name}_$key_name' on table '$table_name' is too long. The maximum is 30 characters.", E_USER_ERROR); -				} - -				switch ($dbms) -				{ -					case 'mysql_40': -					case 'mysql_41': -						$line .= ($key_data[0] == 'INDEX') ? "\tKEY" : ''; -						$line .= ($key_data[0] == 'UNIQUE') ? "\tUNIQUE" : ''; -						foreach ($key_data[1] as $key => $col_name) -						{ -							if (isset($modded_array[$col_name])) -							{ -								switch ($modded_array[$col_name]) -								{ -									case 'text': -									case 'blob': -										$key_data[1][$key] = $col_name . '(255)'; -									break; -								} -							} -						} -						$line .= ' ' . $key_name . ' (' . implode(', ', $key_data[1]) . "),\n"; -					break; - -					case 'firebird': -						$line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : ''; -						$line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : ''; - -						$line .= ' ' . $table_name . '_' . $key_name . ' ON ' . $table_name . '(' . implode(', ', $key_data[1]) . ");;\n"; -					break; - -					case 'mssql': -						$line .= ($key_data[0] == 'INDEX') ? 'CREATE  INDEX' : ''; -						$line .= ($key_data[0] == 'UNIQUE') ? 'CREATE  UNIQUE  INDEX' : ''; -						$line .= " [{$key_name}] ON [{$table_name}]([" . implode('], [', $key_data[1]) . "])\n"; -						$line .= "GO\n\n"; -					break; - -					case 'oracle': -						if ($key_data[0] == 'UNIQUE') -						{ -							continue; -						} - -						$line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : ''; - -						$line .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ")\n"; -						$line .= "/\n"; -					break; - -					case 'sqlite': -						$line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : ''; -						$line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : ''; - -						$line .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ");\n"; -					break; - -					case 'postgres': -						$line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : ''; -						$line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : ''; - -						$line .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ");\n"; -					break; -				} -			} -		} - -		switch ($dbms) -		{ -			case 'mysql_40': -				// Remove last line delimiter... -				$line = substr($line, 0, -2); -				$line .= "\n);\n\n"; -			break; - -			case 'mysql_41': -				// Remove last line delimiter... -				$line = substr($line, 0, -2); -				$line .= "\n) CHARACTER SET `utf8` COLLATE `utf8_bin`;\n\n"; -			break; - -			// Create Generator -			case 'firebird': -				if ($generator !== false) -				{ -					$line .= "\nCREATE GENERATOR {$table_name}_gen;;\n"; -					$line .= 'SET GENERATOR ' . $table_name . "_gen TO 0;;\n\n"; - -					$line .= 'CREATE TRIGGER t_' . $table_name . ' FOR ' . $table_name . "\n"; -					$line .= "BEFORE INSERT\nAS\nBEGIN\n"; -					$line .= "\tNEW.{$generator} = GEN_ID({$table_name}_gen, 1);\nEND;;\n\n"; -				} -			break; - -			case 'oracle': -				if ($generator !== false) -				{ -					$line .= "\nCREATE SEQUENCE {$table_name}_seq\n/\n\n"; - -					$line .= "CREATE OR REPLACE TRIGGER t_{$table_name}\n"; -					$line .= "BEFORE INSERT ON {$table_name}\n"; -					$line .= "FOR EACH ROW WHEN (\n"; -					$line .= "\tnew.{$generator} IS NULL OR new.{$generator} = 0\n"; -					$line .= ")\nBEGIN\n"; -					$line .= "\tSELECT {$table_name}_seq.nextval\n"; -					$line .= "\tINTO :new.{$generator}\n"; -					$line .= "\tFROM dual;\nEND;\n/\n\n"; -				} -			break; -		} - -		fwrite($fp, $line . "\n"); -	} - -	$line = ''; - -	// Write custom function at the end for some db's -	switch ($dbms) -	{ -		case 'mssql': -			// No need to do this, no transaction support for schema changes -			//$line = "\nCOMMIT\nGO\n\n"; -		break; - -		case 'sqlite': -			$line = "\nCOMMIT;"; -		break; - -		case 'postgres': -			$line = "\nCOMMIT;"; -		break; -	} - -	fwrite($fp, $line); -	fclose($fp); -} +include($phpbb_root_path . 'includes/constants.' . $phpEx); +require($phpbb_root_path . 'phpbb/class_loader.' . $phpEx); +$phpbb_class_loader = new \phpbb\class_loader('phpbb\\', "{$phpbb_root_path}phpbb/", $phpEx); +$phpbb_class_loader->register(); +$finder = new \phpbb\finder(new \phpbb\filesystem(), $phpbb_root_path); +$classes = $finder->core_path('phpbb/') +	->directory('/db/migration/data') +	->get_classes(); -/** -* Define the basic structure -* The format: -*		array('{TABLE_NAME}' => {TABLE_DATA}) -*		{TABLE_DATA}: -*			COLUMNS = array({column_name} = array({column_type}, {default}, {auto_increment})) -*			PRIMARY_KEY = {column_name(s)} -*			KEYS = array({key_name} = array({key_type}, {column_name(s)})), -* -*	Column Types: -*	INT:x		=> SIGNED int(x) -*	BINT		=> BIGINT -*	UINT		=> mediumint(8) UNSIGNED -*	UINT:x		=> int(x) UNSIGNED -*	TINT:x		=> tinyint(x) -*	USINT		=> smallint(4) UNSIGNED (for _order columns) -*	BOOL		=> tinyint(1) UNSIGNED -*	VCHAR		=> varchar(255) -*	CHAR:x		=> char(x) -*	XSTEXT_UNI	=> text for storing 100 characters (topic_title for example) -*	STEXT_UNI	=> text for storing 255 characters (normal input field with a max of 255 single-byte chars) - same as VCHAR_UNI -*	TEXT_UNI	=> text for storing 3000 characters (short text, descriptions, comments, etc.) -*	MTEXT_UNI	=> mediumtext (post text, large text) -*	VCHAR:x		=> varchar(x) -*	TIMESTAMP	=> int(11) UNSIGNED -*	DECIMAL		=> decimal number (5,2) -*	DECIMAL:	=> decimal number (x,2) -*	PDECIMAL	=> precision decimal number (6,3) -*	PDECIMAL:	=> precision decimal number (x,3) -*	VCHAR_UNI	=> varchar(255) BINARY -*	VCHAR_CI	=> varchar_ci for postgresql, others VCHAR -*/ -function get_schema_struct() -{ -	$schema_data = array(); - -	$schema_data['phpbb_attachments'] = array( -		'COLUMNS'		=> array( -			'attach_id'			=> array('UINT', NULL, 'auto_increment'), -			'post_msg_id'		=> array('UINT', 0), -			'topic_id'			=> array('UINT', 0), -			'in_message'		=> array('BOOL', 0), -			'poster_id'			=> array('UINT', 0), -			'is_orphan'			=> array('BOOL', 1), -			'physical_filename'	=> array('VCHAR', ''), -			'real_filename'		=> array('VCHAR', ''), -			'download_count'	=> array('UINT', 0), -			'attach_comment'	=> array('TEXT_UNI', ''), -			'extension'			=> array('VCHAR:100', ''), -			'mimetype'			=> array('VCHAR:100', ''), -			'filesize'			=> array('UINT:20', 0), -			'filetime'			=> array('TIMESTAMP', 0), -			'thumbnail'			=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'attach_id', -		'KEYS'			=> array( -			'filetime'			=> array('INDEX', 'filetime'), -			'post_msg_id'		=> array('INDEX', 'post_msg_id'), -			'topic_id'			=> array('INDEX', 'topic_id'), -			'poster_id'			=> array('INDEX', 'poster_id'), -			'is_orphan'			=> array('INDEX', 'is_orphan'), -		), -	); - -	$schema_data['phpbb_acl_groups'] = array( -		'COLUMNS'		=> array( -			'group_id'			=> array('UINT', 0), -			'forum_id'			=> array('UINT', 0), -			'auth_option_id'	=> array('UINT', 0), -			'auth_role_id'		=> array('UINT', 0), -			'auth_setting'		=> array('TINT:2', 0), -		), -		'KEYS'			=> array( -			'group_id'		=> array('INDEX', 'group_id'), -			'auth_opt_id'	=> array('INDEX', 'auth_option_id'), -			'auth_role_id'	=> array('INDEX', 'auth_role_id'), -		), -	); - -	$schema_data['phpbb_acl_options'] = array( -		'COLUMNS'		=> array( -			'auth_option_id'	=> array('UINT', NULL, 'auto_increment'), -			'auth_option'		=> array('VCHAR:50', ''), -			'is_global'			=> array('BOOL', 0), -			'is_local'			=> array('BOOL', 0), -			'founder_only'		=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'auth_option_id', -		'KEYS'			=> array( -			'auth_option'		=> array('UNIQUE', 'auth_option'), -		), -	); - -	$schema_data['phpbb_acl_roles'] = array( -		'COLUMNS'		=> array( -			'role_id'			=> array('UINT', NULL, 'auto_increment'), -			'role_name'			=> array('VCHAR_UNI', ''), -			'role_description'	=> array('TEXT_UNI', ''), -			'role_type'			=> array('VCHAR:10', ''), -			'role_order'		=> array('USINT', 0), -		), -		'PRIMARY_KEY'	=> 'role_id', -		'KEYS'			=> array( -			'role_type'			=> array('INDEX', 'role_type'), -			'role_order'		=> array('INDEX', 'role_order'), -		), -	); - -	$schema_data['phpbb_acl_roles_data'] = array( -		'COLUMNS'		=> array( -			'role_id'			=> array('UINT', 0), -			'auth_option_id'	=> array('UINT', 0), -			'auth_setting'		=> array('TINT:2', 0), -		), -		'PRIMARY_KEY'	=> array('role_id', 'auth_option_id'), -		'KEYS'			=> array( -			'ath_op_id'			=> array('INDEX', 'auth_option_id'), -		), -	); - -	$schema_data['phpbb_acl_users'] = array( -		'COLUMNS'		=> array( -			'user_id'			=> array('UINT', 0), -			'forum_id'			=> array('UINT', 0), -			'auth_option_id'	=> array('UINT', 0), -			'auth_role_id'		=> array('UINT', 0), -			'auth_setting'		=> array('TINT:2', 0), -		), -		'KEYS'			=> array( -			'user_id'			=> array('INDEX', 'user_id'), -			'auth_option_id'	=> array('INDEX', 'auth_option_id'), -			'auth_role_id'		=> array('INDEX', 'auth_role_id'), -		), -	); - -	$schema_data['phpbb_banlist'] = array( -		'COLUMNS'		=> array( -			'ban_id'			=> array('UINT', NULL, 'auto_increment'), -			'ban_userid'		=> array('UINT', 0), -			'ban_ip'			=> array('VCHAR:40', ''), -			'ban_email'			=> array('VCHAR_UNI:100', ''), -			'ban_start'			=> array('TIMESTAMP', 0), -			'ban_end'			=> array('TIMESTAMP', 0), -			'ban_exclude'		=> array('BOOL', 0), -			'ban_reason'		=> array('VCHAR_UNI', ''), -			'ban_give_reason'	=> array('VCHAR_UNI', ''), -		), -		'PRIMARY_KEY'			=> 'ban_id', -		'KEYS'			=> array( -			'ban_end'			=> array('INDEX', 'ban_end'), -			'ban_user'			=> array('INDEX', array('ban_userid', 'ban_exclude')), -			'ban_email'			=> array('INDEX', array('ban_email', 'ban_exclude')), -			'ban_ip'			=> array('INDEX', array('ban_ip', 'ban_exclude')), -		), -	); - -	$schema_data['phpbb_bbcodes'] = array( -		'COLUMNS'		=> array( -			'bbcode_id'				=> array('USINT', 0), -			'bbcode_tag'			=> array('VCHAR:16', ''), -			'bbcode_helpline'		=> array('VCHAR_UNI', ''), -			'display_on_posting'	=> array('BOOL', 0), -			'bbcode_match'			=> array('TEXT_UNI', ''), -			'bbcode_tpl'			=> array('MTEXT_UNI', ''), -			'first_pass_match'		=> array('MTEXT_UNI', ''), -			'first_pass_replace'	=> array('MTEXT_UNI', ''), -			'second_pass_match'		=> array('MTEXT_UNI', ''), -			'second_pass_replace'	=> array('MTEXT_UNI', ''), -		), -		'PRIMARY_KEY'	=> 'bbcode_id', -		'KEYS'			=> array( -			'display_on_post'		=> array('INDEX', 'display_on_posting'), -		), -	); - -	$schema_data['phpbb_bookmarks'] = array( -		'COLUMNS'		=> array( -			'topic_id'			=> array('UINT', 0), -			'user_id'			=> array('UINT', 0), -		), -		'PRIMARY_KEY'			=> array('topic_id', 'user_id'), -	); - -	$schema_data['phpbb_bots'] = array( -		'COLUMNS'		=> array( -			'bot_id'			=> array('UINT', NULL, 'auto_increment'), -			'bot_active'		=> array('BOOL', 1), -			'bot_name'			=> array('STEXT_UNI', ''), -			'user_id'			=> array('UINT', 0), -			'bot_agent'			=> array('VCHAR', ''), -			'bot_ip'			=> array('VCHAR', ''), -		), -		'PRIMARY_KEY'	=> 'bot_id', -		'KEYS'			=> array( -			'bot_active'		=> array('INDEX', 'bot_active'), -		), -	); - -	$schema_data['phpbb_config'] = array( -		'COLUMNS'		=> array( -			'config_name'		=> array('VCHAR', ''), -			'config_value'		=> array('VCHAR_UNI', ''), -			'is_dynamic'		=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'config_name', -		'KEYS'			=> array( -			'is_dynamic'		=> array('INDEX', 'is_dynamic'), -		), -	); - -	$schema_data['phpbb_confirm'] = array( -		'COLUMNS'		=> array( -			'confirm_id'		=> array('CHAR:32', ''), -			'session_id'		=> array('CHAR:32', ''), -			'confirm_type'		=> array('TINT:3', 0), -			'code'				=> array('VCHAR:8', ''), -			'seed'				=> array('UINT:10', 0), -			'attempts'			=> array('UINT', 0), -		), -		'PRIMARY_KEY'	=> array('session_id', 'confirm_id'), -		'KEYS'			=> array( -			'confirm_type'		=> array('INDEX', 'confirm_type'), -		), -	); - -	$schema_data['phpbb_disallow'] = array( -		'COLUMNS'		=> array( -			'disallow_id'		=> array('UINT', NULL, 'auto_increment'), -			'disallow_username'	=> array('VCHAR_UNI:255', ''), -		), -		'PRIMARY_KEY'	=> 'disallow_id', -	); - -	$schema_data['phpbb_drafts'] = array( -		'COLUMNS'		=> array( -			'draft_id'			=> array('UINT', NULL, 'auto_increment'), -			'user_id'			=> array('UINT', 0), -			'topic_id'			=> array('UINT', 0), -			'forum_id'			=> array('UINT', 0), -			'save_time'			=> array('TIMESTAMP', 0), -			'draft_subject'		=> array('STEXT_UNI', ''), -			'draft_message'		=> array('MTEXT_UNI', ''), -		), -		'PRIMARY_KEY'	=> 'draft_id', -		'KEYS'			=> array( -			'save_time'			=> array('INDEX', 'save_time'), -		), -	); - -	$schema_data['phpbb_extensions'] = array( -		'COLUMNS'		=> array( -			'extension_id'		=> array('UINT', NULL, 'auto_increment'), -			'group_id'			=> array('UINT', 0), -			'extension'			=> array('VCHAR:100', ''), -		), -		'PRIMARY_KEY'	=> 'extension_id', -	); - -	$schema_data['phpbb_extension_groups'] = array( -		'COLUMNS'		=> array( -			'group_id'			=> array('UINT', NULL, 'auto_increment'), -			'group_name'		=> array('VCHAR_UNI', ''), -			'cat_id'			=> array('TINT:2', 0), -			'allow_group'		=> array('BOOL', 0), -			'download_mode'		=> array('BOOL', 1), -			'upload_icon'		=> array('VCHAR', ''), -			'max_filesize'		=> array('UINT:20', 0), -			'allowed_forums'	=> array('TEXT', ''), -			'allow_in_pm'		=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'group_id', -	); - -	$schema_data['phpbb_forums'] = array( -		'COLUMNS'		=> array( -			'forum_id'				=> array('UINT', NULL, 'auto_increment'), -			'parent_id'				=> array('UINT', 0), -			'left_id'				=> array('UINT', 0), -			'right_id'				=> array('UINT', 0), -			'forum_parents'			=> array('MTEXT', ''), -			'forum_name'			=> array('STEXT_UNI', ''), -			'forum_desc'			=> array('TEXT_UNI', ''), -			'forum_desc_bitfield'	=> array('VCHAR:255', ''), -			'forum_desc_options'	=> array('UINT:11', 7), -			'forum_desc_uid'		=> array('VCHAR:8', ''), -			'forum_link'			=> array('VCHAR_UNI', ''), -			'forum_password'		=> array('VCHAR_UNI:40', ''), -			'forum_style'			=> array('UINT', 0), -			'forum_image'			=> array('VCHAR', ''), -			'forum_rules'			=> array('TEXT_UNI', ''), -			'forum_rules_link'		=> array('VCHAR_UNI', ''), -			'forum_rules_bitfield'	=> array('VCHAR:255', ''), -			'forum_rules_options'	=> array('UINT:11', 7), -			'forum_rules_uid'		=> array('VCHAR:8', ''), -			'forum_topics_per_page'	=> array('TINT:4', 0), -			'forum_type'			=> array('TINT:4', 0), -			'forum_status'			=> array('TINT:4', 0), -			'forum_posts'			=> array('UINT', 0), -			'forum_topics'			=> array('UINT', 0), -			'forum_topics_real'		=> array('UINT', 0), -			'forum_last_post_id'	=> array('UINT', 0), -			'forum_last_poster_id'	=> array('UINT', 0), -			'forum_last_post_subject' => array('STEXT_UNI', ''), -			'forum_last_post_time'	=> array('TIMESTAMP', 0), -			'forum_last_poster_name'=> array('VCHAR_UNI', ''), -			'forum_last_poster_colour'=> array('VCHAR:6', ''), -			'forum_flags'			=> array('TINT:4', 32), -			'forum_options'			=> array('UINT:20', 0), -			'display_subforum_list'	=> array('BOOL', 1), -			'display_on_index'		=> array('BOOL', 1), -			'enable_indexing'		=> array('BOOL', 1), -			'enable_icons'			=> array('BOOL', 1), -			'enable_prune'			=> array('BOOL', 0), -			'prune_next'			=> array('TIMESTAMP', 0), -			'prune_days'			=> array('UINT', 0), -			'prune_viewed'			=> array('UINT', 0), -			'prune_freq'			=> array('UINT', 0), -		), -		'PRIMARY_KEY'	=> 'forum_id', -		'KEYS'			=> array( -			'left_right_id'			=> array('INDEX', array('left_id', 'right_id')), -			'forum_lastpost_id'		=> array('INDEX', 'forum_last_post_id'), -		), -	); - -	$schema_data['phpbb_forums_access'] = array( -		'COLUMNS'		=> array( -			'forum_id'				=> array('UINT', 0), -			'user_id'				=> array('UINT', 0), -			'session_id'			=> array('CHAR:32', ''), -		), -		'PRIMARY_KEY'	=> array('forum_id', 'user_id', 'session_id'), -	); - -	$schema_data['phpbb_forums_track'] = array( -		'COLUMNS'		=> array( -			'user_id'				=> array('UINT', 0), -			'forum_id'				=> array('UINT', 0), -			'mark_time'				=> array('TIMESTAMP', 0), -		), -		'PRIMARY_KEY'	=> array('user_id', 'forum_id'), -	); - -	$schema_data['phpbb_forums_watch'] = array( -		'COLUMNS'		=> array( -			'forum_id'				=> array('UINT', 0), -			'user_id'				=> array('UINT', 0), -			'notify_status'			=> array('BOOL', 0), -		), -		'KEYS'			=> array( -			'forum_id'				=> array('INDEX', 'forum_id'), -			'user_id'				=> array('INDEX', 'user_id'), -			'notify_stat'			=> array('INDEX', 'notify_status'), -		), -	); - -	$schema_data['phpbb_groups'] = array( -		'COLUMNS'		=> array( -			'group_id'				=> array('UINT', NULL, 'auto_increment'), -			'group_type'			=> array('TINT:4', 1), -			'group_founder_manage'	=> array('BOOL', 0), -			'group_skip_auth'		=> array('BOOL', 0), -			'group_name'			=> array('VCHAR_CI', ''), -			'group_desc'			=> array('TEXT_UNI', ''), -			'group_desc_bitfield'	=> array('VCHAR:255', ''), -			'group_desc_options'	=> array('UINT:11', 7), -			'group_desc_uid'		=> array('VCHAR:8', ''), -			'group_display'			=> array('BOOL', 0), -			'group_avatar'			=> array('VCHAR', ''), -			'group_avatar_type'		=> array('TINT:2', 0), -			'group_avatar_width'	=> array('USINT', 0), -			'group_avatar_height'	=> array('USINT', 0), -			'group_rank'			=> array('UINT', 0), -			'group_colour'			=> array('VCHAR:6', ''), -			'group_sig_chars'		=> array('UINT', 0), -			'group_receive_pm'		=> array('BOOL', 0), -			'group_message_limit'	=> array('UINT', 0), -			'group_max_recipients'	=> array('UINT', 0), -			'group_legend'			=> array('BOOL', 1), -		), -		'PRIMARY_KEY'	=> 'group_id', -		'KEYS'			=> array( -			'group_legend_name'		=> array('INDEX', array('group_legend', 'group_name')), -		), -	); - -	$schema_data['phpbb_icons'] = array( -		'COLUMNS'		=> array( -			'icons_id'				=> array('UINT', NULL, 'auto_increment'), -			'icons_url'				=> array('VCHAR', ''), -			'icons_width'			=> array('TINT:4', 0), -			'icons_height'			=> array('TINT:4', 0), -			'icons_order'			=> array('UINT', 0), -			'display_on_posting'	=> array('BOOL', 1), -		), -		'PRIMARY_KEY'	=> 'icons_id', -		'KEYS'			=> array( -			'display_on_posting'	=> array('INDEX', 'display_on_posting'), -		), -	); - -	$schema_data['phpbb_lang'] = array( -		'COLUMNS'		=> array( -			'lang_id'				=> array('TINT:4', NULL, 'auto_increment'), -			'lang_iso'				=> array('VCHAR:30', ''), -			'lang_dir'				=> array('VCHAR:30', ''), -			'lang_english_name'		=> array('VCHAR_UNI:100', ''), -			'lang_local_name'		=> array('VCHAR_UNI:255', ''), -			'lang_author'			=> array('VCHAR_UNI:255', ''), -		), -		'PRIMARY_KEY'	=> 'lang_id', -		'KEYS'			=> array( -			'lang_iso'				=> array('INDEX', 'lang_iso'), -		), -	); - -	$schema_data['phpbb_log'] = array( -		'COLUMNS'		=> array( -			'log_id'				=> array('UINT', NULL, 'auto_increment'), -			'log_type'				=> array('TINT:4', 0), -			'user_id'				=> array('UINT', 0), -			'forum_id'				=> array('UINT', 0), -			'topic_id'				=> array('UINT', 0), -			'reportee_id'			=> array('UINT', 0), -			'log_ip'				=> array('VCHAR:40', ''), -			'log_time'				=> array('TIMESTAMP', 0), -			'log_operation'			=> array('TEXT_UNI', ''), -			'log_data'				=> array('MTEXT_UNI', ''), -		), -		'PRIMARY_KEY'	=> 'log_id', -		'KEYS'			=> array( -			'log_type'				=> array('INDEX', 'log_type'), -			'forum_id'				=> array('INDEX', 'forum_id'), -			'topic_id'				=> array('INDEX', 'topic_id'), -			'reportee_id'			=> array('INDEX', 'reportee_id'), -			'user_id'				=> array('INDEX', 'user_id'), -		), -	); - -	$schema_data['phpbb_login_attempts'] = array( -		'COLUMNS'		=> array( -			'attempt_ip'			=> array('VCHAR:40', ''), -			'attempt_browser'		=> array('VCHAR:150', ''), -			'attempt_forwarded_for'	=> array('VCHAR:255', ''), -			'attempt_time'			=> array('TIMESTAMP', 0), -			'user_id'				=> array('UINT', 0), -			'username'				=> array('VCHAR_UNI:255', 0), -			'username_clean'		=> array('VCHAR_CI', 0), -		), -		'KEYS'			=> array( -			'att_ip'				=> array('INDEX', array('attempt_ip', 'attempt_time')), -			'att_for'		=> array('INDEX', array('attempt_forwarded_for', 'attempt_time')), -			'att_time'				=> array('INDEX', array('attempt_time')), -			'user_id'					=> array('INDEX', 'user_id'), -		), -	); - -	$schema_data['phpbb_moderator_cache'] = array( -		'COLUMNS'		=> array( -			'forum_id'				=> array('UINT', 0), -			'user_id'				=> array('UINT', 0), -			'username'				=> array('VCHAR_UNI:255', ''), -			'group_id'				=> array('UINT', 0), -			'group_name'			=> array('VCHAR_UNI', ''), -			'display_on_index'		=> array('BOOL', 1), -		), -		'KEYS'			=> array( -			'disp_idx'				=> array('INDEX', 'display_on_index'), -			'forum_id'				=> array('INDEX', 'forum_id'), -		), -	); - -	$schema_data['phpbb_modules'] = array( -		'COLUMNS'		=> array( -			'module_id'				=> array('UINT', NULL, 'auto_increment'), -			'module_enabled'		=> array('BOOL', 1), -			'module_display'		=> array('BOOL', 1), -			'module_basename'		=> array('VCHAR', ''), -			'module_class'			=> array('VCHAR:10', ''), -			'parent_id'				=> array('UINT', 0), -			'left_id'				=> array('UINT', 0), -			'right_id'				=> array('UINT', 0), -			'module_langname'		=> array('VCHAR', ''), -			'module_mode'			=> array('VCHAR', ''), -			'module_auth'			=> array('VCHAR', ''), -		), -		'PRIMARY_KEY'	=> 'module_id', -		'KEYS'			=> array( -			'left_right_id'			=> array('INDEX', array('left_id', 'right_id')), -			'module_enabled'		=> array('INDEX', 'module_enabled'), -			'class_left_id'			=> array('INDEX', array('module_class', 'left_id')), -		), -	); - -	$schema_data['phpbb_poll_options'] = array( -		'COLUMNS'		=> array( -			'poll_option_id'		=> array('TINT:4', 0), -			'topic_id'				=> array('UINT', 0), -			'poll_option_text'		=> array('TEXT_UNI', ''), -			'poll_option_total'		=> array('UINT', 0), -		), -		'KEYS'			=> array( -			'poll_opt_id'			=> array('INDEX', 'poll_option_id'), -			'topic_id'				=> array('INDEX', 'topic_id'), -		), -	); - -	$schema_data['phpbb_poll_votes'] = array( -		'COLUMNS'		=> array( -			'topic_id'				=> array('UINT', 0), -			'poll_option_id'		=> array('TINT:4', 0), -			'vote_user_id'			=> array('UINT', 0), -			'vote_user_ip'			=> array('VCHAR:40', ''), -		), -		'KEYS'			=> array( -			'topic_id'				=> array('INDEX', 'topic_id'), -			'vote_user_id'			=> array('INDEX', 'vote_user_id'), -			'vote_user_ip'			=> array('INDEX', 'vote_user_ip'), -		), -	); - -	$schema_data['phpbb_posts'] = array( -		'COLUMNS'		=> array( -			'post_id'				=> array('UINT', NULL, 'auto_increment'), -			'topic_id'				=> array('UINT', 0), -			'forum_id'				=> array('UINT', 0), -			'poster_id'				=> array('UINT', 0), -			'icon_id'				=> array('UINT', 0), -			'poster_ip'				=> array('VCHAR:40', ''), -			'post_time'				=> array('TIMESTAMP', 0), -			'post_approved'			=> array('BOOL', 1), -			'post_reported'			=> array('BOOL', 0), -			'enable_bbcode'			=> array('BOOL', 1), -			'enable_smilies'		=> array('BOOL', 1), -			'enable_magic_url'		=> array('BOOL', 1), -			'enable_sig'			=> array('BOOL', 1), -			'post_username'			=> array('VCHAR_UNI:255', ''), -			'post_subject'			=> array('STEXT_UNI', '', 'true_sort'), -			'post_text'				=> array('MTEXT_UNI', ''), -			'post_checksum'			=> array('VCHAR:32', ''), -			'post_attachment'		=> array('BOOL', 0), -			'bbcode_bitfield'		=> array('VCHAR:255', ''), -			'bbcode_uid'			=> array('VCHAR:8', ''), -			'post_postcount'		=> array('BOOL', 1), -			'post_edit_time'		=> array('TIMESTAMP', 0), -			'post_edit_reason'		=> array('STEXT_UNI', ''), -			'post_edit_user'		=> array('UINT', 0), -			'post_edit_count'		=> array('USINT', 0), -			'post_edit_locked'		=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'post_id', -		'KEYS'			=> array( -			'forum_id'				=> array('INDEX', 'forum_id'), -			'topic_id'				=> array('INDEX', 'topic_id'), -			'poster_ip'				=> array('INDEX', 'poster_ip'), -			'poster_id'				=> array('INDEX', 'poster_id'), -			'post_approved'			=> array('INDEX', 'post_approved'), -			'post_username'			=> array('INDEX', 'post_username'), -			'tid_post_time'			=> array('INDEX', array('topic_id', 'post_time')), -		), -	); - -	$schema_data['phpbb_privmsgs'] = array( -		'COLUMNS'		=> array( -			'msg_id'				=> array('UINT', NULL, 'auto_increment'), -			'root_level'			=> array('UINT', 0), -			'author_id'				=> array('UINT', 0), -			'icon_id'				=> array('UINT', 0), -			'author_ip'				=> array('VCHAR:40', ''), -			'message_time'			=> array('TIMESTAMP', 0), -			'enable_bbcode'			=> array('BOOL', 1), -			'enable_smilies'		=> array('BOOL', 1), -			'enable_magic_url'		=> array('BOOL', 1), -			'enable_sig'			=> array('BOOL', 1), -			'message_subject'		=> array('STEXT_UNI', ''), -			'message_text'			=> array('MTEXT_UNI', ''), -			'message_edit_reason'	=> array('STEXT_UNI', ''), -			'message_edit_user'		=> array('UINT', 0), -			'message_attachment'	=> array('BOOL', 0), -			'bbcode_bitfield'		=> array('VCHAR:255', ''), -			'bbcode_uid'			=> array('VCHAR:8', ''), -			'message_edit_time'		=> array('TIMESTAMP', 0), -			'message_edit_count'	=> array('USINT', 0), -			'to_address'			=> array('TEXT_UNI', ''), -			'bcc_address'			=> array('TEXT_UNI', ''), -			'message_reported'		=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'msg_id', -		'KEYS'			=> array( -			'author_ip'				=> array('INDEX', 'author_ip'), -			'message_time'			=> array('INDEX', 'message_time'), -			'author_id'				=> array('INDEX', 'author_id'), -			'root_level'			=> array('INDEX', 'root_level'), -		), -	); - -	$schema_data['phpbb_privmsgs_folder'] = array( -		'COLUMNS'		=> array( -			'folder_id'				=> array('UINT', NULL, 'auto_increment'), -			'user_id'				=> array('UINT', 0), -			'folder_name'			=> array('VCHAR_UNI', ''), -			'pm_count'				=> array('UINT', 0), -		), -		'PRIMARY_KEY'	=> 'folder_id', -		'KEYS'			=> array( -			'user_id'				=> array('INDEX', 'user_id'), -		), -	); - -	$schema_data['phpbb_privmsgs_rules'] = array( -		'COLUMNS'		=> array( -			'rule_id'				=> array('UINT', NULL, 'auto_increment'), -			'user_id'				=> array('UINT', 0), -			'rule_check'			=> array('UINT', 0), -			'rule_connection'		=> array('UINT', 0), -			'rule_string'			=> array('VCHAR_UNI', ''), -			'rule_user_id'			=> array('UINT', 0), -			'rule_group_id'			=> array('UINT', 0), -			'rule_action'			=> array('UINT', 0), -			'rule_folder_id'		=> array('INT:11', 0), -		), -		'PRIMARY_KEY'	=> 'rule_id', -		'KEYS'			=> array( -			'user_id'				=> array('INDEX', 'user_id'), -		), -	); - -	$schema_data['phpbb_privmsgs_to'] = array( -		'COLUMNS'		=> array( -			'msg_id'				=> array('UINT', 0), -			'user_id'				=> array('UINT', 0), -			'author_id'				=> array('UINT', 0), -			'pm_deleted'			=> array('BOOL', 0), -			'pm_new'				=> array('BOOL', 1), -			'pm_unread'				=> array('BOOL', 1), -			'pm_replied'			=> array('BOOL', 0), -			'pm_marked'				=> array('BOOL', 0), -			'pm_forwarded'			=> array('BOOL', 0), -			'folder_id'				=> array('INT:11', 0), -		), -		'KEYS'			=> array( -			'msg_id'				=> array('INDEX', 'msg_id'), -			'author_id'				=> array('INDEX', 'author_id'), -			'usr_flder_id'			=> array('INDEX', array('user_id', 'folder_id')), -		), -	); - -	$schema_data['phpbb_profile_fields'] = array( -		'COLUMNS'		=> array( -			'field_id'				=> array('UINT', NULL, 'auto_increment'), -			'field_name'			=> array('VCHAR_UNI', ''), -			'field_type'			=> array('TINT:4', 0), -			'field_ident'			=> array('VCHAR:20', ''), -			'field_length'			=> array('VCHAR:20', ''), -			'field_minlen'			=> array('VCHAR', ''), -			'field_maxlen'			=> array('VCHAR', ''), -			'field_novalue'			=> array('VCHAR_UNI', ''), -			'field_default_value'	=> array('VCHAR_UNI', ''), -			'field_validation'		=> array('VCHAR_UNI:20', ''), -			'field_required'		=> array('BOOL', 0), -			'field_show_novalue'	=> array('BOOL', 0), -			'field_show_on_reg'		=> array('BOOL', 0), -			'field_show_on_vt'		=> array('BOOL', 0), -			'field_show_profile'	=> array('BOOL', 0), -			'field_hide'			=> array('BOOL', 0), -			'field_no_view'			=> array('BOOL', 0), -			'field_active'			=> array('BOOL', 0), -			'field_order'			=> array('UINT', 0), -		), -		'PRIMARY_KEY'	=> 'field_id', -		'KEYS'			=> array( -			'fld_type'			=> array('INDEX', 'field_type'), -			'fld_ordr'			=> array('INDEX', 'field_order'), -		), -	); - -	$schema_data['phpbb_profile_fields_data'] = array( -		'COLUMNS'		=> array( -			'user_id'				=> array('UINT', 0), -		), -		'PRIMARY_KEY'	=> 'user_id', -	); - -	$schema_data['phpbb_profile_fields_lang'] = array( -		'COLUMNS'		=> array( -			'field_id'				=> array('UINT', 0), -			'lang_id'				=> array('UINT', 0), -			'option_id'				=> array('UINT', 0), -			'field_type'			=> array('TINT:4', 0), -			'lang_value'			=> array('VCHAR_UNI', ''), -		), -		'PRIMARY_KEY'	=> array('field_id', 'lang_id', 'option_id'), -	); - -	$schema_data['phpbb_profile_lang'] = array( -		'COLUMNS'		=> array( -			'field_id'				=> array('UINT', 0), -			'lang_id'				=> array('UINT', 0), -			'lang_name'				=> array('VCHAR_UNI', ''), -			'lang_explain'			=> array('TEXT_UNI', ''), -			'lang_default_value'	=> array('VCHAR_UNI', ''), -		), -		'PRIMARY_KEY'	=> array('field_id', 'lang_id'), -	); - -	$schema_data['phpbb_ranks'] = array( -		'COLUMNS'		=> array( -			'rank_id'				=> array('UINT', NULL, 'auto_increment'), -			'rank_title'			=> array('VCHAR_UNI', ''), -			'rank_min'				=> array('UINT', 0), -			'rank_special'			=> array('BOOL', 0), -			'rank_image'			=> array('VCHAR', ''), -		), -		'PRIMARY_KEY'	=> 'rank_id', -	); - -	$schema_data['phpbb_reports'] = array( -		'COLUMNS'		=> array( -			'report_id'				=> array('UINT', NULL, 'auto_increment'), -			'reason_id'				=> array('USINT', 0), -			'post_id'				=> array('UINT', 0), -			'pm_id'					=> array('UINT', 0), -			'user_id'				=> array('UINT', 0), -			'user_notify'			=> array('BOOL', 0), -			'report_closed'			=> array('BOOL', 0), -			'report_time'			=> array('TIMESTAMP', 0), -			'report_text'			=> array('MTEXT_UNI', ''), -		), -		'PRIMARY_KEY'	=> 'report_id', -		'KEYS'			=> array( -			'post_id'			=> array('INDEX', 'post_id'), -			'pm_id'				=> array('INDEX', 'pm_id'), -		), -	); - -	$schema_data['phpbb_reports_reasons'] = array( -		'COLUMNS'		=> array( -			'reason_id'				=> array('USINT', NULL, 'auto_increment'), -			'reason_title'			=> array('VCHAR_UNI', ''), -			'reason_description'	=> array('MTEXT_UNI', ''), -			'reason_order'			=> array('USINT', 0), -		), -		'PRIMARY_KEY'	=> 'reason_id', -	); - -	$schema_data['phpbb_search_results'] = array( -		'COLUMNS'		=> array( -			'search_key'			=> array('VCHAR:32', ''), -			'search_time'			=> array('TIMESTAMP', 0), -			'search_keywords'		=> array('MTEXT_UNI', ''), -			'search_authors'		=> array('MTEXT', ''), -		), -		'PRIMARY_KEY'	=> 'search_key', -	); - -	$schema_data['phpbb_search_wordlist'] = array( -		'COLUMNS'		=> array( -			'word_id'			=> array('UINT', NULL, 'auto_increment'), -			'word_text'			=> array('VCHAR_UNI', ''), -			'word_common'		=> array('BOOL', 0), -			'word_count'		=> array('UINT', 0), -		), -		'PRIMARY_KEY'	=> 'word_id', -		'KEYS'			=> array( -			'wrd_txt'			=> array('UNIQUE', 'word_text'), -			'wrd_cnt'			=> array('INDEX', 'word_count'), -		), -	); - -	$schema_data['phpbb_search_wordmatch'] = array( -		'COLUMNS'		=> array( -			'post_id'			=> array('UINT', 0), -			'word_id'			=> array('UINT', 0), -			'title_match'		=> array('BOOL', 0), -		), -		'KEYS'			=> array( -			'unq_mtch'			=> array('UNIQUE', array('word_id', 'post_id', 'title_match')), -			'word_id'			=> array('INDEX', 'word_id'), -			'post_id'			=> array('INDEX', 'post_id'), -		), -	); - -	$schema_data['phpbb_sessions'] = array( -		'COLUMNS'		=> array( -			'session_id'			=> array('CHAR:32', ''), -			'session_user_id'		=> array('UINT', 0), -			'session_forum_id'		=> array('UINT', 0), -			'session_last_visit'	=> array('TIMESTAMP', 0), -			'session_start'			=> array('TIMESTAMP', 0), -			'session_time'			=> array('TIMESTAMP', 0), -			'session_ip'			=> array('VCHAR:40', ''), -			'session_browser'		=> array('VCHAR:150', ''), -			'session_forwarded_for'	=> array('VCHAR:255', ''), -			'session_page'			=> array('VCHAR_UNI', ''), -			'session_viewonline'	=> array('BOOL', 1), -			'session_autologin'		=> array('BOOL', 0), -			'session_admin'			=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'session_id', -		'KEYS'			=> array( -			'session_time'		=> array('INDEX', 'session_time'), -			'session_user_id'	=> array('INDEX', 'session_user_id'), -			'session_fid'		=> array('INDEX', 'session_forum_id'), -		), -	); - -	$schema_data['phpbb_sessions_keys'] = array( -		'COLUMNS'		=> array( -			'key_id'			=> array('CHAR:32', ''), -			'user_id'			=> array('UINT', 0), -			'last_ip'			=> array('VCHAR:40', ''), -			'last_login'		=> array('TIMESTAMP', 0), -		), -		'PRIMARY_KEY'	=> array('key_id', 'user_id'), -		'KEYS'			=> array( -			'last_login'		=> array('INDEX', 'last_login'), -		), -	); - -	$schema_data['phpbb_sitelist'] = array( -		'COLUMNS'		=> array( -			'site_id'		=> array('UINT', NULL, 'auto_increment'), -			'site_ip'		=> array('VCHAR:40', ''), -			'site_hostname'	=> array('VCHAR', ''), -			'ip_exclude'	=> array('BOOL', 0), -		), -		'PRIMARY_KEY'		=> 'site_id', -	); - -	$schema_data['phpbb_smilies'] = array( -		'COLUMNS'		=> array( -			'smiley_id'			=> array('UINT', NULL, 'auto_increment'), -			// We may want to set 'code' to VCHAR:50 or check if unicode support is possible... at the moment only ASCII characters are allowed. -			'code'				=> array('VCHAR_UNI:50', ''), -			'emotion'			=> array('VCHAR_UNI:50', ''), -			'smiley_url'		=> array('VCHAR:50', ''), -			'smiley_width'		=> array('USINT', 0), -			'smiley_height'		=> array('USINT', 0), -			'smiley_order'		=> array('UINT', 0), -			'display_on_posting'=> array('BOOL', 1), -		), -		'PRIMARY_KEY'	=> 'smiley_id', -		'KEYS'			=> array( -			'display_on_post'		=> array('INDEX', 'display_on_posting'), -		), -	); - -	$schema_data['phpbb_styles'] = array( -		'COLUMNS'		=> array( -			'style_id'				=> array('UINT', NULL, 'auto_increment'), -			'style_name'			=> array('VCHAR_UNI:255', ''), -			'style_copyright'		=> array('VCHAR_UNI', ''), -			'style_active'			=> array('BOOL', 1), -			'template_id'			=> array('UINT', 0), -			'theme_id'				=> array('UINT', 0), -			'imageset_id'			=> array('UINT', 0), -		), -		'PRIMARY_KEY'	=> 'style_id', -		'KEYS'			=> array( -			'style_name'		=> array('UNIQUE', 'style_name'), -			'template_id'		=> array('INDEX', 'template_id'), -			'theme_id'			=> array('INDEX', 'theme_id'), -			'imageset_id'		=> array('INDEX', 'imageset_id'), -		), -	); - -	$schema_data['phpbb_styles_template'] = array( -		'COLUMNS'		=> array( -			'template_id'			=> array('UINT', NULL, 'auto_increment'), -			'template_name'			=> array('VCHAR_UNI:255', ''), -			'template_copyright'	=> array('VCHAR_UNI', ''), -			'template_path'			=> array('VCHAR:100', ''), -			'bbcode_bitfield'		=> array('VCHAR:255', 'kNg='), -			'template_storedb'		=> array('BOOL', 0), -			'template_inherits_id'		=> array('UINT:4', 0), -			'template_inherit_path'		=> array('VCHAR', ''), -		), -		'PRIMARY_KEY'	=> 'template_id', -		'KEYS'			=> array( -			'tmplte_nm'				=> array('UNIQUE', 'template_name'), -		), -	); - -	$schema_data['phpbb_styles_template_data'] = array( -		'COLUMNS'		=> array( -			'template_id'			=> array('UINT', 0), -			'template_filename'		=> array('VCHAR:100', ''), -			'template_included'		=> array('TEXT', ''), -			'template_mtime'		=> array('TIMESTAMP', 0), -			'template_data'			=> array('MTEXT_UNI', ''), -		), -		'KEYS'			=> array( -			'tid'					=> array('INDEX', 'template_id'), -			'tfn'					=> array('INDEX', 'template_filename'), -		), -	); - -	$schema_data['phpbb_styles_theme'] = array( -		'COLUMNS'		=> array( -			'theme_id'				=> array('UINT', NULL, 'auto_increment'), -			'theme_name'			=> array('VCHAR_UNI:255', ''), -			'theme_copyright'		=> array('VCHAR_UNI', ''), -			'theme_path'			=> array('VCHAR:100', ''), -			'theme_storedb'			=> array('BOOL', 0), -			'theme_mtime'			=> array('TIMESTAMP', 0), -			'theme_data'			=> array('MTEXT_UNI', ''), -		), -		'PRIMARY_KEY'	=> 'theme_id', -		'KEYS'			=> array( -			'theme_name'		=> array('UNIQUE', 'theme_name'), -		), -	); - -	$schema_data['phpbb_styles_imageset'] = array( -		'COLUMNS'		=> array( -			'imageset_id'				=> array('UINT', NULL, 'auto_increment'), -			'imageset_name'				=> array('VCHAR_UNI:255', ''), -			'imageset_copyright'		=> array('VCHAR_UNI', ''), -			'imageset_path'				=> array('VCHAR:100', ''), -		), -		'PRIMARY_KEY'		=> 'imageset_id', -		'KEYS'				=> array( -			'imgset_nm'			=> array('UNIQUE', 'imageset_name'), -		), -	); - -	$schema_data['phpbb_styles_imageset_data'] = array( -		'COLUMNS'		=> array( -			'image_id'				=> array('UINT', NULL, 'auto_increment'), -			'image_name'			=> array('VCHAR:200', ''), -			'image_filename'		=> array('VCHAR:200', ''), -			'image_lang'			=> array('VCHAR:30', ''), -			'image_height'			=> array('USINT', 0), -			'image_width'			=> array('USINT', 0), -			'imageset_id'			=> array('UINT', 0), -		), -		'PRIMARY_KEY'		=> 'image_id', -		'KEYS'				=> array( -			'i_d'			=> array('INDEX', 'imageset_id'), -		), -	); - -	$schema_data['phpbb_topics'] = array( -		'COLUMNS'		=> array( -			'topic_id'					=> array('UINT', NULL, 'auto_increment'), -			'forum_id'					=> array('UINT', 0), -			'icon_id'					=> array('UINT', 0), -			'topic_attachment'			=> array('BOOL', 0), -			'topic_approved'			=> array('BOOL', 1), -			'topic_reported'			=> array('BOOL', 0), -			'topic_title'				=> array('STEXT_UNI', '', 'true_sort'), -			'topic_poster'				=> array('UINT', 0), -			'topic_time'				=> array('TIMESTAMP', 0), -			'topic_time_limit'			=> array('TIMESTAMP', 0), -			'topic_views'				=> array('UINT', 0), -			'topic_replies'				=> array('UINT', 0), -			'topic_replies_real'		=> array('UINT', 0), -			'topic_status'				=> array('TINT:3', 0), -			'topic_type'				=> array('TINT:3', 0), -			'topic_first_post_id'		=> array('UINT', 0), -			'topic_first_poster_name'	=> array('VCHAR_UNI', ''), -			'topic_first_poster_colour'	=> array('VCHAR:6', ''), -			'topic_last_post_id'		=> array('UINT', 0), -			'topic_last_poster_id'		=> array('UINT', 0), -			'topic_last_poster_name'	=> array('VCHAR_UNI', ''), -			'topic_last_poster_colour'	=> array('VCHAR:6', ''), -			'topic_last_post_subject'	=> array('STEXT_UNI', ''), -			'topic_last_post_time'		=> array('TIMESTAMP', 0), -			'topic_last_view_time'		=> array('TIMESTAMP', 0), -			'topic_moved_id'			=> array('UINT', 0), -			'topic_bumped'				=> array('BOOL', 0), -			'topic_bumper'				=> array('UINT', 0), -			'poll_title'				=> array('STEXT_UNI', ''), -			'poll_start'				=> array('TIMESTAMP', 0), -			'poll_length'				=> array('TIMESTAMP', 0), -			'poll_max_options'			=> array('TINT:4', 1), -			'poll_last_vote'			=> array('TIMESTAMP', 0), -			'poll_vote_change'			=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> 'topic_id', -		'KEYS'			=> array( -			'forum_id'			=> array('INDEX', 'forum_id'), -			'forum_id_type'		=> array('INDEX', array('forum_id', 'topic_type')), -			'last_post_time'	=> array('INDEX', 'topic_last_post_time'), -			'topic_approved'	=> array('INDEX', 'topic_approved'), -			'forum_appr_last'	=> array('INDEX', array('forum_id', 'topic_approved', 'topic_last_post_id')), -			'fid_time_moved'	=> array('INDEX', array('forum_id', 'topic_last_post_time', 'topic_moved_id')), -		), -	); - -	$schema_data['phpbb_topics_track'] = array( -		'COLUMNS'		=> array( -			'user_id'			=> array('UINT', 0), -			'topic_id'			=> array('UINT', 0), -			'forum_id'			=> array('UINT', 0), -			'mark_time'			=> array('TIMESTAMP', 0), -		), -		'PRIMARY_KEY'	=> array('user_id', 'topic_id'), -		'KEYS'			=> array( -			'topic_id'			=> array('INDEX', 'topic_id'), -			'forum_id'			=> array('INDEX', 'forum_id'), -		), -	); - -	$schema_data['phpbb_topics_posted'] = array( -		'COLUMNS'		=> array( -			'user_id'			=> array('UINT', 0), -			'topic_id'			=> array('UINT', 0), -			'topic_posted'		=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> array('user_id', 'topic_id'), -	); - -	$schema_data['phpbb_topics_watch'] = array( -		'COLUMNS'		=> array( -			'topic_id'			=> array('UINT', 0), -			'user_id'			=> array('UINT', 0), -			'notify_status'		=> array('BOOL', 0), -		), -		'KEYS'			=> array( -			'topic_id'			=> array('INDEX', 'topic_id'), -			'user_id'			=> array('INDEX', 'user_id'), -			'notify_stat'		=> array('INDEX', 'notify_status'), -		), -	); - -	$schema_data['phpbb_user_group'] = array( -		'COLUMNS'		=> array( -			'group_id'			=> array('UINT', 0), -			'user_id'			=> array('UINT', 0), -			'group_leader'		=> array('BOOL', 0), -			'user_pending'		=> array('BOOL', 1), -		), -		'KEYS'			=> array( -			'group_id'			=> array('INDEX', 'group_id'), -			'user_id'			=> array('INDEX', 'user_id'), -			'group_leader'		=> array('INDEX', 'group_leader'), -		), -	); - -	$schema_data['phpbb_users'] = array( -		'COLUMNS'		=> array( -			'user_id'					=> array('UINT', NULL, 'auto_increment'), -			'user_type'					=> array('TINT:2', 0), -			'group_id'					=> array('UINT', 3), -			'user_permissions'			=> array('MTEXT', ''), -			'user_perm_from'			=> array('UINT', 0), -			'user_ip'					=> array('VCHAR:40', ''), -			'user_regdate'				=> array('TIMESTAMP', 0), -			'username'					=> array('VCHAR_CI', ''), -			'username_clean'			=> array('VCHAR_CI', ''), -			'user_password'				=> array('VCHAR_UNI:40', ''), -			'user_passchg'				=> array('TIMESTAMP', 0), -			'user_pass_convert'			=> array('BOOL', 0), -			'user_email'				=> array('VCHAR_UNI:100', ''), -			'user_email_hash'			=> array('BINT', 0), -			'user_birthday'				=> array('VCHAR:10', ''), -			'user_lastvisit'			=> array('TIMESTAMP', 0), -			'user_lastmark'				=> array('TIMESTAMP', 0), -			'user_lastpost_time'		=> array('TIMESTAMP', 0), -			'user_lastpage'				=> array('VCHAR_UNI:200', ''), -			'user_last_confirm_key'		=> array('VCHAR:10', ''), -			'user_last_search'			=> array('TIMESTAMP', 0), -			'user_warnings'				=> array('TINT:4', 0), -			'user_last_warning'			=> array('TIMESTAMP', 0), -			'user_login_attempts'		=> array('TINT:4', 0), -			'user_inactive_reason'		=> array('TINT:2', 0), -			'user_inactive_time'		=> array('TIMESTAMP', 0), -			'user_posts'				=> array('UINT', 0), -			'user_lang'					=> array('VCHAR:30', ''), -			'user_timezone'				=> array('DECIMAL', 0), -			'user_dst'					=> array('BOOL', 0), -			'user_dateformat'			=> array('VCHAR_UNI:30', 'd M Y H:i'), -			'user_style'				=> array('UINT', 0), -			'user_rank'					=> array('UINT', 0), -			'user_colour'				=> array('VCHAR:6', ''), -			'user_new_privmsg'			=> array('INT:4', 0), -			'user_unread_privmsg'		=> array('INT:4', 0), -			'user_last_privmsg'			=> array('TIMESTAMP', 0), -			'user_message_rules'		=> array('BOOL', 0), -			'user_full_folder'			=> array('INT:11', -3), -			'user_emailtime'			=> array('TIMESTAMP', 0), -			'user_topic_show_days'		=> array('USINT', 0), -			'user_topic_sortby_type'	=> array('VCHAR:1', 't'), -			'user_topic_sortby_dir'		=> array('VCHAR:1', 'd'), -			'user_post_show_days'		=> array('USINT', 0), -			'user_post_sortby_type'		=> array('VCHAR:1', 't'), -			'user_post_sortby_dir'		=> array('VCHAR:1', 'a'), -			'user_notify'				=> array('BOOL', 0), -			'user_notify_pm'			=> array('BOOL', 1), -			'user_notify_type'			=> array('TINT:4', 0), -			'user_allow_pm'				=> array('BOOL', 1), -			'user_allow_viewonline'		=> array('BOOL', 1), -			'user_allow_viewemail'		=> array('BOOL', 1), -			'user_allow_massemail'		=> array('BOOL', 1), -			'user_options'				=> array('UINT:11', 230271), -			'user_avatar'				=> array('VCHAR', ''), -			'user_avatar_type'			=> array('TINT:2', 0), -			'user_avatar_width'			=> array('USINT', 0), -			'user_avatar_height'		=> array('USINT', 0), -			'user_sig'					=> array('MTEXT_UNI', ''), -			'user_sig_bbcode_uid'		=> array('VCHAR:8', ''), -			'user_sig_bbcode_bitfield'	=> array('VCHAR:255', ''), -			'user_from'					=> array('VCHAR_UNI:100', ''), -			'user_icq'					=> array('VCHAR:15', ''), -			'user_aim'					=> array('VCHAR_UNI', ''), -			'user_yim'					=> array('VCHAR_UNI', ''), -			'user_msnm'					=> array('VCHAR_UNI', ''), -			'user_jabber'				=> array('VCHAR_UNI', ''), -			'user_website'				=> array('VCHAR_UNI:200', ''), -			'user_occ'					=> array('TEXT_UNI', ''), -			'user_interests'			=> array('TEXT_UNI', ''), -			'user_actkey'				=> array('VCHAR:32', ''), -			'user_newpasswd'			=> array('VCHAR_UNI:40', ''), -			'user_form_salt'			=> array('VCHAR_UNI:32', ''), -			'user_new'					=> array('BOOL', 1), -			'user_reminded'				=> array('TINT:4', 0), -			'user_reminded_time'		=> array('TIMESTAMP', 0), -		), -		'PRIMARY_KEY'	=> 'user_id', -		'KEYS'			=> array( -			'user_birthday'				=> array('INDEX', 'user_birthday'), -			'user_email_hash'			=> array('INDEX', 'user_email_hash'), -			'user_type'					=> array('INDEX', 'user_type'), -			'username_clean'			=> array('UNIQUE', 'username_clean'), -		), -	); - -	$schema_data['phpbb_warnings'] = array( -		'COLUMNS'		=> array( -			'warning_id'			=> array('UINT', NULL, 'auto_increment'), -			'user_id'				=> array('UINT', 0), -			'post_id'				=> array('UINT', 0), -			'log_id'				=> array('UINT', 0), -			'warning_time'			=> array('TIMESTAMP', 0), -		), -		'PRIMARY_KEY'	=> 'warning_id', -	); - -	$schema_data['phpbb_words'] = array( -		'COLUMNS'		=> array( -			'word_id'				=> array('UINT', NULL, 'auto_increment'), -			'word'					=> array('VCHAR_UNI', ''), -			'replacement'			=> array('VCHAR_UNI', ''), -		), -		'PRIMARY_KEY'	=> 'word_id', -	); - -	$schema_data['phpbb_zebra'] = array( -		'COLUMNS'		=> array( -			'user_id'				=> array('UINT', 0), -			'zebra_id'				=> array('UINT', 0), -			'friend'				=> array('BOOL', 0), -			'foe'					=> array('BOOL', 0), -		), -		'PRIMARY_KEY'	=> array('user_id', 'zebra_id'), -	); - -	return $schema_data; -} - - -/** -* Data put into the header for various dbms -*/ -function custom_data($dbms) -{ -	switch ($dbms) -	{ -		case 'oracle': -			return <<<EOF -/* -  This first section is optional, however its probably the best method -  of running phpBB on Oracle. If you already have a tablespace and user created -  for phpBB you can leave this section commented out! - -  The first set of statements create a phpBB tablespace and a phpBB user, -  make sure you change the password of the phpBB user before you run this script!! -*/ - -/* -CREATE TABLESPACE "PHPBB" -	LOGGING -	DATAFILE 'E:\ORACLE\ORADATA\LOCAL\PHPBB.ora' -	SIZE 10M -	AUTOEXTEND ON NEXT 10M -	MAXSIZE 100M; - -CREATE USER "PHPBB" -	PROFILE "DEFAULT" -	IDENTIFIED BY "phpbb_password" -	DEFAULT TABLESPACE "PHPBB" -	QUOTA UNLIMITED ON "PHPBB" -	ACCOUNT UNLOCK; - -GRANT ANALYZE ANY TO "PHPBB"; -GRANT CREATE SEQUENCE TO "PHPBB"; -GRANT CREATE SESSION TO "PHPBB"; -GRANT CREATE TABLE TO "PHPBB"; -GRANT CREATE TRIGGER TO "PHPBB"; -GRANT CREATE VIEW TO "PHPBB"; -GRANT "CONNECT" TO "PHPBB"; - -COMMIT; -DISCONNECT; - -CONNECT phpbb/phpbb_password; -*/ -EOF; - -		break; - -		case 'postgres': -			return <<<EOF -/* -	Domain definition -*/ -CREATE DOMAIN varchar_ci AS varchar(255) NOT NULL DEFAULT ''::character varying; - -/* -	Operation Functions -*/ -CREATE FUNCTION _varchar_ci_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) = LOWER($2)' LANGUAGE SQL STRICT; -CREATE FUNCTION _varchar_ci_not_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) != LOWER($2)' LANGUAGE SQL STRICT; -CREATE FUNCTION _varchar_ci_less_than(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) < LOWER($2)' LANGUAGE SQL STRICT; -CREATE FUNCTION _varchar_ci_less_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) <= LOWER($2)' LANGUAGE SQL STRICT; -CREATE FUNCTION _varchar_ci_greater_than(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) > LOWER($2)' LANGUAGE SQL STRICT; -CREATE FUNCTION _varchar_ci_greater_equals(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) >= LOWER($2)' LANGUAGE SQL STRICT; - -/* -	Operators -*/ -CREATE OPERATOR <( -  PROCEDURE = _varchar_ci_less_than, -  LEFTARG = varchar_ci, -  RIGHTARG = varchar_ci, -  COMMUTATOR = >, -  NEGATOR = >=, -  RESTRICT = scalarltsel, -  JOIN = scalarltjoinsel); - -CREATE OPERATOR <=( -  PROCEDURE = _varchar_ci_less_equal, -  LEFTARG = varchar_ci, -  RIGHTARG = varchar_ci, -  COMMUTATOR = >=, -  NEGATOR = >, -  RESTRICT = scalarltsel, -  JOIN = scalarltjoinsel); - -CREATE OPERATOR >( -  PROCEDURE = _varchar_ci_greater_than, -  LEFTARG = varchar_ci, -  RIGHTARG = varchar_ci, -  COMMUTATOR = <, -  NEGATOR = <=, -  RESTRICT = scalargtsel, -  JOIN = scalargtjoinsel); - -CREATE OPERATOR >=( -  PROCEDURE = _varchar_ci_greater_equals, -  LEFTARG = varchar_ci, -  RIGHTARG = varchar_ci, -  COMMUTATOR = <=, -  NEGATOR = <, -  RESTRICT = scalargtsel, -  JOIN = scalargtjoinsel); - -CREATE OPERATOR <>( -  PROCEDURE = _varchar_ci_not_equal, -  LEFTARG = varchar_ci, -  RIGHTARG = varchar_ci, -  COMMUTATOR = <>, -  NEGATOR = =, -  RESTRICT = neqsel, -  JOIN = neqjoinsel); - -CREATE OPERATOR =( -  PROCEDURE = _varchar_ci_equal, -  LEFTARG = varchar_ci, -  RIGHTARG = varchar_ci, -  COMMUTATOR = =, -  NEGATOR = <>, -  RESTRICT = eqsel, -  JOIN = eqjoinsel, -  HASHES, -  MERGES, -  SORT1= <); - -EOF; -		break; -	} - -	return ''; -} +$db = new \phpbb\db\driver\sqlite(); +$schema_generator = new \phpbb\db\migration\schema_generator($classes, new \phpbb\config\config(array()), $db, new \phpbb\db\tools($db, true), $phpbb_root_path, $phpEx, $table_prefix); +$schema_data = $schema_generator->get_schema(); -echo 'done'; +$fp = fopen($schema_path . 'schema.json', 'wb'); +fwrite($fp, json_encode($schema_data, JSON_PRETTY_PRINT)); +fclose($fp); +echo 'Successfully created schema file';  | 
