[ticket/11755] MySQL upgrader out of date

De-duplicating code from create_schema_files, mysql_upgrader.

New file phpbb/db/schema_data which contains all the current schema data.

New function in db_tools public static function get_dbms_type_map() to make the
type map available everywhere (without requiring $db be setup already)

PHPBB3-11755
This commit is contained in:
Nathan Guse 2013-09-02 16:58:34 -05:00
parent 5ddb0ba629
commit 536eeb7afa
4 changed files with 1447 additions and 2777 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -37,247 +37,257 @@ class phpbb_db_tools
* The Column types for every database we support * The Column types for every database we support
* @var array * @var array
*/ */
var $dbms_type_map = array( var $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)', * Get the column types for every database we support
'BINT' => 'bigint(20)', *
'UINT' => 'mediumint(8) UNSIGNED', * @return array
'UINT:' => 'int(%d) UNSIGNED', */
'TINT:' => 'tinyint(%d)', public static function get_dbms_type_map()
'USINT' => 'smallint(4) UNSIGNED', {
'BOOL' => 'tinyint(1) UNSIGNED', return array(
'VCHAR' => 'varbinary(255)', 'mysql_41' => array(
'VCHAR:' => 'varbinary(%d)', 'INT:' => 'int(%d)',
'CHAR:' => 'binary(%d)', 'BINT' => 'bigint(20)',
'XSTEXT' => 'blob', 'UINT' => 'mediumint(8) UNSIGNED',
'XSTEXT_UNI'=> 'blob', 'UINT:' => 'int(%d) UNSIGNED',
'STEXT' => 'blob', 'TINT:' => 'tinyint(%d)',
'STEXT_UNI' => 'blob', 'USINT' => 'smallint(4) UNSIGNED',
'TEXT' => 'blob', 'BOOL' => 'tinyint(1) UNSIGNED',
'TEXT_UNI' => 'blob', 'VCHAR' => 'varchar(255)',
'MTEXT' => 'mediumblob', 'VCHAR:' => 'varchar(%d)',
'MTEXT_UNI' => 'mediumblob', 'CHAR:' => 'char(%d)',
'TIMESTAMP' => 'int(11) UNSIGNED', 'XSTEXT' => 'text',
'DECIMAL' => 'decimal(5,2)', 'XSTEXT_UNI'=> 'varchar(100)',
'DECIMAL:' => 'decimal(%d,2)', 'STEXT' => 'text',
'PDECIMAL' => 'decimal(6,3)', 'STEXT_UNI' => 'varchar(255)',
'PDECIMAL:' => 'decimal(%d,3)', 'TEXT' => 'text',
'VCHAR_UNI' => 'blob', 'TEXT_UNI' => 'text',
'VCHAR_UNI:'=> array('varbinary(%d)', 'limit' => array('mult', 3, 255, 'blob')), 'MTEXT' => 'mediumtext',
'VCHAR_CI' => 'blob', 'MTEXT_UNI' => 'mediumtext',
'VARBINARY' => 'varbinary(255)', '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)',
),
'firebird' => array( 'mysql_40' => array(
'INT:' => 'INTEGER', 'INT:' => 'int(%d)',
'BINT' => 'DOUBLE PRECISION', 'BINT' => 'bigint(20)',
'UINT' => 'INTEGER', 'UINT' => 'mediumint(8) UNSIGNED',
'UINT:' => 'INTEGER', 'UINT:' => 'int(%d) UNSIGNED',
'TINT:' => 'INTEGER', 'TINT:' => 'tinyint(%d)',
'USINT' => 'INTEGER', 'USINT' => 'smallint(4) UNSIGNED',
'BOOL' => 'INTEGER', 'BOOL' => 'tinyint(1) UNSIGNED',
'VCHAR' => 'VARCHAR(255) CHARACTER SET NONE', 'VCHAR' => 'varbinary(255)',
'VCHAR:' => 'VARCHAR(%d) CHARACTER SET NONE', 'VCHAR:' => 'varbinary(%d)',
'CHAR:' => 'CHAR(%d) CHARACTER SET NONE', 'CHAR:' => 'binary(%d)',
'XSTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', 'XSTEXT' => 'blob',
'STEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', 'XSTEXT_UNI'=> 'blob',
'TEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', 'STEXT' => 'blob',
'MTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE', 'STEXT_UNI' => 'blob',
'XSTEXT_UNI'=> 'VARCHAR(100) CHARACTER SET UTF8', 'TEXT' => 'blob',
'STEXT_UNI' => 'VARCHAR(255) CHARACTER SET UTF8', 'TEXT_UNI' => 'blob',
'TEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', 'MTEXT' => 'mediumblob',
'MTEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8', 'MTEXT_UNI' => 'mediumblob',
'TIMESTAMP' => 'INTEGER', 'TIMESTAMP' => 'int(11) UNSIGNED',
'DECIMAL' => 'DOUBLE PRECISION', 'DECIMAL' => 'decimal(5,2)',
'DECIMAL:' => 'DOUBLE PRECISION', 'DECIMAL:' => 'decimal(%d,2)',
'PDECIMAL' => 'DOUBLE PRECISION', 'PDECIMAL' => 'decimal(6,3)',
'PDECIMAL:' => 'DOUBLE PRECISION', 'PDECIMAL:' => 'decimal(%d,3)',
'VCHAR_UNI' => 'VARCHAR(255) CHARACTER SET UTF8', 'VCHAR_UNI' => 'blob',
'VCHAR_UNI:'=> 'VARCHAR(%d) CHARACTER SET UTF8', 'VCHAR_UNI:'=> array('varbinary(%d)', 'limit' => array('mult', 3, 255, 'blob')),
'VCHAR_CI' => 'VARCHAR(255) CHARACTER SET UTF8', 'VCHAR_CI' => 'blob',
'VARBINARY' => 'CHAR(255) CHARACTER SET NONE', 'VARBINARY' => 'varbinary(255)',
), ),
'mssql' => array( 'firebird' => array(
'INT:' => '[int]', 'INT:' => 'INTEGER',
'BINT' => '[float]', 'BINT' => 'DOUBLE PRECISION',
'UINT' => '[int]', 'UINT' => 'INTEGER',
'UINT:' => '[int]', 'UINT:' => 'INTEGER',
'TINT:' => '[int]', 'TINT:' => 'INTEGER',
'USINT' => '[int]', 'USINT' => 'INTEGER',
'BOOL' => '[int]', 'BOOL' => 'INTEGER',
'VCHAR' => '[varchar] (255)', 'VCHAR' => 'VARCHAR(255) CHARACTER SET NONE',
'VCHAR:' => '[varchar] (%d)', 'VCHAR:' => 'VARCHAR(%d) CHARACTER SET NONE',
'CHAR:' => '[char] (%d)', 'CHAR:' => 'CHAR(%d) CHARACTER SET NONE',
'XSTEXT' => '[varchar] (1000)', 'XSTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
'STEXT' => '[varchar] (3000)', 'STEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
'TEXT' => '[varchar] (8000)', 'TEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
'MTEXT' => '[text]', 'MTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
'XSTEXT_UNI'=> '[varchar] (100)', 'XSTEXT_UNI'=> 'VARCHAR(100) CHARACTER SET UTF8',
'STEXT_UNI' => '[varchar] (255)', 'STEXT_UNI' => 'VARCHAR(255) CHARACTER SET UTF8',
'TEXT_UNI' => '[varchar] (4000)', 'TEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8',
'MTEXT_UNI' => '[text]', 'MTEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8',
'TIMESTAMP' => '[int]', 'TIMESTAMP' => 'INTEGER',
'DECIMAL' => '[float]', 'DECIMAL' => 'DOUBLE PRECISION',
'DECIMAL:' => '[float]', 'DECIMAL:' => 'DOUBLE PRECISION',
'PDECIMAL' => '[float]', 'PDECIMAL' => 'DOUBLE PRECISION',
'PDECIMAL:' => '[float]', 'PDECIMAL:' => 'DOUBLE PRECISION',
'VCHAR_UNI' => '[varchar] (255)', 'VCHAR_UNI' => 'VARCHAR(255) CHARACTER SET UTF8',
'VCHAR_UNI:'=> '[varchar] (%d)', 'VCHAR_UNI:'=> 'VARCHAR(%d) CHARACTER SET UTF8',
'VCHAR_CI' => '[varchar] (255)', 'VCHAR_CI' => 'VARCHAR(255) CHARACTER SET UTF8',
'VARBINARY' => '[varchar] (255)', 'VARBINARY' => 'CHAR(255) CHARACTER SET NONE',
), ),
'mssqlnative' => array( 'mssql' => array(
'INT:' => '[int]', 'INT:' => '[int]',
'BINT' => '[float]', 'BINT' => '[float]',
'UINT' => '[int]', 'UINT' => '[int]',
'UINT:' => '[int]', 'UINT:' => '[int]',
'TINT:' => '[int]', 'TINT:' => '[int]',
'USINT' => '[int]', 'USINT' => '[int]',
'BOOL' => '[int]', 'BOOL' => '[int]',
'VCHAR' => '[varchar] (255)', 'VCHAR' => '[varchar] (255)',
'VCHAR:' => '[varchar] (%d)', 'VCHAR:' => '[varchar] (%d)',
'CHAR:' => '[char] (%d)', 'CHAR:' => '[char] (%d)',
'XSTEXT' => '[varchar] (1000)', 'XSTEXT' => '[varchar] (1000)',
'STEXT' => '[varchar] (3000)', 'STEXT' => '[varchar] (3000)',
'TEXT' => '[varchar] (8000)', 'TEXT' => '[varchar] (8000)',
'MTEXT' => '[text]', 'MTEXT' => '[text]',
'XSTEXT_UNI'=> '[varchar] (100)', 'XSTEXT_UNI'=> '[varchar] (100)',
'STEXT_UNI' => '[varchar] (255)', 'STEXT_UNI' => '[varchar] (255)',
'TEXT_UNI' => '[varchar] (4000)', 'TEXT_UNI' => '[varchar] (4000)',
'MTEXT_UNI' => '[text]', 'MTEXT_UNI' => '[text]',
'TIMESTAMP' => '[int]', 'TIMESTAMP' => '[int]',
'DECIMAL' => '[float]', 'DECIMAL' => '[float]',
'DECIMAL:' => '[float]', 'DECIMAL:' => '[float]',
'PDECIMAL' => '[float]', 'PDECIMAL' => '[float]',
'PDECIMAL:' => '[float]', 'PDECIMAL:' => '[float]',
'VCHAR_UNI' => '[varchar] (255)', 'VCHAR_UNI' => '[varchar] (255)',
'VCHAR_UNI:'=> '[varchar] (%d)', 'VCHAR_UNI:'=> '[varchar] (%d)',
'VCHAR_CI' => '[varchar] (255)', 'VCHAR_CI' => '[varchar] (255)',
'VARBINARY' => '[varchar] (255)', 'VARBINARY' => '[varchar] (255)',
), ),
'oracle' => array( 'mssqlnative' => array(
'INT:' => 'number(%d)', 'INT:' => '[int]',
'BINT' => 'number(20)', 'BINT' => '[float]',
'UINT' => 'number(8)', 'UINT' => '[int]',
'UINT:' => 'number(%d)', 'UINT:' => '[int]',
'TINT:' => 'number(%d)', 'TINT:' => '[int]',
'USINT' => 'number(4)', 'USINT' => '[int]',
'BOOL' => 'number(1)', 'BOOL' => '[int]',
'VCHAR' => 'varchar2(255)', 'VCHAR' => '[varchar] (255)',
'VCHAR:' => 'varchar2(%d)', 'VCHAR:' => '[varchar] (%d)',
'CHAR:' => 'char(%d)', 'CHAR:' => '[char] (%d)',
'XSTEXT' => 'varchar2(1000)', 'XSTEXT' => '[varchar] (1000)',
'STEXT' => 'varchar2(3000)', 'STEXT' => '[varchar] (3000)',
'TEXT' => 'clob', 'TEXT' => '[varchar] (8000)',
'MTEXT' => 'clob', 'MTEXT' => '[text]',
'XSTEXT_UNI'=> 'varchar2(300)', 'XSTEXT_UNI'=> '[varchar] (100)',
'STEXT_UNI' => 'varchar2(765)', 'STEXT_UNI' => '[varchar] (255)',
'TEXT_UNI' => 'clob', 'TEXT_UNI' => '[varchar] (4000)',
'MTEXT_UNI' => 'clob', 'MTEXT_UNI' => '[text]',
'TIMESTAMP' => 'number(11)', 'TIMESTAMP' => '[int]',
'DECIMAL' => 'number(5, 2)', 'DECIMAL' => '[float]',
'DECIMAL:' => 'number(%d, 2)', 'DECIMAL:' => '[float]',
'PDECIMAL' => 'number(6, 3)', 'PDECIMAL' => '[float]',
'PDECIMAL:' => 'number(%d, 3)', 'PDECIMAL:' => '[float]',
'VCHAR_UNI' => 'varchar2(765)', 'VCHAR_UNI' => '[varchar] (255)',
'VCHAR_UNI:'=> array('varchar2(%d)', 'limit' => array('mult', 3, 765, 'clob')), 'VCHAR_UNI:'=> '[varchar] (%d)',
'VCHAR_CI' => 'varchar2(255)', 'VCHAR_CI' => '[varchar] (255)',
'VARBINARY' => 'raw(255)', 'VARBINARY' => '[varchar] (255)',
), ),
'sqlite' => array( 'oracle' => array(
'INT:' => 'int(%d)', 'INT:' => 'number(%d)',
'BINT' => 'bigint(20)', 'BINT' => 'number(20)',
'UINT' => 'INTEGER UNSIGNED', //'mediumint(8) UNSIGNED', 'UINT' => 'number(8)',
'UINT:' => 'INTEGER UNSIGNED', // 'int(%d) UNSIGNED', 'UINT:' => 'number(%d)',
'TINT:' => 'tinyint(%d)', 'TINT:' => 'number(%d)',
'USINT' => 'INTEGER UNSIGNED', //'mediumint(4) UNSIGNED', 'USINT' => 'number(4)',
'BOOL' => 'INTEGER UNSIGNED', //'tinyint(1) UNSIGNED', 'BOOL' => 'number(1)',
'VCHAR' => 'varchar(255)', 'VCHAR' => 'varchar2(255)',
'VCHAR:' => 'varchar(%d)', 'VCHAR:' => 'varchar2(%d)',
'CHAR:' => 'char(%d)', 'CHAR:' => 'char(%d)',
'XSTEXT' => 'text(65535)', 'XSTEXT' => 'varchar2(1000)',
'STEXT' => 'text(65535)', 'STEXT' => 'varchar2(3000)',
'TEXT' => 'text(65535)', 'TEXT' => 'clob',
'MTEXT' => 'mediumtext(16777215)', 'MTEXT' => 'clob',
'XSTEXT_UNI'=> 'text(65535)', 'XSTEXT_UNI'=> 'varchar2(300)',
'STEXT_UNI' => 'text(65535)', 'STEXT_UNI' => 'varchar2(765)',
'TEXT_UNI' => 'text(65535)', 'TEXT_UNI' => 'clob',
'MTEXT_UNI' => 'mediumtext(16777215)', 'MTEXT_UNI' => 'clob',
'TIMESTAMP' => 'INTEGER UNSIGNED', //'int(11) UNSIGNED', 'TIMESTAMP' => 'number(11)',
'DECIMAL' => 'decimal(5,2)', 'DECIMAL' => 'number(5, 2)',
'DECIMAL:' => 'decimal(%d,2)', 'DECIMAL:' => 'number(%d, 2)',
'PDECIMAL' => 'decimal(6,3)', 'PDECIMAL' => 'number(6, 3)',
'PDECIMAL:' => 'decimal(%d,3)', 'PDECIMAL:' => 'number(%d, 3)',
'VCHAR_UNI' => 'varchar(255)', 'VCHAR_UNI' => 'varchar2(765)',
'VCHAR_UNI:'=> 'varchar(%d)', 'VCHAR_UNI:'=> array('varchar2(%d)', 'limit' => array('mult', 3, 765, 'clob')),
'VCHAR_CI' => 'varchar(255)', 'VCHAR_CI' => 'varchar2(255)',
'VARBINARY' => 'blob', 'VARBINARY' => 'raw(255)',
), ),
'postgres' => array( 'sqlite' => array(
'INT:' => 'INT4', 'INT:' => 'int(%d)',
'BINT' => 'INT8', 'BINT' => 'bigint(20)',
'UINT' => 'INT4', // unsigned 'UINT' => 'INTEGER UNSIGNED', //'mediumint(8) UNSIGNED',
'UINT:' => 'INT4', // unsigned 'UINT:' => 'INTEGER UNSIGNED', // 'int(%d) UNSIGNED',
'USINT' => 'INT2', // unsigned 'TINT:' => 'tinyint(%d)',
'BOOL' => 'INT2', // unsigned 'USINT' => 'INTEGER UNSIGNED', //'mediumint(4) UNSIGNED',
'TINT:' => 'INT2', 'BOOL' => 'INTEGER UNSIGNED', //'tinyint(1) UNSIGNED',
'VCHAR' => 'varchar(255)', 'VCHAR' => 'varchar(255)',
'VCHAR:' => 'varchar(%d)', 'VCHAR:' => 'varchar(%d)',
'CHAR:' => 'char(%d)', 'CHAR:' => 'char(%d)',
'XSTEXT' => 'varchar(1000)', 'XSTEXT' => 'text(65535)',
'STEXT' => 'varchar(3000)', 'STEXT' => 'text(65535)',
'TEXT' => 'varchar(8000)', 'TEXT' => 'text(65535)',
'MTEXT' => 'TEXT', 'MTEXT' => 'mediumtext(16777215)',
'XSTEXT_UNI'=> 'varchar(100)', 'XSTEXT_UNI'=> 'text(65535)',
'STEXT_UNI' => 'varchar(255)', 'STEXT_UNI' => 'text(65535)',
'TEXT_UNI' => 'varchar(4000)', 'TEXT_UNI' => 'text(65535)',
'MTEXT_UNI' => 'TEXT', 'MTEXT_UNI' => 'mediumtext(16777215)',
'TIMESTAMP' => 'INT4', // unsigned 'TIMESTAMP' => 'INTEGER UNSIGNED', //'int(11) UNSIGNED',
'DECIMAL' => 'decimal(5,2)', 'DECIMAL' => 'decimal(5,2)',
'DECIMAL:' => 'decimal(%d,2)', 'DECIMAL:' => 'decimal(%d,2)',
'PDECIMAL' => 'decimal(6,3)', 'PDECIMAL' => 'decimal(6,3)',
'PDECIMAL:' => 'decimal(%d,3)', 'PDECIMAL:' => 'decimal(%d,3)',
'VCHAR_UNI' => 'varchar(255)', 'VCHAR_UNI' => 'varchar(255)',
'VCHAR_UNI:'=> 'varchar(%d)', 'VCHAR_UNI:'=> 'varchar(%d)',
'VCHAR_CI' => 'varchar_ci', 'VCHAR_CI' => 'varchar(255)',
'VARBINARY' => 'bytea', '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 * A list of types being unsigned for better reference in some db's
@ -308,6 +318,8 @@ class phpbb_db_tools
$this->db = $db; $this->db = $db;
$this->return_statements = $return_statements; $this->return_statements = $return_statements;
$this->dbms_type_map = self::get_dbms_type_map();
// Determine mapping database type // Determine mapping database type
switch ($this->db->sql_layer) switch ($this->db->sql_layer)
{ {