diff options
Diffstat (limited to 'phpBB/develop/create_schema_files.php')
-rw-r--r-- | phpBB/develop/create_schema_files.php | 65 |
1 files changed, 41 insertions, 24 deletions
diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index c76deae0a7..45b3035606 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -8,6 +8,8 @@ * * This file creates new schema files for every database. * The filenames will be prefixed with an underscore to not overwrite the current schema files. +* +* If you overwrite the original schema files please make sure you save the file with UNIX linefeeds. */ die("Please read the first lines of this script for instructions on how to enable it"); @@ -89,11 +91,11 @@ $dbms_type_map = array( 'oracle' => array( 'INT:' => 'number(%d)', 'BINT' => 'number(20)', - 'UINT' => 'number(8) UNSIGNED', - 'UINT:' => 'number(%d) UNSIGNED', + 'UINT' => 'number(8)', + 'UINT:' => 'number(%d)', 'TINT:' => 'number(%d)', - 'USINT' => 'number(4) UNSIGNED', - 'BOOL' => 'number(1) UNSIGNED', + 'USINT' => 'number(4)', + 'BOOL' => 'number(1)', 'VCHAR' => 'varchar2(255)', 'VCHAR:' => 'varchar2(%d)', 'CHAR:' => 'char(%d)', @@ -101,7 +103,7 @@ $dbms_type_map = array( 'STEXT' => 'varchar2(3000)', 'TEXT' => 'clob', 'MTEXT' => 'clob', - 'TIMESTAMP' => 'number(11) UNSIGNED', + 'TIMESTAMP' => 'number(11)', 'DECIMAL' => 'number(5, 2)', 'VCHAR_BIN' => 'varchar2(252)', 'VCHAR_CI' => 'varchar2(255)', @@ -131,10 +133,10 @@ $dbms_type_map = array( 'postgres' => array( 'INT:' => 'INT4', 'BINT' => 'INT8', - 'UINT' => 'INT4 UNSIGNED', - 'UINT:' => 'INT4 UNSIGNED', - 'USINT' => 'INT2 UNSIGNED', - 'BOOL' => 'INT2 UNSIGNED', + 'UINT' => 'INT4', // unsigned + 'UINT:' => 'INT4', // unsigned + 'USINT' => 'INT2', // unsigned + 'BOOL' => 'INT2', // unsigned 'TINT:' => 'INT2', 'VCHAR' => 'varchar(255)', 'VCHAR:' => 'varchar(%d)', @@ -143,13 +145,16 @@ $dbms_type_map = array( 'STEXT' => 'varchar(3000)', 'TEXT' => 'varchar(8000)', 'MTEXT' => 'TEXT', - 'TIMESTAMP' => 'INT4 UNSIGNED', + 'TIMESTAMP' => 'INT4', // unsigned 'DECIMAL' => 'decimal(5,2)', 'VCHAR_BIN' => 'varchar(252)', 'VCHAR_CI' => 'varchar_ci', ), ); +// A list of types being unsigned for better reference in some db's +$unsigned_types = array('UINT', 'UINT:', 'USINT', 'BOOL', 'TIMESTAMP'); + foreach (array('firebird', 'mssql', 'mysql', 'oracle', 'postgres', 'sqlite') as $dbms) { $fp = fopen($schema_path . '_' . $dbms . '_schema.sql', 'wt'); @@ -234,12 +239,14 @@ foreach (array('firebird', 'mssql', 'mysql', 'oracle', 'postgres', 'sqlite') as // Get type if (strpos($column_data[0], ':') !== false) { - list($column_type, $column_length) = explode(':', $column_data[0]); + list($orig_column_type, $column_length) = explode(':', $column_data[0]); - $column_type = sprintf($dbms_type_map[$dbms][$column_type . ':'], $column_length); + $column_type = sprintf($dbms_type_map[$dbms][$orig_column_type . ':'], $column_length); + $orig_column_type .= ':'; } else { + $orig_column_type = $column_data[0]; $column_type = $dbms_type_map[$dbms][$column_data[0]]; } @@ -344,7 +351,15 @@ foreach (array('firebird', 'mssql', 'mysql', 'oracle', 'postgres', 'sqlite') as else { $line .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : ''; - $line .= "NOT NULL,\n"; + $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; } @@ -530,7 +545,7 @@ foreach (array('firebird', 'mssql', 'mysql', 'oracle', 'postgres', 'sqlite') as break; } - fwrite($fp, $line); + fwrite($fp, $line . "\n"); } $line = ''; @@ -554,6 +569,7 @@ foreach (array('firebird', 'mssql', 'mysql', 'oracle', 'postgres', 'sqlite') as break; case 'sqlite': + case 'postgres': $line = "\nCOMMIT;"; break; } @@ -606,7 +622,7 @@ function get_schema_struct() 'pysical_filename' => array('VCHAR', ''), 'real_filename' => array('VCHAR', ''), 'download_count' => array('UINT', 0), - 'comment' => array('TEXT', ''), + 'attach_comment' => array('TEXT', ''), 'extension' => array('VCHAR:100', ''), 'mimetype' => array('VCHAR:100', ''), 'filesize' => array('UINT:20', 0), @@ -828,7 +844,7 @@ function get_schema_struct() 'forum_parents' => array('MTEXT', ''), 'forum_name' => array('STEXT', ''), 'forum_desc' => array('TEXT', ''), - 'forum_desc_bitfield' => array('UINT:11', ''), + 'forum_desc_bitfield' => array('UINT:11', 0), 'forum_desc_uid' => array('VCHAR:5', ''), 'forum_link' => array('VCHAR', ''), 'forum_password' => array('VCHAR:40', ''), @@ -992,7 +1008,7 @@ function get_schema_struct() 'module_id' => array('UINT', NULL, 'auto_increment'), 'module_enabled' => array('BOOL', 1), 'module_display' => array('BOOL', 1), - 'module_name' => array('VCHAR', ''), + 'module_basename' => array('VCHAR', ''), 'module_class' => array('VCHAR:10', ''), 'parent_id' => array('UINT', 0), 'left_id' => array('UINT', 0), @@ -1143,12 +1159,12 @@ function get_schema_struct() 'msg_id' => array('UINT', 0), 'user_id' => array('UINT', 0), 'author_id' => array('UINT', 0), - 'deleted' => array('BOOL', 0), - 'new' => array('BOOL', 1), - 'unread' => array('BOOL', 1), - 'replied' => array('BOOL', 0), - 'marked' => array('BOOL', 0), - 'forwarded' => array('BOOL', 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('UINT', 0), ), 'KEYS' => array( @@ -1196,7 +1212,7 @@ function get_schema_struct() 'lang_id' => array('UINT', 0), 'option_id' => array('UINT', 0), 'field_type' => array('TINT:4', 0), - 'value' => array('VCHAR', ''), + 'lang_value' => array('VCHAR', ''), ), 'PRIMARY_KEY' => array('field_id', 'lang_id', 'option_id'), ); @@ -1836,6 +1852,7 @@ CREATE OPERATOR =( HASHES, MERGES, SORT1= <); + EOF; } |