Verzeichnisstruktur phpBB-3.0.0
- Veröffentlicht
- 12.12.2007
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
create_schema_files.php
0001 <?php
0002 /**
0003 *
0004 * @package phpBB3
0005 * @version $Id$
0006 * @copyright (c) 2006 phpBB Group
0007 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
0008 *
0009 * This file creates new schema files for every database.
0010 * The filenames will be prefixed with an underscore to not overwrite the current schema files.
0011 *
0012 * If you overwrite the original schema files please make sure you save the file with UNIX linefeeds.
0013 */
0014
0015 die("Please read the first lines of this script for instructions on how to enable it");
0016
0017 @set_time_limit(0);
0018
0019 $schema_path = './../install/schemas/';
0020
0021 if (!is_writable($schema_path))
0022 {
0023 die('Schema path not writable');
0024 }
0025
0026 $schema_data = get_schema_struct();
0027 $dbms_type_map = array(
0028 'mysql_41' => array(
0029 'INT:' => 'int(%d)',
0030 'BINT' => 'bigint(20)',
0031 'UINT' => 'mediumint(8) UNSIGNED',
0032 'UINT:' => 'int(%d) UNSIGNED',
0033 'TINT:' => 'tinyint(%d)',
0034 'USINT' => 'smallint(4) UNSIGNED',
0035 'BOOL' => 'tinyint(1) UNSIGNED',
0036 'VCHAR' => 'varchar(255)',
0037 'VCHAR:' => 'varchar(%d)',
0038 'CHAR:' => 'char(%d)',
0039 'XSTEXT' => 'text',
0040 'XSTEXT_UNI'=> 'varchar(100)',
0041 'STEXT' => 'text',
0042 'STEXT_UNI' => 'varchar(255)',
0043 'TEXT' => 'text',
0044 'TEXT_UNI' => 'text',
0045 'MTEXT' => 'mediumtext',
0046 'MTEXT_UNI' => 'mediumtext',
0047 'TIMESTAMP' => 'int(11) UNSIGNED',
0048 'DECIMAL' => 'decimal(5,2)',
0049 'DECIMAL:' => 'decimal(%d,2)',
0050 'PDECIMAL' => 'decimal(6,3)',
0051 'PDECIMAL:' => 'decimal(%d,3)',
0052 'VCHAR_UNI' => 'varchar(255)',
0053 'VCHAR_UNI:'=> 'varchar(%d)',
0054 'VCHAR_CI' => 'varchar(255)',
0055 'VARBINARY' => 'varbinary(255)',
0056 ),
0057
0058 'mysql_40' => array(
0059 'INT:' => 'int(%d)',
0060 'BINT' => 'bigint(20)',
0061 'UINT' => 'mediumint(8) UNSIGNED',
0062 'UINT:' => 'int(%d) UNSIGNED',
0063 'TINT:' => 'tinyint(%d)',
0064 'USINT' => 'smallint(4) UNSIGNED',
0065 'BOOL' => 'tinyint(1) UNSIGNED',
0066 'VCHAR' => 'varbinary(255)',
0067 'VCHAR:' => 'varbinary(%d)',
0068 'CHAR:' => 'binary(%d)',
0069 'XSTEXT' => 'blob',
0070 'XSTEXT_UNI'=> 'blob',
0071 'STEXT' => 'blob',
0072 'STEXT_UNI' => 'blob',
0073 'TEXT' => 'blob',
0074 'TEXT_UNI' => 'blob',
0075 'MTEXT' => 'mediumblob',
0076 'MTEXT_UNI' => 'mediumblob',
0077 'TIMESTAMP' => 'int(11) UNSIGNED',
0078 'DECIMAL' => 'decimal(5,2)',
0079 'DECIMAL:' => 'decimal(%d,2)',
0080 'PDECIMAL' => 'decimal(6,3)',
0081 'PDECIMAL:' => 'decimal(%d,3)',
0082 'VCHAR_UNI' => 'blob',
0083 'VCHAR_UNI:'=> array('varbinary(%d)', 'limit' => array('mult', 3, 255, 'blob')),
0084 'VCHAR_CI' => 'blob',
0085 'VARBINARY' => 'varbinary(255)',
0086 ),
0087
0088 'firebird' => array(
0089 'INT:' => 'INTEGER',
0090 'BINT' => 'DOUBLE PRECISION',
0091 'UINT' => 'INTEGER',
0092 'UINT:' => 'INTEGER',
0093 'TINT:' => 'INTEGER',
0094 'USINT' => 'INTEGER',
0095 'BOOL' => 'INTEGER',
0096 'VCHAR' => 'VARCHAR(255) CHARACTER SET NONE',
0097 'VCHAR:' => 'VARCHAR(%d) CHARACTER SET NONE',
0098 'CHAR:' => 'CHAR(%d) CHARACTER SET NONE',
0099 'XSTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
0100 'STEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
0101 'TEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
0102 'MTEXT' => 'BLOB SUB_TYPE TEXT CHARACTER SET NONE',
0103 'XSTEXT_UNI'=> 'VARCHAR(100) CHARACTER SET UTF8',
0104 'STEXT_UNI' => 'VARCHAR(255) CHARACTER SET UTF8',
0105 'TEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8',
0106 'MTEXT_UNI' => 'BLOB SUB_TYPE TEXT CHARACTER SET UTF8',
0107 'TIMESTAMP' => 'INTEGER',
0108 'DECIMAL' => 'DOUBLE PRECISION',
0109 'DECIMAL:' => 'DOUBLE PRECISION',
0110 'PDECIMAL' => 'DOUBLE PRECISION',
0111 'PDECIMAL:' => 'DOUBLE PRECISION',
0112 'VCHAR_UNI' => 'VARCHAR(255) CHARACTER SET UTF8',
0113 'VCHAR_UNI:'=> 'VARCHAR(%d) CHARACTER SET UTF8',
0114 'VCHAR_CI' => 'VARCHAR(255) CHARACTER SET UTF8',
0115 'VARBINARY' => 'CHAR(255) CHARACTER SET NONE',
0116 ),
0117
0118 'mssql' => array(
0119 'INT:' => '[int]',
0120 'BINT' => '[float]',
0121 'UINT' => '[int]',
0122 'UINT:' => '[int]',
0123 'TINT:' => '[int]',
0124 'USINT' => '[int]',
0125 'BOOL' => '[int]',
0126 'VCHAR' => '[varchar] (255)',
0127 'VCHAR:' => '[varchar] (%d)',
0128 'CHAR:' => '[char] (%d)',
0129 'XSTEXT' => '[varchar] (1000)',
0130 'STEXT' => '[varchar] (3000)',
0131 'TEXT' => '[varchar] (8000)',
0132 'MTEXT' => '[text]',
0133 'XSTEXT_UNI'=> '[varchar] (100)',
0134 'STEXT_UNI' => '[varchar] (255)',
0135 'TEXT_UNI' => '[varchar] (4000)',
0136 'MTEXT_UNI' => '[text]',
0137 'TIMESTAMP' => '[int]',
0138 'DECIMAL' => '[float]',
0139 'DECIMAL:' => '[float]',
0140 'PDECIMAL' => '[float]',
0141 'PDECIMAL:' => '[float]',
0142 'VCHAR_UNI' => '[varchar] (255)',
0143 'VCHAR_UNI:'=> '[varchar] (%d)',
0144 'VCHAR_CI' => '[varchar] (255)',
0145 'VARBINARY' => '[varchar] (255)',
0146 ),
0147
0148 'oracle' => array(
0149 'INT:' => 'number(%d)',
0150 'BINT' => 'number(20)',
0151 'UINT' => 'number(8)',
0152 'UINT:' => 'number(%d)',
0153 'TINT:' => 'number(%d)',
0154 'USINT' => 'number(4)',
0155 'BOOL' => 'number(1)',
0156 'VCHAR' => 'varchar2(255)',
0157 'VCHAR:' => 'varchar2(%d)',
0158 'CHAR:' => 'char(%d)',
0159 'XSTEXT' => 'varchar2(1000)',
0160 'STEXT' => 'varchar2(3000)',
0161 'TEXT' => 'clob',
0162 'MTEXT' => 'clob',
0163 'XSTEXT_UNI'=> 'varchar2(300)',
0164 'STEXT_UNI' => 'varchar2(765)',
0165 'TEXT_UNI' => 'clob',
0166 'MTEXT_UNI' => 'clob',
0167 'TIMESTAMP' => 'number(11)',
0168 'DECIMAL' => 'number(5, 2)',
0169 'DECIMAL:' => 'number(%d, 2)',
0170 'PDECIMAL' => 'number(6, 3)',
0171 'PDECIMAL:' => 'number(%d, 3)',
0172 'VCHAR_UNI' => 'varchar2(765)',
0173 'VCHAR_UNI:'=> array('varchar2(%d)', 'limit' => array('mult', 3, 765, 'clob')),
0174 'VCHAR_CI' => 'varchar2(255)',
0175 'VARBINARY' => 'raw(255)',
0176 ),
0177
0178 'sqlite' => array(
0179 'INT:' => 'int(%d)',
0180 'BINT' => 'bigint(20)',
0181 'UINT' => 'INTEGER UNSIGNED', //'mediumint(8) UNSIGNED',
0182 'UINT:' => 'INTEGER UNSIGNED', // 'int(%d) UNSIGNED',
0183 'TINT:' => 'tinyint(%d)',
0184 'USINT' => 'INTEGER UNSIGNED', //'mediumint(4) UNSIGNED',
0185 'BOOL' => 'INTEGER UNSIGNED', //'tinyint(1) UNSIGNED',
0186 'VCHAR' => 'varchar(255)',
0187 'VCHAR:' => 'varchar(%d)',
0188 'CHAR:' => 'char(%d)',
0189 'XSTEXT' => 'text(65535)',
0190 'STEXT' => 'text(65535)',
0191 'TEXT' => 'text(65535)',
0192 'MTEXT' => 'mediumtext(16777215)',
0193 'XSTEXT_UNI'=> 'text(65535)',
0194 'STEXT_UNI' => 'text(65535)',
0195 'TEXT_UNI' => 'text(65535)',
0196 'MTEXT_UNI' => 'mediumtext(16777215)',
0197 'TIMESTAMP' => 'INTEGER UNSIGNED', //'int(11) UNSIGNED',
0198 'DECIMAL' => 'decimal(5,2)',
0199 'DECIMAL:' => 'decimal(%d,2)',
0200 'PDECIMAL' => 'decimal(6,3)',
0201 'PDECIMAL:' => 'decimal(%d,3)',
0202 'VCHAR_UNI' => 'varchar(255)',
0203 'VCHAR_UNI:'=> 'varchar(%d)',
0204 'VCHAR_CI' => 'varchar(255)',
0205 'VARBINARY' => 'blob',
0206 ),
0207
0208 'postgres' => array(
0209 'INT:' => 'INT4',
0210 'BINT' => 'INT8',
0211 'UINT' => 'INT4', // unsigned
0212 'UINT:' => 'INT4', // unsigned
0213 'USINT' => 'INT2', // unsigned
0214 'BOOL' => 'INT2', // unsigned
0215 'TINT:' => 'INT2',
0216 'VCHAR' => 'varchar(255)',
0217 'VCHAR:' => 'varchar(%d)',
0218 'CHAR:' => 'char(%d)',
0219 'XSTEXT' => 'varchar(1000)',
0220 'STEXT' => 'varchar(3000)',
0221 'TEXT' => 'varchar(8000)',
0222 'MTEXT' => 'TEXT',
0223 'XSTEXT_UNI'=> 'varchar(100)',
0224 'STEXT_UNI' => 'varchar(255)',
0225 'TEXT_UNI' => 'varchar(4000)',
0226 'MTEXT_UNI' => 'TEXT',
0227 'TIMESTAMP' => 'INT4', // unsigned
0228 'DECIMAL' => 'decimal(5,2)',
0229 'DECIMAL:' => 'decimal(%d,2)',
0230 'PDECIMAL' => 'decimal(6,3)',
0231 'PDECIMAL:' => 'decimal(%d,3)',
0232 'VCHAR_UNI' => 'varchar(255)',
0233 'VCHAR_UNI:'=> 'varchar(%d)',
0234 'VCHAR_CI' => 'varchar_ci',
0235 'VARBINARY' => 'bytea',
0236 ),
0237 );
0238
0239 // A list of types being unsigned for better reference in some db's
0240 $unsigned_types = array('UINT', 'UINT:', 'USINT', 'BOOL', 'TIMESTAMP');
0241 $supported_dbms = array('firebird', 'mssql', 'mysql_40', 'mysql_41', 'oracle', 'postgres', 'sqlite');
0242
0243 foreach ($supported_dbms as $dbms)
0244 {
0245 $fp = fopen($schema_path . '_' . $dbms . '_schema.sql', 'wt');
0246
0247 $line = '';
0248
0249 // Write Header
0250 switch ($dbms)
0251 {
0252 case 'mysql_40':
0253 case 'mysql_41':
0254 $line = "#\n# \$I" . "d: $\n#\n\n";
0255 break;
0256
0257 case 'firebird':
0258 $line = "#\n# \$I" . "d: $\n#\n\n";
0259 $line .= custom_data('firebird') . "\n";
0260 break;
0261
0262 case 'sqlite':
0263 $line = "#\n# \$I" . "d: $\n#\n\n";
0264 $line .= "BEGIN TRANSACTION;\n\n";
0265 break;
0266
0267 case 'mssql':
0268 $line = "/*\n\n \$I" . "d: $\n\n*/\n\n";
0269 $line .= "BEGIN TRANSACTION\nGO\n\n";
0270 break;
0271
0272 case 'oracle':
0273 $line = "/*\n\n \$I" . "d: $\n\n*/\n\n";
0274 $line .= custom_data('oracle') . "\n";
0275 break;
0276
0277 case 'postgres':
0278 $line = "/*\n\n \$I" . "d: $\n\n*/\n\n";
0279 $line .= "BEGIN;\n\n";
0280 $line .= custom_data('postgres') . "\n";
0281 break;
0282 }
0283
0284 fwrite($fp, $line);
0285
0286 foreach ($schema_data as $table_name => $table_data)
0287 {
0288 // Write comment about table
0289 switch ($dbms)
0290 {
0291 case 'mysql_40':
0292 case 'mysql_41':
0293 case 'firebird':
0294 case 'sqlite':
0295 fwrite($fp, "# Table: '{$table_name}'\n");
0296 break;
0297
0298 case 'mssql':
0299 case 'oracle':
0300 case 'postgres':
0301 fwrite($fp, "/*\n\tTable: '{$table_name}'\n*/\n");
0302 break;
0303 }
0304
0305 // Create Table statement
0306 $generator = $textimage = false;
0307 $line = '';
0308
0309 switch ($dbms)
0310 {
0311 case 'mysql_40':
0312 case 'mysql_41':
0313 case 'firebird':
0314 case 'oracle':
0315 case 'sqlite':
0316 case 'postgres':
0317 $line = "CREATE TABLE {$table_name} (\n";
0318 break;
0319
0320 case 'mssql':
0321 $line = "CREATE TABLE [{$table_name}] (\n";
0322 break;
0323 }
0324
0325 // Table specific so we don't get overlap
0326 $modded_array = array();
0327
0328 // Write columns one by one...
0329 foreach ($table_data['COLUMNS'] as $column_name => $column_data)
0330 {
0331 // Get type
0332 if (strpos($column_data[0], ':') !== false)
0333 {
0334 list($orig_column_type, $column_length) = explode(':', $column_data[0]);
0335 if (!is_array($dbms_type_map[$dbms][$orig_column_type . ':']))
0336 {
0337 $column_type = sprintf($dbms_type_map[$dbms][$orig_column_type . ':'], $column_length);
0338 }
0339 else
0340 {
0341 if (isset($dbms_type_map[$dbms][$orig_column_type . ':']['rule']))
0342 {
0343 switch ($dbms_type_map[$dbms][$orig_column_type . ':']['rule'][0])
0344 {
0345 case 'div':
0346 $column_length /= $dbms_type_map[$dbms][$orig_column_type . ':']['rule'][1];
0347 $column_length = ceil($column_length);
0348 $column_type = sprintf($dbms_type_map[$dbms][$orig_column_type . ':'][0], $column_length);
0349 break;
0350 }
0351 }
0352
0353 if (isset($dbms_type_map[$dbms][$orig_column_type . ':']['limit']))
0354 {
0355 switch ($dbms_type_map[$dbms][$orig_column_type . ':']['limit'][0])
0356 {
0357 case 'mult':
0358 $column_length *= $dbms_type_map[$dbms][$orig_column_type . ':']['limit'][1];
0359 if ($column_length > $dbms_type_map[$dbms][$orig_column_type . ':']['limit'][2])
0360 {
0361 $column_type = $dbms_type_map[$dbms][$orig_column_type . ':']['limit'][3];
0362 $modded_array[$column_name] = $column_type;
0363 }
0364 else
0365 {
0366 $column_type = sprintf($dbms_type_map[$dbms][$orig_column_type . ':'][0], $column_length);
0367 }
0368 break;
0369 }
0370 }
0371 }
0372 $orig_column_type .= ':';
0373 }
0374 else
0375 {
0376 $orig_column_type = $column_data[0];
0377 $column_type = $dbms_type_map[$dbms][$column_data[0]];
0378 if ($column_type == 'text' || $column_type == 'blob')
0379 {
0380 $modded_array[$column_name] = $column_type;
0381 }
0382 }
0383
0384 // Adjust default value if db-dependant specified
0385 if (is_array($column_data[1]))
0386 {
0387 $column_data[1] = (isset($column_data[1][$dbms])) ? $column_data[1][$dbms] : $column_data[1]['default'];
0388 }
0389
0390 switch ($dbms)
0391 {
0392 case 'mysql_40':
0393 case 'mysql_41':
0394 $line .= "\t{$column_name} {$column_type} ";
0395
0396 // For hexadecimal values do not use single quotes
0397 if (!is_null($column_data[1]) && substr($column_type, -4) !== 'text' && substr($column_type, -4) !== 'blob')
0398 {
0399 $line .= (strpos($column_data[1], '0x') === 0) ? "DEFAULT {$column_data[1]} " : "DEFAULT '{$column_data[1]}' ";
0400 }
0401 $line .= 'NOT NULL';
0402
0403 if (isset($column_data[2]))
0404 {
0405 if ($column_data[2] == 'auto_increment')
0406 {
0407 $line .= ' auto_increment';
0408 }
0409 else if ($dbms === 'mysql_41' && $column_data[2] == 'true_sort')
0410 {
0411 $line .= ' COLLATE utf8_unicode_ci';
0412 }
0413 }
0414
0415 $line .= ",\n";
0416 break;
0417
0418 case 'sqlite':
0419 if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
0420 {
0421 $line .= "\t{$column_name} INTEGER PRIMARY KEY ";
0422 $generator = $column_name;
0423 }
0424 else
0425 {
0426 $line .= "\t{$column_name} {$column_type} ";
0427 }
0428
0429 $line .= 'NOT NULL ';
0430 $line .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}'" : '';
0431 $line .= ",\n";
0432 break;
0433
0434 case 'firebird':
0435 $line .= "\t{$column_name} {$column_type} ";
0436
0437 if (!is_null($column_data[1]))
0438 {
0439 $line .= 'DEFAULT ' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ' ';
0440 }
0441
0442 $line .= 'NOT NULL';
0443
0444 // This is a UNICODE column and thus should be given it's fair share
0445 if (preg_match('/^X?STEXT_UNI|VCHAR_(CI|UNI:?)/', $column_data[0]))
0446 {
0447 $line .= ' COLLATE UNICODE';
0448 }
0449
0450 $line .= ",\n";
0451
0452 if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
0453 {
0454 $generator = $column_name;
0455 }
0456 break;
0457
0458 case 'mssql':
0459 if ($column_type == '[text]')
0460 {
0461 $textimage = true;
0462 }
0463
0464 $line .= "\t[{$column_name}] {$column_type} ";
0465
0466 if (!is_null($column_data[1]))
0467 {
0468 // For hexadecimal values do not use single quotes
0469 if (strpos($column_data[1], '0x') === 0)
0470 {
0471 $line .= 'DEFAULT (' . $column_data[1] . ') ';
0472 }
0473 else
0474 {
0475 $line .= 'DEFAULT (' . ((is_numeric($column_data[1])) ? $column_data[1] : "'{$column_data[1]}'") . ') ';
0476 }
0477 }
0478
0479 if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
0480 {
0481 $line .= 'IDENTITY (1, 1) ';
0482 }
0483
0484 $line .= 'NOT NULL';
0485 $line .= " ,\n";
0486 break;
0487
0488 case 'oracle':
0489 $line .= "\t{$column_name} {$column_type} ";
0490 $line .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : '';
0491
0492 // In Oracle empty strings ('') are treated as NULL.
0493 // Therefore in oracle we allow NULL's for all DEFAULT '' entries
0494 $line .= ($column_data[1] === '') ? ",\n" : "NOT NULL,\n";
0495
0496 if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
0497 {
0498 $generator = $column_name;
0499 }
0500 break;
0501
0502 case 'postgres':
0503 $line .= "\t{$column_name} {$column_type} ";
0504
0505 if (isset($column_data[2]) && $column_data[2] == 'auto_increment')
0506 {
0507 $line .= "DEFAULT nextval('{$table_name}_seq'),\n";
0508
0509 // Make sure the sequence will be created before creating the table
0510 $line = "CREATE SEQUENCE {$table_name}_seq;\n\n" . $line;
0511 }
0512 else
0513 {
0514 $line .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}' " : '';
0515 $line .= "NOT NULL";
0516
0517 // Unsigned? Then add a CHECK contraint
0518 if (in_array($orig_column_type, $unsigned_types))
0519 {
0520 $line .= " CHECK ({$column_name} >= 0)";
0521 }
0522
0523 $line .= ",\n";
0524 }
0525 break;
0526 }
0527 }
0528
0529 switch ($dbms)
0530 {
0531 case 'firebird':
0532 // Remove last line delimiter...
0533 $line = substr($line, 0, -2);
0534 $line .= "\n);;\n\n";
0535 break;
0536
0537 case 'mssql':
0538 $line = substr($line, 0, -2);
0539 $line .= "\n) ON [PRIMARY]" . (($textimage) ? ' TEXTIMAGE_ON [PRIMARY]' : '') . "\n";
0540 $line .= "GO\n\n";
0541 break;
0542 }
0543
0544 // Write primary key
0545 if (isset($table_data['PRIMARY_KEY']))
0546 {
0547 if (!is_array($table_data['PRIMARY_KEY']))
0548 {
0549 $table_data['PRIMARY_KEY'] = array($table_data['PRIMARY_KEY']);
0550 }
0551
0552 switch ($dbms)
0553 {
0554 case 'mysql_40':
0555 case 'mysql_41':
0556 case 'postgres':
0557 $line .= "\tPRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n";
0558 break;
0559
0560 case 'firebird':
0561 $line .= "ALTER TABLE {$table_name} ADD PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . ");;\n\n";
0562 break;
0563
0564 case 'sqlite':
0565 if ($generator === false || !in_array($generator, $table_data['PRIMARY_KEY']))
0566 {
0567 $line .= "\tPRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n";
0568 }
0569 break;
0570
0571 case 'mssql':
0572 $line .= "ALTER TABLE [{$table_name}] WITH NOCHECK ADD \n";
0573 $line .= "\tCONSTRAINT [PK_{$table_name}] PRIMARY KEY CLUSTERED \n";
0574 $line .= "\t(\n";
0575 $line .= "\t\t[" . implode("],\n\t\t[", $table_data['PRIMARY_KEY']) . "]\n";
0576 $line .= "\t) ON [PRIMARY] \n";
0577 $line .= "GO\n\n";
0578 break;
0579
0580 case 'oracle':
0581 $line .= "\tCONSTRAINT pk_{$table_name} PRIMARY KEY (" . implode(', ', $table_data['PRIMARY_KEY']) . "),\n";
0582 break;
0583 }
0584 }
0585
0586 switch ($dbms)
0587 {
0588 case 'oracle':
0589 // UNIQUE contrains to be added?
0590 if (isset($table_data['KEYS']))
0591 {
0592 foreach ($table_data['KEYS'] as $key_name => $key_data)
0593 {
0594 if (!is_array($key_data[1]))
0595 {
0596 $key_data[1] = array($key_data[1]);
0597 }
0598
0599 if ($key_data[0] == 'UNIQUE')
0600 {
0601 $line .= "\tCONSTRAINT u_phpbb_{$key_name} UNIQUE (" . implode(', ', $key_data[1]) . "),\n";
0602 }
0603 }
0604 }
0605
0606 // Remove last line delimiter...
0607 $line = substr($line, 0, -2);
0608 $line .= "\n)\n/\n\n";
0609 break;
0610
0611 case 'postgres':
0612 // Remove last line delimiter...
0613 $line = substr($line, 0, -2);
0614 $line .= "\n);\n\n";
0615 break;
0616
0617 case 'sqlite':
0618 // Remove last line delimiter...
0619 $line = substr($line, 0, -2);
0620 $line .= "\n);\n\n";
0621 break;
0622 }
0623
0624 // Write Keys
0625 if (isset($table_data['KEYS']))
0626 {
0627 foreach ($table_data['KEYS'] as $key_name => $key_data)
0628 {
0629 if (!is_array($key_data[1]))
0630 {
0631 $key_data[1] = array($key_data[1]);
0632 }
0633
0634 switch ($dbms)
0635 {
0636 case 'mysql_40':
0637 case 'mysql_41':
0638 $line .= ($key_data[0] == 'INDEX') ? "\tKEY" : '';
0639 $line .= ($key_data[0] == 'UNIQUE') ? "\tUNIQUE" : '';
0640 foreach ($key_data[1] as $key => $col_name)
0641 {
0642 if (isset($modded_array[$col_name]))
0643 {
0644 switch ($modded_array[$col_name])
0645 {
0646 case 'text':
0647 case 'blob':
0648 $key_data[1][$key] = $col_name . '(255)';
0649 break;
0650 }
0651 }
0652 }
0653 $line .= ' ' . $key_name . ' (' . implode(', ', $key_data[1]) . "),\n";
0654 break;
0655
0656 case 'firebird':
0657 $line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
0658 $line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
0659
0660 $line .= ' ' . $table_name . '_' . $key_name . ' ON ' . $table_name . '(' . implode(', ', $key_data[1]) . ");;\n";
0661 break;
0662
0663 case 'mssql':
0664 $line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
0665 $line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
0666 $line .= " [{$key_name}] ON [{$table_name}]([" . implode('], [', $key_data[1]) . "]) ON [PRIMARY]\n";
0667 $line .= "GO\n\n";
0668 break;
0669
0670 case 'oracle':
0671 if ($key_data[0] == 'UNIQUE')
0672 {
0673 continue;
0674 }
0675
0676 $line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
0677
0678 $line .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ")\n";
0679 $line .= "/\n";
0680 break;
0681
0682 case 'sqlite':
0683 $line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
0684 $line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
0685
0686 $line .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ");\n";
0687 break;
0688
0689 case 'postgres':
0690 $line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
0691 $line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
0692
0693 $line .= " {$table_name}_{$key_name} ON {$table_name} (" . implode(', ', $key_data[1]) . ");\n";
0694 break;
0695 }
0696 }
0697 }
0698
0699 switch ($dbms)
0700 {
0701 case 'mysql_40':
0702 // Remove last line delimiter...
0703 $line = substr($line, 0, -2);
0704 $line .= "\n);\n\n";
0705 break;
0706
0707 case 'mysql_41':
0708 // Remove last line delimiter...
0709 $line = substr($line, 0, -2);
0710 $line .= "\n) CHARACTER SET `utf8` COLLATE `utf8_bin`;\n\n";
0711 break;
0712
0713 // Create Generator
0714 case 'firebird':
0715 if ($generator !== false)
0716 {
0717 $line .= "\nCREATE GENERATOR {$table_name}_gen;;\n";
0718 $line .= 'SET GENERATOR ' . $table_name . "_gen TO 0;;\n\n";
0719
0720 $line .= 'CREATE TRIGGER t_' . $table_name . ' FOR ' . $table_name . "\n";
0721 $line .= "BEFORE INSERT\nAS\nBEGIN\n";
0722 $line .= "\tNEW.{$generator} = GEN_ID({$table_name}_gen, 1);\nEND;;\n\n";
0723 }
0724 break;
0725
0726 case 'oracle':
0727 if ($generator !== false)
0728 {
0729 $line .= "\nCREATE SEQUENCE {$table_name}_seq\n/\n\n";
0730
0731 $line .= "CREATE OR REPLACE TRIGGER t_{$table_name}\n";
0732 $line .= "BEFORE INSERT ON {$table_name}\n";
0733 $line .= "FOR EACH ROW WHEN (\n";
0734 $line .= "\tnew.{$generator} IS NULL OR new.{$generator} = 0\n";
0735 $line .= ")\nBEGIN\n";
0736 $line .= "\tSELECT {$table_name}_seq.nextval\n";
0737 $line .= "\tINTO :new.{$generator}\n";
0738 $line .= "\tFROM dual;\nEND;\n/\n\n";
0739 }
0740 break;
0741 }
0742
0743 fwrite($fp, $line . "\n");
0744 }
0745
0746 $line = '';
0747
0748 // Write custom function at the end for some db's
0749 switch ($dbms)
0750 {
0751 case 'mssql':
0752 $line = "\nCOMMIT\nGO\n\n";
0753 break;
0754
0755 case 'sqlite':
0756 $line = "\nCOMMIT;";
0757 break;
0758
0759 case 'postgres':
0760 $line = "\nCOMMIT;";
0761 break;
0762 }
0763
0764 fwrite($fp, $line);
0765 fclose($fp);
0766 }
0767
0768
0769 /**
0770 * Define the basic structure
0771 * The format:
0772 * array('{TABLE_NAME}' => {TABLE_DATA})
0773 * {TABLE_DATA}:
0774 * COLUMNS = array({column_name} = array({column_type}, {default}, {auto_increment}))
0775 * PRIMARY_KEY = {column_name(s)}
0776 * KEYS = array({key_name} = array({key_type}, {column_name(s)})),
0777 *
0778 * Column Types:
0779 * INT:x => SIGNED int(x)
0780 * BINT => BIGINT
0781 * UINT => mediumint(8) UNSIGNED
0782 * UINT:x => int(x) UNSIGNED
0783 * TINT:x => tinyint(x)
0784 * USINT => smallint(4) UNSIGNED (for _order columns)
0785 * BOOL => tinyint(1) UNSIGNED
0786 * VCHAR => varchar(255)
0787 * CHAR:x => char(x)
0788 * XSTEXT_UNI => text for storing 100 characters (topic_title for example)
0789 * STEXT_UNI => text for storing 255 characters (normal input field with a max of 255 single-byte chars) - same as VCHAR_UNI
0790 * TEXT_UNI => text for storing 3000 characters (short text, descriptions, comments, etc.)
0791 * MTEXT_UNI => mediumtext (post text, large text)
0792 * VCHAR:x => varchar(x)
0793 * TIMESTAMP => int(11) UNSIGNED
0794 * DECIMAL => decimal number (5,2)
0795 * DECIMAL: => decimal number (x,2)
0796 * PDECIMAL => precision decimal number (6,3)
0797 * PDECIMAL: => precision decimal number (x,3)
0798 * VCHAR_UNI => varchar(255) BINARY
0799 * VCHAR_CI => varchar_ci for postgresql, others VCHAR
0800 */
0801 function get_schema_struct()
0802 {
0803 $schema_data = array();
0804
0805 $schema_data['phpbb_attachments'] = array(
0806 'COLUMNS' => array(
0807 'attach_id' => array('UINT', NULL, 'auto_increment'),
0808 'post_msg_id' => array('UINT', 0),
0809 'topic_id' => array('UINT', 0),
0810 'in_message' => array('BOOL', 0),
0811 'poster_id' => array('UINT', 0),
0812 'is_orphan' => array('BOOL', 1),
0813 'physical_filename' => array('VCHAR', ''),
0814 'real_filename' => array('VCHAR', ''),
0815 'download_count' => array('UINT', 0),
0816 'attach_comment' => array('TEXT_UNI', ''),
0817 'extension' => array('VCHAR:100', ''),
0818 'mimetype' => array('VCHAR:100', ''),
0819 'filesize' => array('UINT:20', 0),
0820 'filetime' => array('TIMESTAMP', 0),
0821 'thumbnail' => array('BOOL', 0),
0822 ),
0823 'PRIMARY_KEY' => 'attach_id',
0824 'KEYS' => array(
0825 'filetime' => array('INDEX', 'filetime'),
0826 'post_msg_id' => array('INDEX', 'post_msg_id'),
0827 'topic_id' => array('INDEX', 'topic_id'),
0828 'poster_id' => array('INDEX', 'poster_id'),
0829 'is_orphan' => array('INDEX', 'is_orphan'),
0830 ),
0831 );
0832
0833 $schema_data['phpbb_acl_groups'] = array(
0834 'COLUMNS' => array(
0835 'group_id' => array('UINT', 0),
0836 'forum_id' => array('UINT', 0),
0837 'auth_option_id' => array('UINT', 0),
0838 'auth_role_id' => array('UINT', 0),
0839 'auth_setting' => array('TINT:2', 0),
0840 ),
0841 'KEYS' => array(
0842 'group_id' => array('INDEX', 'group_id'),
0843 'auth_opt_id' => array('INDEX', 'auth_option_id'),
0844 'auth_role_id' => array('INDEX', 'auth_role_id'),
0845 ),
0846 );
0847
0848 $schema_data['phpbb_acl_options'] = array(
0849 'COLUMNS' => array(
0850 'auth_option_id' => array('UINT', NULL, 'auto_increment'),
0851 'auth_option' => array('VCHAR:50', ''),
0852 'is_global' => array('BOOL', 0),
0853 'is_local' => array('BOOL', 0),
0854 'founder_only' => array('BOOL', 0),
0855 ),
0856 'PRIMARY_KEY' => 'auth_option_id',
0857 'KEYS' => array(
0858 'auth_option' => array('INDEX', 'auth_option'),
0859 ),
0860 );
0861
0862 $schema_data['phpbb_acl_roles'] = array(
0863 'COLUMNS' => array(
0864 'role_id' => array('UINT', NULL, 'auto_increment'),
0865 'role_name' => array('VCHAR_UNI', ''),
0866 'role_description' => array('TEXT_UNI', ''),
0867 'role_type' => array('VCHAR:10', ''),
0868 'role_order' => array('USINT', 0),
0869 ),
0870 'PRIMARY_KEY' => 'role_id',
0871 'KEYS' => array(
0872 'role_type' => array('INDEX', 'role_type'),
0873 'role_order' => array('INDEX', 'role_order'),
0874 ),
0875 );
0876
0877 $schema_data['phpbb_acl_roles_data'] = array(
0878 'COLUMNS' => array(
0879 'role_id' => array('UINT', 0),
0880 'auth_option_id' => array('UINT', 0),
0881 'auth_setting' => array('TINT:2', 0),
0882 ),
0883 'PRIMARY_KEY' => array('role_id', 'auth_option_id'),
0884 'KEYS' => array(
0885 'ath_op_id' => array('INDEX', 'auth_option_id'),
0886 ),
0887 );
0888
0889 $schema_data['phpbb_acl_users'] = array(
0890 'COLUMNS' => array(
0891 'user_id' => array('UINT', 0),
0892 'forum_id' => array('UINT', 0),
0893 'auth_option_id' => array('UINT', 0),
0894 'auth_role_id' => array('UINT', 0),
0895 'auth_setting' => array('TINT:2', 0),
0896 ),
0897 'KEYS' => array(
0898 'user_id' => array('INDEX', 'user_id'),
0899 'auth_option_id' => array('INDEX', 'auth_option_id'),
0900 'auth_role_id' => array('INDEX', 'auth_role_id'),
0901 ),
0902 );
0903
0904 $schema_data['phpbb_banlist'] = array(
0905 'COLUMNS' => array(
0906 'ban_id' => array('UINT', NULL, 'auto_increment'),
0907 'ban_userid' => array('UINT', 0),
0908 'ban_ip' => array('VCHAR:40', ''),
0909 'ban_email' => array('VCHAR_UNI:100', ''),
0910 'ban_start' => array('TIMESTAMP', 0),
0911 'ban_end' => array('TIMESTAMP', 0),
0912 'ban_exclude' => array('BOOL', 0),
0913 'ban_reason' => array('VCHAR_UNI', ''),
0914 'ban_give_reason' => array('VCHAR_UNI', ''),
0915 ),
0916 'PRIMARY_KEY' => 'ban_id',
0917 'KEYS' => array(
0918 'ban_end' => array('INDEX', 'ban_end'),
0919 'ban_user' => array('INDEX', array('ban_userid', 'ban_exclude')),
0920 'ban_email' => array('INDEX', array('ban_email', 'ban_exclude')),
0921 'ban_ip' => array('INDEX', array('ban_ip', 'ban_exclude')),
0922 ),
0923 );
0924
0925 $schema_data['phpbb_bbcodes'] = array(
0926 'COLUMNS' => array(
0927 'bbcode_id' => array('TINT:3', 0),
0928 'bbcode_tag' => array('VCHAR:16', ''),
0929 'bbcode_helpline' => array('VCHAR_UNI', ''),
0930 'display_on_posting' => array('BOOL', 0),
0931 'bbcode_match' => array('TEXT_UNI', ''),
0932 'bbcode_tpl' => array('MTEXT_UNI', ''),
0933 'first_pass_match' => array('MTEXT_UNI', ''),
0934 'first_pass_replace' => array('MTEXT_UNI', ''),
0935 'second_pass_match' => array('MTEXT_UNI', ''),
0936 'second_pass_replace' => array('MTEXT_UNI', ''),
0937 ),
0938 'PRIMARY_KEY' => 'bbcode_id',
0939 'KEYS' => array(
0940 'display_on_post' => array('INDEX', 'display_on_posting'),
0941 ),
0942 );
0943
0944 $schema_data['phpbb_bookmarks'] = array(
0945 'COLUMNS' => array(
0946 'topic_id' => array('UINT', 0),
0947 'user_id' => array('UINT', 0),
0948 ),
0949 'PRIMARY_KEY' => array('topic_id', 'user_id'),
0950 );
0951
0952 $schema_data['phpbb_bots'] = array(
0953 'COLUMNS' => array(
0954 'bot_id' => array('UINT', NULL, 'auto_increment'),
0955 'bot_active' => array('BOOL', 1),
0956 'bot_name' => array('STEXT_UNI', ''),
0957 'user_id' => array('UINT', 0),
0958 'bot_agent' => array('VCHAR', ''),
0959 'bot_ip' => array('VCHAR', ''),
0960 ),
0961 'PRIMARY_KEY' => 'bot_id',
0962 'KEYS' => array(
0963 'bot_active' => array('INDEX', 'bot_active'),
0964 ),
0965 );
0966
0967 $schema_data['phpbb_config'] = array(
0968 'COLUMNS' => array(
0969 'config_name' => array('VCHAR', ''),
0970 'config_value' => array('VCHAR_UNI', ''),
0971 'is_dynamic' => array('BOOL', 0),
0972 ),
0973 'PRIMARY_KEY' => 'config_name',
0974 'KEYS' => array(
0975 'is_dynamic' => array('INDEX', 'is_dynamic'),
0976 ),
0977 );
0978
0979 $schema_data['phpbb_confirm'] = array(
0980 'COLUMNS' => array(
0981 'confirm_id' => array('CHAR:32', ''),
0982 'session_id' => array('CHAR:32', ''),
0983 'confirm_type' => array('TINT:3', 0),
0984 'code' => array('VCHAR:8', ''),
0985 'seed' => array('UINT:10', 0),
0986 ),
0987 'PRIMARY_KEY' => array('session_id', 'confirm_id'),
0988 'KEYS' => array(
0989 'confirm_type' => array('INDEX', 'confirm_type'),
0990 ),
0991 );
0992
0993 $schema_data['phpbb_disallow'] = array(
0994 'COLUMNS' => array(
0995 'disallow_id' => array('UINT', NULL, 'auto_increment'),
0996 'disallow_username' => array('VCHAR_UNI:255', ''),
0997 ),
0998 'PRIMARY_KEY' => 'disallow_id',
0999 );
1000
1001 $schema_data['phpbb_drafts'] = array(
1002 'COLUMNS' => array(
1003 'draft_id' => array('UINT', NULL, 'auto_increment'),
1004 'user_id' => array('UINT', 0),
1005 'topic_id' => array('UINT', 0),
1006 'forum_id' => array('UINT', 0),
1007 'save_time' => array('TIMESTAMP', 0),
1008 'draft_subject' => array('XSTEXT_UNI', ''),
1009 'draft_message' => array('MTEXT_UNI', ''),
1010 ),
1011 'PRIMARY_KEY' => 'draft_id',
1012 'KEYS' => array(
1013 'save_time' => array('INDEX', 'save_time'),
1014 ),
1015 );
1016
1017 $schema_data['phpbb_extensions'] = array(
1018 'COLUMNS' => array(
1019 'extension_id' => array('UINT', NULL, 'auto_increment'),
1020 'group_id' => array('UINT', 0),
1021 'extension' => array('VCHAR:100', ''),
1022 ),
1023 'PRIMARY_KEY' => 'extension_id',
1024 );
1025
1026 $schema_data['phpbb_extension_groups'] = array(
1027 'COLUMNS' => array(
1028 'group_id' => array('UINT', NULL, 'auto_increment'),
1029 'group_name' => array('VCHAR_UNI', ''),
1030 'cat_id' => array('TINT:2', 0),
1031 'allow_group' => array('BOOL', 0),
1032 'download_mode' => array('BOOL', 1),
1033 'upload_icon' => array('VCHAR', ''),
1034 'max_filesize' => array('UINT:20', 0),
1035 'allowed_forums' => array('TEXT', ''),
1036 'allow_in_pm' => array('BOOL', 0),
1037 ),
1038 'PRIMARY_KEY' => 'group_id',
1039 );
1040
1041 $schema_data['phpbb_forums'] = array(
1042 'COLUMNS' => array(
1043 'forum_id' => array('UINT', NULL, 'auto_increment'),
1044 'parent_id' => array('UINT', 0),
1045 'left_id' => array('UINT', 0),
1046 'right_id' => array('UINT', 0),
1047 'forum_parents' => array('MTEXT', ''),
1048 'forum_name' => array('STEXT_UNI', ''),
1049 'forum_desc' => array('TEXT_UNI', ''),
1050 'forum_desc_bitfield' => array('VCHAR:255', ''),
1051 'forum_desc_options' => array('UINT:11', 7),
1052 'forum_desc_uid' => array('VCHAR:8', ''),
1053 'forum_link' => array('VCHAR_UNI', ''),
1054 'forum_password' => array('VCHAR_UNI:40', ''),
1055 'forum_style' => array('USINT', 0),
1056 'forum_image' => array('VCHAR', ''),
1057 'forum_rules' => array('TEXT_UNI', ''),
1058 'forum_rules_link' => array('VCHAR_UNI', ''),
1059 'forum_rules_bitfield' => array('VCHAR:255', ''),
1060 'forum_rules_options' => array('UINT:11', 7),
1061 'forum_rules_uid' => array('VCHAR:8', ''),
1062 'forum_topics_per_page' => array('TINT:4', 0),
1063 'forum_type' => array('TINT:4', 0),
1064 'forum_status' => array('TINT:4', 0),
1065 'forum_posts' => array('UINT', 0),
1066 'forum_topics' => array('UINT', 0),
1067 'forum_topics_real' => array('UINT', 0),
1068 'forum_last_post_id' => array('UINT', 0),
1069 'forum_last_poster_id' => array('UINT', 0),
1070 'forum_last_post_subject' => array('XSTEXT_UNI', ''),
1071 'forum_last_post_time' => array('TIMESTAMP', 0),
1072 'forum_last_poster_name'=> array('VCHAR_UNI', ''),
1073 'forum_last_poster_colour'=> array('VCHAR:6', ''),
1074 'forum_flags' => array('TINT:4', 32),
1075 'display_on_index' => array('BOOL', 1),
1076 'enable_indexing' => array('BOOL', 1),
1077 'enable_icons' => array('BOOL', 1),
1078 'enable_prune' => array('BOOL', 0),
1079 'prune_next' => array('TIMESTAMP', 0),
1080 'prune_days' => array('UINT', 0),
1081 'prune_viewed' => array('UINT', 0),
1082 'prune_freq' => array('UINT', 0),
1083 ),
1084 'PRIMARY_KEY' => 'forum_id',
1085 'KEYS' => array(
1086 'left_right_id' => array('INDEX', array('left_id', 'right_id')),
1087 'forum_lastpost_id' => array('INDEX', 'forum_last_post_id'),
1088 ),
1089 );
1090
1091 $schema_data['phpbb_forums_access'] = array(
1092 'COLUMNS' => array(
1093 'forum_id' => array('UINT', 0),
1094 'user_id' => array('UINT', 0),
1095 'session_id' => array('CHAR:32', ''),
1096 ),
1097 'PRIMARY_KEY' => array('forum_id', 'user_id', 'session_id'),
1098 );
1099
1100 $schema_data['phpbb_forums_track'] = array(
1101 'COLUMNS' => array(
1102 'user_id' => array('UINT', 0),
1103 'forum_id' => array('UINT', 0),
1104 'mark_time' => array('TIMESTAMP', 0),
1105 ),
1106 'PRIMARY_KEY' => array('user_id', 'forum_id'),
1107 );
1108
1109 $schema_data['phpbb_forums_watch'] = array(
1110 'COLUMNS' => array(
1111 'forum_id' => array('UINT', 0),
1112 'user_id' => array('UINT', 0),
1113 'notify_status' => array('BOOL', 0),
1114 ),
1115 'KEYS' => array(
1116 'forum_id' => array('INDEX', 'forum_id'),
1117 'user_id' => array('INDEX', 'user_id'),
1118 'notify_stat' => array('INDEX', 'notify_status'),
1119 ),
1120 );
1121
1122 $schema_data['phpbb_groups'] = array(
1123 'COLUMNS' => array(
1124 'group_id' => array('UINT', NULL, 'auto_increment'),
1125 'group_type' => array('TINT:4', 1),
1126 'group_founder_manage' => array('BOOL', 0),
1127 'group_name' => array('VCHAR_CI', ''),
1128 'group_desc' => array('TEXT_UNI', ''),
1129 'group_desc_bitfield' => array('VCHAR:255', ''),
1130 'group_desc_options' => array('UINT:11', 7),
1131 'group_desc_uid' => array('VCHAR:8', ''),
1132 'group_display' => array('BOOL', 0),
1133 'group_avatar' => array('VCHAR', ''),
1134 'group_avatar_type' => array('TINT:2', 0),
1135 'group_avatar_width' => array('USINT', 0),
1136 'group_avatar_height' => array('USINT', 0),
1137 'group_rank' => array('UINT', 0),
1138 'group_colour' => array('VCHAR:6', ''),
1139 'group_sig_chars' => array('UINT', 0),
1140 'group_receive_pm' => array('BOOL', 0),
1141 'group_message_limit' => array('UINT', 0),
1142 'group_legend' => array('BOOL', 1),
1143 ),
1144 'PRIMARY_KEY' => 'group_id',
1145 'KEYS' => array(
1146 'group_legend' => array('INDEX', 'group_legend'),
1147 ),
1148 );
1149
1150 $schema_data['phpbb_icons'] = array(
1151 'COLUMNS' => array(
1152 'icons_id' => array('UINT', NULL, 'auto_increment'),
1153 'icons_url' => array('VCHAR', ''),
1154 'icons_width' => array('TINT:4', 0),
1155 'icons_height' => array('TINT:4', 0),
1156 'icons_order' => array('UINT', 0),
1157 'display_on_posting' => array('BOOL', 1),
1158 ),
1159 'PRIMARY_KEY' => 'icons_id',
1160 'KEYS' => array(
1161 'display_on_posting' => array('INDEX', 'display_on_posting'),
1162 ),
1163 );
1164
1165 $schema_data['phpbb_lang'] = array(
1166 'COLUMNS' => array(
1167 'lang_id' => array('TINT:4', NULL, 'auto_increment'),
1168 'lang_iso' => array('VCHAR:30', ''),
1169 'lang_dir' => array('VCHAR:30', ''),
1170 'lang_english_name' => array('VCHAR_UNI:100', ''),
1171 'lang_local_name' => array('VCHAR_UNI:255', ''),
1172 'lang_author' => array('VCHAR_UNI:255', ''),
1173 ),
1174 'PRIMARY_KEY' => 'lang_id',
1175 'KEYS' => array(
1176 'lang_iso' => array('INDEX', 'lang_iso'),
1177 ),
1178 );
1179
1180 $schema_data['phpbb_log'] = array(
1181 'COLUMNS' => array(
1182 'log_id' => array('UINT', NULL, 'auto_increment'),
1183 'log_type' => array('TINT:4', 0),
1184 'user_id' => array('UINT', 0),
1185 'forum_id' => array('UINT', 0),
1186 'topic_id' => array('UINT', 0),
1187 'reportee_id' => array('UINT', 0),
1188 'log_ip' => array('VCHAR:40', ''),
1189 'log_time' => array('TIMESTAMP', 0),
1190 'log_operation' => array('TEXT_UNI', ''),
1191 'log_data' => array('MTEXT_UNI', ''),
1192 ),
1193 'PRIMARY_KEY' => 'log_id',
1194 'KEYS' => array(
1195 'log_type' => array('INDEX', 'log_type'),
1196 'forum_id' => array('INDEX', 'forum_id'),
1197 'topic_id' => array('INDEX', 'topic_id'),
1198 'reportee_id' => array('INDEX', 'reportee_id'),
1199 'user_id' => array('INDEX', 'user_id'),
1200 ),
1201 );
1202
1203 $schema_data['phpbb_moderator_cache'] = array(
1204 'COLUMNS' => array(
1205 'forum_id' => array('UINT', 0),
1206 'user_id' => array('UINT', 0),
1207 'username' => array('VCHAR_UNI:255', ''),
1208 'group_id' => array('UINT', 0),
1209 'group_name' => array('VCHAR_UNI', ''),
1210 'display_on_index' => array('BOOL', 1),
1211 ),
1212 'KEYS' => array(
1213 'disp_idx' => array('INDEX', 'display_on_index'),
1214 'forum_id' => array('INDEX', 'forum_id'),
1215 ),
1216 );
1217
1218 $schema_data['phpbb_modules'] = array(
1219 'COLUMNS' => array(
1220 'module_id' => array('UINT', NULL, 'auto_increment'),
1221 'module_enabled' => array('BOOL', 1),
1222 'module_display' => array('BOOL', 1),
1223 'module_basename' => array('VCHAR', ''),
1224 'module_class' => array('VCHAR:10', ''),
1225 'parent_id' => array('UINT', 0),
1226 'left_id' => array('UINT', 0),
1227 'right_id' => array('UINT', 0),
1228 'module_langname' => array('VCHAR', ''),
1229 'module_mode' => array('VCHAR', ''),
1230 'module_auth' => array('VCHAR', ''),
1231 ),
1232 'PRIMARY_KEY' => 'module_id',
1233 'KEYS' => array(
1234 'left_right_id' => array('INDEX', array('left_id', 'right_id')),
1235 'module_enabled' => array('INDEX', 'module_enabled'),
1236 'class_left_id' => array('INDEX', array('module_class', 'left_id')),
1237 ),
1238 );
1239
1240 $schema_data['phpbb_poll_options'] = array(
1241 'COLUMNS' => array(
1242 'poll_option_id' => array('TINT:4', 0),
1243 'topic_id' => array('UINT', 0),
1244 'poll_option_text' => array('TEXT_UNI', ''),
1245 'poll_option_total' => array('UINT', 0),
1246 ),
1247 'KEYS' => array(
1248 'poll_opt_id' => array('INDEX', 'poll_option_id'),
1249 'topic_id' => array('INDEX', 'topic_id'),
1250 ),
1251 );
1252
1253 $schema_data['phpbb_poll_votes'] = array(
1254 'COLUMNS' => array(
1255 'topic_id' => array('UINT', 0),
1256 'poll_option_id' => array('TINT:4', 0),
1257 'vote_user_id' => array('UINT', 0),
1258 'vote_user_ip' => array('VCHAR:40', ''),
1259 ),
1260 'KEYS' => array(
1261 'topic_id' => array('INDEX', 'topic_id'),
1262 'vote_user_id' => array('INDEX', 'vote_user_id'),
1263 'vote_user_ip' => array('INDEX', 'vote_user_ip'),
1264 ),
1265 );
1266
1267 $schema_data['phpbb_posts'] = array(
1268 'COLUMNS' => array(
1269 'post_id' => array('UINT', NULL, 'auto_increment'),
1270 'topic_id' => array('UINT', 0),
1271 'forum_id' => array('UINT', 0),
1272 'poster_id' => array('UINT', 0),
1273 'icon_id' => array('UINT', 0),
1274 'poster_ip' => array('VCHAR:40', ''),
1275 'post_time' => array('TIMESTAMP', 0),
1276 'post_approved' => array('BOOL', 1),
1277 'post_reported' => array('BOOL', 0),
1278 'enable_bbcode' => array('BOOL', 1),
1279 'enable_smilies' => array('BOOL', 1),
1280 'enable_magic_url' => array('BOOL', 1),
1281 'enable_sig' => array('BOOL', 1),
1282 'post_username' => array('VCHAR_UNI:255', ''),
1283 'post_subject' => array('XSTEXT_UNI', '', 'true_sort'),
1284 'post_text' => array('MTEXT_UNI', ''),
1285 'post_checksum' => array('VCHAR:32', ''),
1286 'post_attachment' => array('BOOL', 0),
1287 'bbcode_bitfield' => array('VCHAR:255', ''),
1288 'bbcode_uid' => array('VCHAR:8', ''),
1289 'post_postcount' => array('BOOL', 1),
1290 'post_edit_time' => array('TIMESTAMP', 0),
1291 'post_edit_reason' => array('STEXT_UNI', ''),
1292 'post_edit_user' => array('UINT', 0),
1293 'post_edit_count' => array('USINT', 0),
1294 'post_edit_locked' => array('BOOL', 0),
1295 ),
1296 'PRIMARY_KEY' => 'post_id',
1297 'KEYS' => array(
1298 'forum_id' => array('INDEX', 'forum_id'),
1299 'topic_id' => array('INDEX', 'topic_id'),
1300 'poster_ip' => array('INDEX', 'poster_ip'),
1301 'poster_id' => array('INDEX', 'poster_id'),
1302 'post_approved' => array('INDEX', 'post_approved'),
1303 'tid_post_time' => array('INDEX', array('topic_id', 'post_time')),
1304 ),
1305 );
1306
1307 $schema_data['phpbb_privmsgs'] = array(
1308 'COLUMNS' => array(
1309 'msg_id' => array('UINT', NULL, 'auto_increment'),
1310 'root_level' => array('UINT', 0),
1311 'author_id' => array('UINT', 0),
1312 'icon_id' => array('UINT', 0),
1313 'author_ip' => array('VCHAR:40', ''),
1314 'message_time' => array('TIMESTAMP', 0),
1315 'enable_bbcode' => array('BOOL', 1),
1316 'enable_smilies' => array('BOOL', 1),
1317 'enable_magic_url' => array('BOOL', 1),
1318 'enable_sig' => array('BOOL', 1),
1319 'message_subject' => array('XSTEXT_UNI', ''),
1320 'message_text' => array('MTEXT_UNI', ''),
1321 'message_edit_reason' => array('STEXT_UNI', ''),
1322 'message_edit_user' => array('UINT', 0),
1323 'message_attachment' => array('BOOL', 0),
1324 'bbcode_bitfield' => array('VCHAR:255', ''),
1325 'bbcode_uid' => array('VCHAR:8', ''),
1326 'message_edit_time' => array('TIMESTAMP', 0),
1327 'message_edit_count' => array('USINT', 0),
1328 'to_address' => array('TEXT_UNI', ''),
1329 'bcc_address' => array('TEXT_UNI', ''),
1330 ),
1331 'PRIMARY_KEY' => 'msg_id',
1332 'KEYS' => array(
1333 'author_ip' => array('INDEX', 'author_ip'),
1334 'message_time' => array('INDEX', 'message_time'),
1335 'author_id' => array('INDEX', 'author_id'),
1336 'root_level' => array('INDEX', 'root_level'),
1337 ),
1338 );
1339
1340 $schema_data['phpbb_privmsgs_folder'] = array(
1341 'COLUMNS' => array(
1342 'folder_id' => array('UINT', NULL, 'auto_increment'),
1343 'user_id' => array('UINT', 0),
1344 'folder_name' => array('VCHAR_UNI', ''),
1345 'pm_count' => array('UINT', 0),
1346 ),
1347 'PRIMARY_KEY' => 'folder_id',
1348 'KEYS' => array(
1349 'user_id' => array('INDEX', 'user_id'),
1350 ),
1351 );
1352
1353 $schema_data['phpbb_privmsgs_rules'] = array(
1354 'COLUMNS' => array(
1355 'rule_id' => array('UINT', NULL, 'auto_increment'),
1356 'user_id' => array('UINT', 0),
1357 'rule_check' => array('UINT', 0),
1358 'rule_connection' => array('UINT', 0),
1359 'rule_string' => array('VCHAR_UNI', ''),
1360 'rule_user_id' => array('UINT', 0),
1361 'rule_group_id' => array('UINT', 0),
1362 'rule_action' => array('UINT', 0),
1363 'rule_folder_id' => array('INT:11', 0),
1364 ),
1365 'PRIMARY_KEY' => 'rule_id',
1366 'KEYS' => array(
1367 'user_id' => array('INDEX', 'user_id'),
1368 ),
1369 );
1370
1371 $schema_data['phpbb_privmsgs_to'] = array(
1372 'COLUMNS' => array(
1373 'msg_id' => array('UINT', 0),
1374 'user_id' => array('UINT', 0),
1375 'author_id' => array('UINT', 0),
1376 'pm_deleted' => array('BOOL', 0),
1377 'pm_new' => array('BOOL', 1),
1378 'pm_unread' => array('BOOL', 1),
1379 'pm_replied' => array('BOOL', 0),
1380 'pm_marked' => array('BOOL', 0),
1381 'pm_forwarded' => array('BOOL', 0),
1382 'folder_id' => array('INT:11', 0),
1383 ),
1384 'KEYS' => array(
1385 'msg_id' => array('INDEX', 'msg_id'),
1386 'author_id' => array('INDEX', 'author_id'),
1387 'usr_flder_id' => array('INDEX', array('user_id', 'folder_id')),
1388 ),
1389 );
1390
1391 $schema_data['phpbb_profile_fields'] = array(
1392 'COLUMNS' => array(
1393 'field_id' => array('UINT', NULL, 'auto_increment'),
1394 'field_name' => array('VCHAR_UNI', ''),
1395 'field_type' => array('TINT:4', 0),
1396 'field_ident' => array('VCHAR:20', ''),
1397 'field_length' => array('VCHAR:20', ''),
1398 'field_minlen' => array('VCHAR', ''),
1399 'field_maxlen' => array('VCHAR', ''),
1400 'field_novalue' => array('VCHAR_UNI', ''),
1401 'field_default_value' => array('VCHAR_UNI', ''),
1402 'field_validation' => array('VCHAR_UNI:20', ''),
1403 'field_required' => array('BOOL', 0),
1404 'field_show_on_reg' => array('BOOL', 0),
1405 'field_hide' => array('BOOL', 0),
1406 'field_no_view' => array('BOOL', 0),
1407 'field_active' => array('BOOL', 0),
1408 'field_order' => array('UINT', 0),
1409 ),
1410 'PRIMARY_KEY' => 'field_id',
1411 'KEYS' => array(
1412 'fld_type' => array('INDEX', 'field_type'),
1413 'fld_ordr' => array('INDEX', 'field_order'),
1414 ),
1415 );
1416
1417 $schema_data['phpbb_profile_fields_data'] = array(
1418 'COLUMNS' => array(
1419 'user_id' => array('UINT', 0),
1420 ),
1421 'PRIMARY_KEY' => 'user_id',
1422 );
1423
1424 $schema_data['phpbb_profile_fields_lang'] = array(
1425 'COLUMNS' => array(
1426 'field_id' => array('UINT', 0),
1427 'lang_id' => array('UINT', 0),
1428 'option_id' => array('UINT', 0),
1429 'field_type' => array('TINT:4', 0),
1430 'lang_value' => array('VCHAR_UNI', ''),
1431 ),
1432 'PRIMARY_KEY' => array('field_id', 'lang_id', 'option_id'),
1433 );
1434
1435 $schema_data['phpbb_profile_lang'] = array(
1436 'COLUMNS' => array(
1437 'field_id' => array('UINT', 0),
1438 'lang_id' => array('UINT', 0),
1439 'lang_name' => array('VCHAR_UNI', ''),
1440 'lang_explain' => array('TEXT_UNI', ''),
1441 'lang_default_value' => array('VCHAR_UNI', ''),
1442 ),
1443 'PRIMARY_KEY' => array('field_id', 'lang_id'),
1444 );
1445
1446 $schema_data['phpbb_ranks'] = array(
1447 'COLUMNS' => array(
1448 'rank_id' => array('UINT', NULL, 'auto_increment'),
1449 'rank_title' => array('VCHAR_UNI', ''),
1450 'rank_min' => array('UINT', 0),
1451 'rank_special' => array('BOOL', 0),
1452 'rank_image' => array('VCHAR', ''),
1453 ),
1454 'PRIMARY_KEY' => 'rank_id',
1455 );
1456
1457 $schema_data['phpbb_reports'] = array(
1458 'COLUMNS' => array(
1459 'report_id' => array('UINT', NULL, 'auto_increment'),
1460 'reason_id' => array('USINT', 0),
1461 'post_id' => array('UINT', 0),
1462 'user_id' => array('UINT', 0),
1463 'user_notify' => array('BOOL', 0),
1464 'report_closed' => array('BOOL', 0),
1465 'report_time' => array('TIMESTAMP', 0),
1466 'report_text' => array('MTEXT_UNI', ''),
1467 ),
1468 'PRIMARY_KEY' => 'report_id',
1469 );
1470
1471 $schema_data['phpbb_reports_reasons'] = array(
1472 'COLUMNS' => array(
1473 'reason_id' => array('USINT', NULL, 'auto_increment'),
1474 'reason_title' => array('VCHAR_UNI', ''),
1475 'reason_description' => array('MTEXT_UNI', ''),
1476 'reason_order' => array('USINT', 0),
1477 ),
1478 'PRIMARY_KEY' => 'reason_id',
1479 );
1480
1481 $schema_data['phpbb_search_results'] = array(
1482 'COLUMNS' => array(
1483 'search_key' => array('VCHAR:32', ''),
1484 'search_time' => array('TIMESTAMP', 0),
1485 'search_keywords' => array('MTEXT_UNI', ''),
1486 'search_authors' => array('MTEXT', ''),
1487 ),
1488 'PRIMARY_KEY' => 'search_key',
1489 );
1490
1491 $schema_data['phpbb_search_wordlist'] = array(
1492 'COLUMNS' => array(
1493 'word_id' => array('UINT', NULL, 'auto_increment'),
1494 'word_text' => array('VCHAR_UNI', ''),
1495 'word_common' => array('BOOL', 0),
1496 'word_count' => array('UINT', 0),
1497 ),
1498 'PRIMARY_KEY' => 'word_id',
1499 'KEYS' => array(
1500 'wrd_txt' => array('UNIQUE', 'word_text'),
1501 'wrd_cnt' => array('INDEX', 'word_count'),
1502 ),
1503 );
1504
1505 $schema_data['phpbb_search_wordmatch'] = array(
1506 'COLUMNS' => array(
1507 'post_id' => array('UINT', 0),
1508 'word_id' => array('UINT', 0),
1509 'title_match' => array('BOOL', 0),
1510 ),
1511 'KEYS' => array(
1512 'unq_mtch' => array('UNIQUE', array('word_id', 'post_id', 'title_match')),
1513 'word_id' => array('INDEX', 'word_id'),
1514 'post_id' => array('INDEX', 'post_id'),
1515 ),
1516 );
1517
1518 $schema_data['phpbb_sessions'] = array(
1519 'COLUMNS' => array(
1520 'session_id' => array('CHAR:32', ''),
1521 'session_user_id' => array('UINT', 0),
1522 'session_last_visit' => array('TIMESTAMP', 0),
1523 'session_start' => array('TIMESTAMP', 0),
1524 'session_time' => array('TIMESTAMP', 0),
1525 'session_ip' => array('VCHAR:40', ''),
1526 'session_browser' => array('VCHAR:150', ''),
1527 'session_forwarded_for' => array('VCHAR:255', ''),
1528 'session_page' => array('VCHAR_UNI', ''),
1529 'session_viewonline' => array('BOOL', 1),
1530 'session_autologin' => array('BOOL', 0),
1531 'session_admin' => array('BOOL', 0),
1532 ),
1533 'PRIMARY_KEY' => 'session_id',
1534 'KEYS' => array(
1535 'session_time' => array('INDEX', 'session_time'),
1536 'session_user_id' => array('INDEX', 'session_user_id'),
1537 ),
1538 );
1539
1540 $schema_data['phpbb_sessions_keys'] = array(
1541 'COLUMNS' => array(
1542 'key_id' => array('CHAR:32', ''),
1543 'user_id' => array('UINT', 0),
1544 'last_ip' => array('VCHAR:40', ''),
1545 'last_login' => array('TIMESTAMP', 0),
1546 ),
1547 'PRIMARY_KEY' => array('key_id', 'user_id'),
1548 'KEYS' => array(
1549 'last_login' => array('INDEX', 'last_login'),
1550 ),
1551 );
1552
1553 $schema_data['phpbb_sitelist'] = array(
1554 'COLUMNS' => array(
1555 'site_id' => array('UINT', NULL, 'auto_increment'),
1556 'site_ip' => array('VCHAR:40', ''),
1557 'site_hostname' => array('VCHAR', ''),
1558 'ip_exclude' => array('BOOL', 0),
1559 ),
1560 'PRIMARY_KEY' => 'site_id',
1561 );
1562
1563 $schema_data['phpbb_smilies'] = array(
1564 'COLUMNS' => array(
1565 'smiley_id' => array('UINT', NULL, 'auto_increment'),
1566 // We may want to set 'code' to VCHAR:50 or check if unicode support is possible... at the moment only ASCII characters are allowed.
1567 'code' => array('VCHAR_UNI:50', ''),
1568 'emotion' => array('VCHAR_UNI:50', ''),
1569 'smiley_url' => array('VCHAR:50', ''),
1570 'smiley_width' => array('USINT', 0),
1571 'smiley_height' => array('USINT', 0),
1572 'smiley_order' => array('UINT', 0),
1573 'display_on_posting'=> array('BOOL', 1),
1574 ),
1575 'PRIMARY_KEY' => 'smiley_id',
1576 'KEYS' => array(
1577 'display_on_post' => array('INDEX', 'display_on_posting'),
1578 ),
1579 );
1580
1581 $schema_data['phpbb_styles'] = array(
1582 'COLUMNS' => array(
1583 'style_id' => array('USINT', NULL, 'auto_increment'),
1584 'style_name' => array('VCHAR_UNI:255', ''),
1585 'style_copyright' => array('VCHAR_UNI', ''),
1586 'style_active' => array('BOOL', 1),
1587 'template_id' => array('USINT', 0),
1588 'theme_id' => array('USINT', 0),
1589 'imageset_id' => array('USINT', 0),
1590 ),
1591 'PRIMARY_KEY' => 'style_id',
1592 'KEYS' => array(
1593 'style_name' => array('UNIQUE', 'style_name'),
1594 'template_id' => array('INDEX', 'template_id'),
1595 'theme_id' => array('INDEX', 'theme_id'),
1596 'imageset_id' => array('INDEX', 'imageset_id'),
1597 ),
1598 );
1599
1600 $schema_data['phpbb_styles_template'] = array(
1601 'COLUMNS' => array(
1602 'template_id' => array('USINT', NULL, 'auto_increment'),
1603 'template_name' => array('VCHAR_UNI:255', ''),
1604 'template_copyright' => array('VCHAR_UNI', ''),
1605 'template_path' => array('VCHAR:100', ''),
1606 'bbcode_bitfield' => array('VCHAR:255', 'kNg='),
1607 'template_storedb' => array('BOOL', 0),
1608 ),
1609 'PRIMARY_KEY' => 'template_id',
1610 'KEYS' => array(
1611 'tmplte_nm' => array('UNIQUE', 'template_name'),
1612 ),
1613 );
1614
1615 $schema_data['phpbb_styles_template_data'] = array(
1616 'COLUMNS' => array(
1617 'template_id' => array('USINT', 0),
1618 'template_filename' => array('VCHAR:100', ''),
1619 'template_included' => array('TEXT', ''),
1620 'template_mtime' => array('TIMESTAMP', 0),
1621 'template_data' => array('MTEXT_UNI', ''),
1622 ),
1623 'KEYS' => array(
1624 'tid' => array('INDEX', 'template_id'),
1625 'tfn' => array('INDEX', 'template_filename'),
1626 ),
1627 );
1628
1629 $schema_data['phpbb_styles_theme'] = array(
1630 'COLUMNS' => array(
1631 'theme_id' => array('USINT', NULL, 'auto_increment'),
1632 'theme_name' => array('VCHAR_UNI:255', ''),
1633 'theme_copyright' => array('VCHAR_UNI', ''),
1634 'theme_path' => array('VCHAR:100', ''),
1635 'theme_storedb' => array('BOOL', 0),
1636 'theme_mtime' => array('TIMESTAMP', 0),
1637 'theme_data' => array('MTEXT_UNI', ''),
1638 ),
1639 'PRIMARY_KEY' => 'theme_id',
1640 'KEYS' => array(
1641 'theme_name' => array('UNIQUE', 'theme_name'),
1642 ),
1643 );
1644
1645 $schema_data['phpbb_styles_imageset'] = array(
1646 'COLUMNS' => array(
1647 'imageset_id' => array('USINT', NULL, 'auto_increment'),
1648 'imageset_name' => array('VCHAR_UNI:255', ''),
1649 'imageset_copyright' => array('VCHAR_UNI', ''),
1650 'imageset_path' => array('VCHAR:100', ''),
1651 ),
1652 'PRIMARY_KEY' => 'imageset_id',
1653 'KEYS' => array(
1654 'imgset_nm' => array('UNIQUE', 'imageset_name'),
1655 ),
1656 );
1657
1658 $schema_data['phpbb_styles_imageset_data'] = array(
1659 'COLUMNS' => array(
1660 'image_id' => array('USINT', NULL, 'auto_increment'),
1661 'image_name' => array('VCHAR:200', ''),
1662 'image_filename' => array('VCHAR:200', ''),
1663 'image_lang' => array('VCHAR:30', ''),
1664 'image_height' => array('USINT', 0),
1665 'image_width' => array('USINT', 0),
1666 'imageset_id' => array('USINT', 0),
1667 ),
1668 'PRIMARY_KEY' => 'image_id',
1669 'KEYS' => array(
1670 'i_d' => array('INDEX', 'imageset_id'),
1671 ),
1672 );
1673
1674 $schema_data['phpbb_topics'] = array(
1675 'COLUMNS' => array(
1676 'topic_id' => array('UINT', NULL, 'auto_increment'),
1677 'forum_id' => array('UINT', 0),
1678 'icon_id' => array('UINT', 0),
1679 'topic_attachment' => array('BOOL', 0),
1680 'topic_approved' => array('BOOL', 1),
1681 'topic_reported' => array('BOOL', 0),
1682 'topic_title' => array('XSTEXT_UNI', '', 'true_sort'),
1683 'topic_poster' => array('UINT', 0),
1684 'topic_time' => array('TIMESTAMP', 0),
1685 'topic_time_limit' => array('TIMESTAMP', 0),
1686 'topic_views' => array('UINT', 0),
1687 'topic_replies' => array('UINT', 0),
1688 'topic_replies_real' => array('UINT', 0),
1689 'topic_status' => array('TINT:3', 0),
1690 'topic_type' => array('TINT:3', 0),
1691 'topic_first_post_id' => array('UINT', 0),
1692 'topic_first_poster_name' => array('VCHAR_UNI', ''),
1693 'topic_first_poster_colour' => array('VCHAR:6', ''),
1694 'topic_last_post_id' => array('UINT', 0),
1695 'topic_last_poster_id' => array('UINT', 0),
1696 'topic_last_poster_name' => array('VCHAR_UNI', ''),
1697 'topic_last_poster_colour' => array('VCHAR:6', ''),
1698 'topic_last_post_subject' => array('XSTEXT_UNI', ''),
1699 'topic_last_post_time' => array('TIMESTAMP', 0),
1700 'topic_last_view_time' => array('TIMESTAMP', 0),
1701 'topic_moved_id' => array('UINT', 0),
1702 'topic_bumped' => array('BOOL', 0),
1703 'topic_bumper' => array('UINT', 0),
1704 'poll_title' => array('STEXT_UNI', ''),
1705 'poll_start' => array('TIMESTAMP', 0),
1706 'poll_length' => array('TIMESTAMP', 0),
1707 'poll_max_options' => array('TINT:4', 1),
1708 'poll_last_vote' => array('TIMESTAMP', 0),
1709 'poll_vote_change' => array('BOOL', 0),
1710 ),
1711 'PRIMARY_KEY' => 'topic_id',
1712 'KEYS' => array(
1713 'forum_id' => array('INDEX', 'forum_id'),
1714 'forum_id_type' => array('INDEX', array('forum_id', 'topic_type')),
1715 'last_post_time' => array('INDEX', 'topic_last_post_time'),
1716 'topic_approved' => array('INDEX', 'topic_approved'),
1717 'forum_appr_last' => array('INDEX', array('forum_id', 'topic_approved', 'topic_last_post_id')),
1718 'fid_time_moved' => array('INDEX', array('forum_id', 'topic_last_post_time', 'topic_moved_id')),
1719 ),
1720 );
1721
1722 $schema_data['phpbb_topics_track'] = array(
1723 'COLUMNS' => array(
1724 'user_id' => array('UINT', 0),
1725 'topic_id' => array('UINT', 0),
1726 'forum_id' => array('UINT', 0),
1727 'mark_time' => array('TIMESTAMP', 0),
1728 ),
1729 'PRIMARY_KEY' => array('user_id', 'topic_id'),
1730 'KEYS' => array(
1731 'forum_id' => array('INDEX', 'forum_id'),
1732 ),
1733 );
1734
1735 $schema_data['phpbb_topics_posted'] = array(
1736 'COLUMNS' => array(
1737 'user_id' => array('UINT', 0),
1738 'topic_id' => array('UINT', 0),
1739 'topic_posted' => array('BOOL', 0),
1740 ),
1741 'PRIMARY_KEY' => array('user_id', 'topic_id'),
1742 );
1743
1744 $schema_data['phpbb_topics_watch'] = array(
1745 'COLUMNS' => array(
1746 'topic_id' => array('UINT', 0),
1747 'user_id' => array('UINT', 0),
1748 'notify_status' => array('BOOL', 0),
1749 ),
1750 'KEYS' => array(
1751 'topic_id' => array('INDEX', 'topic_id'),
1752 'user_id' => array('INDEX', 'user_id'),
1753 'notify_stat' => array('INDEX', 'notify_status'),
1754 ),
1755 );
1756
1757 $schema_data['phpbb_user_group'] = array(
1758 'COLUMNS' => array(
1759 'group_id' => array('UINT', 0),
1760 'user_id' => array('UINT', 0),
1761 'group_leader' => array('BOOL', 0),
1762 'user_pending' => array('BOOL', 1),
1763 ),
1764 'KEYS' => array(
1765 'group_id' => array('INDEX', 'group_id'),
1766 'user_id' => array('INDEX', 'user_id'),
1767 'group_leader' => array('INDEX', 'group_leader'),
1768 ),
1769 );
1770
1771 $schema_data['phpbb_users'] = array(
1772 'COLUMNS' => array(
1773 'user_id' => array('UINT', NULL, 'auto_increment'),
1774 'user_type' => array('TINT:2', 0),
1775 'group_id' => array('UINT', 3),
1776 'user_permissions' => array('MTEXT', ''),
1777 'user_perm_from' => array('UINT', 0),
1778 'user_ip' => array('VCHAR:40', ''),
1779 'user_regdate' => array('TIMESTAMP', 0),
1780 'username' => array('VCHAR_CI', ''),
1781 'username_clean' => array('VCHAR_CI', ''),
1782 'user_password' => array('VCHAR_UNI:40', ''),
1783 'user_passchg' => array('TIMESTAMP', 0),
1784 'user_pass_convert' => array('BOOL', 0),
1785 'user_email' => array('VCHAR_UNI:100', ''),
1786 'user_email_hash' => array('BINT', 0),
1787 'user_birthday' => array('VCHAR:10', ''),
1788 'user_lastvisit' => array('TIMESTAMP', 0),
1789 'user_lastmark' => array('TIMESTAMP', 0),
1790 'user_lastpost_time' => array('TIMESTAMP', 0),
1791 'user_lastpage' => array('VCHAR_UNI:200', ''),
1792 'user_last_confirm_key' => array('VCHAR:10', ''),
1793 'user_last_search' => array('TIMESTAMP', 0),
1794 'user_warnings' => array('TINT:4', 0),
1795 'user_last_warning' => array('TIMESTAMP', 0),
1796 'user_login_attempts' => array('TINT:4', 0),
1797 'user_inactive_reason' => array('TINT:2', 0),
1798 'user_inactive_time' => array('TIMESTAMP', 0),
1799 'user_posts' => array('UINT', 0),
1800 'user_lang' => array('VCHAR:30', ''),
1801 'user_timezone' => array('DECIMAL', 0),
1802 'user_dst' => array('BOOL', 0),
1803 'user_dateformat' => array('VCHAR_UNI:30', 'd M Y H:i'),
1804 'user_style' => array('USINT', 0),
1805 'user_rank' => array('UINT', 0),
1806 'user_colour' => array('VCHAR:6', ''),
1807 'user_new_privmsg' => array('INT:4', 0),
1808 'user_unread_privmsg' => array('INT:4', 0),
1809 'user_last_privmsg' => array('TIMESTAMP', 0),
1810 'user_message_rules' => array('BOOL', 0),
1811 'user_full_folder' => array('INT:11', -3),
1812 'user_emailtime' => array('TIMESTAMP', 0),
1813 'user_topic_show_days' => array('USINT', 0),
1814 'user_topic_sortby_type' => array('VCHAR:1', 't'),
1815 'user_topic_sortby_dir' => array('VCHAR:1', 'd'),
1816 'user_post_show_days' => array('USINT', 0),
1817 'user_post_sortby_type' => array('VCHAR:1', 't'),
1818 'user_post_sortby_dir' => array('VCHAR:1', 'a'),
1819 'user_notify' => array('BOOL', 0),
1820 'user_notify_pm' => array('BOOL', 1),
1821 'user_notify_type' => array('TINT:4', 0),
1822 'user_allow_pm' => array('BOOL', 1),
1823 'user_allow_viewonline' => array('BOOL', 1),
1824 'user_allow_viewemail' => array('BOOL', 1),
1825 'user_allow_massemail' => array('BOOL', 1),
1826 'user_options' => array('UINT:11', 895),
1827 'user_avatar' => array('VCHAR', ''),
1828 'user_avatar_type' => array('TINT:2', 0),
1829 'user_avatar_width' => array('USINT', 0),
1830 'user_avatar_height' => array('USINT', 0),
1831 'user_sig' => array('MTEXT_UNI', ''),
1832 'user_sig_bbcode_uid' => array('VCHAR:8', ''),
1833 'user_sig_bbcode_bitfield' => array('VCHAR:255', ''),
1834 'user_from' => array('VCHAR_UNI:100', ''),
1835 'user_icq' => array('VCHAR:15', ''),
1836 'user_aim' => array('VCHAR_UNI', ''),
1837 'user_yim' => array('VCHAR_UNI', ''),
1838 'user_msnm' => array('VCHAR_UNI', ''),
1839 'user_jabber' => array('VCHAR_UNI', ''),
1840 'user_website' => array('VCHAR_UNI:200', ''),
1841 'user_occ' => array('TEXT_UNI', ''),
1842 'user_interests' => array('TEXT_UNI', ''),
1843 'user_actkey' => array('VCHAR:32', ''),
1844 'user_newpasswd' => array('VCHAR_UNI:40', ''),
1845 'user_form_salt' => array('VCHAR_UNI:32', ''),
1846
1847 ),
1848 'PRIMARY_KEY' => 'user_id',
1849 'KEYS' => array(
1850 'user_birthday' => array('INDEX', 'user_birthday'),
1851 'user_email_hash' => array('INDEX', 'user_email_hash'),
1852 'user_type' => array('INDEX', 'user_type'),
1853 'username_clean' => array('UNIQUE', 'username_clean'),
1854 ),
1855 );
1856
1857 $schema_data['phpbb_warnings'] = array(
1858 'COLUMNS' => array(
1859 'warning_id' => array('UINT', NULL, 'auto_increment'),
1860 'user_id' => array('UINT', 0),
1861 'post_id' => array('UINT', 0),
1862 'log_id' => array('UINT', 0),
1863 'warning_time' => array('TIMESTAMP', 0),
1864 ),
1865 'PRIMARY_KEY' => 'warning_id',
1866 );
1867
1868 $schema_data['phpbb_words'] = array(
1869 'COLUMNS' => array(
1870 'word_id' => array('UINT', NULL, 'auto_increment'),
1871 'word' => array('VCHAR_UNI', ''),
1872 'replacement' => array('VCHAR_UNI', ''),
1873 ),
1874 'PRIMARY_KEY' => 'word_id',
1875 );
1876
1877 $schema_data['phpbb_zebra'] = array(
1878 'COLUMNS' => array(
1879 'user_id' => array('UINT', 0),
1880 'zebra_id' => array('UINT', 0),
1881 'friend' => array('BOOL', 0),
1882 'foe' => array('BOOL', 0),
1883 ),
1884 'PRIMARY_KEY' => array('user_id', 'zebra_id'),
1885 );
1886
1887 return $schema_data;
1888 }
1889
1890
1891 /**
1892 * Data put into the header for various dbms
1893 */
1894 function custom_data($dbms)
1895 {
1896 switch ($dbms)
1897 {
1898 case 'oracle':
1899 return <<<EOF
1900 /*
1901 This first section is optional, however its probably the best method
1902 of running phpBB on Oracle. If you already have a tablespace and user created
1903 for phpBB you can leave this section commented out!
1904
1905 The first set of statements create a phpBB tablespace and a phpBB user,
1906 make sure you change the password of the phpBB user before you run this script!!
1907 */
1908
1909 /*
1910 CREATE TABLESPACE "PHPBB"
1911 LOGGING
1912 DATAFILE 'E:\ORACLE\ORADATA\LOCAL\PHPBB.ora'
1913 SIZE 10M
1914 AUTOEXTEND ON NEXT 10M
1915 MAXSIZE 100M;
1916
1917 CREATE USER "PHPBB"
1918 PROFILE "DEFAULT"
1919 IDENTIFIED BY "phpbb_password"
1920 DEFAULT TABLESPACE "PHPBB"
1921 QUOTA UNLIMITED ON "PHPBB"
1922 ACCOUNT UNLOCK;
1923
1924 GRANT ANALYZE ANY TO "PHPBB";
1925 GRANT CREATE SEQUENCE TO "PHPBB";
1926 GRANT CREATE SESSION TO "PHPBB";
1927 GRANT CREATE TABLE TO "PHPBB";
1928 GRANT CREATE TRIGGER TO "PHPBB";
1929 GRANT CREATE VIEW TO "PHPBB";
1930 GRANT "CONNECT" TO "PHPBB";
1931
1932 COMMIT;
1933 DISCONNECT;
1934
1935 CONNECT phpbb/phpbb_password;
1936 */
1937 EOF;
1938
1939
1940 break;
1941
1942 case 'postgres':
1943 return <<<EOF
1944 /*
1945 Domain definition
1946 */
1947 CREATE DOMAIN varchar_ci AS varchar(255) NOT NULL DEFAULT ''::character varying;
1948
1949 /*
1950 Operation Functions
1951 */
1952 CREATE FUNCTION _varchar_ci_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) = LOWER($2)' LANGUAGE SQL STRICT;
1953 CREATE FUNCTION _varchar_ci_not_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) != LOWER($2)' LANGUAGE SQL STRICT;
1954 CREATE FUNCTION _varchar_ci_less_than(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) < LOWER($2)' LANGUAGE SQL STRICT;
1955 CREATE FUNCTION _varchar_ci_less_equal(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) <= LOWER($2)' LANGUAGE SQL STRICT;
1956 CREATE FUNCTION _varchar_ci_greater_than(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) > LOWER($2)' LANGUAGE SQL STRICT;
1957 CREATE FUNCTION _varchar_ci_greater_equals(varchar_ci, varchar_ci) RETURNS boolean AS 'SELECT LOWER($1) >= LOWER($2)' LANGUAGE SQL STRICT;
1958
1959 /*
1960 Operators
1961 */
1962 CREATE OPERATOR <(
1963 PROCEDURE = _varchar_ci_less_than,
1964 LEFTARG = varchar_ci,
1965 RIGHTARG = varchar_ci,
1966 COMMUTATOR = >,
1967 NEGATOR = >=,
1968 RESTRICT = scalarltsel,
1969 JOIN = scalarltjoinsel);
1970
1971 CREATE OPERATOR <=(
1972 PROCEDURE = _varchar_ci_less_equal,
1973 LEFTARG = varchar_ci,
1974 RIGHTARG = varchar_ci,
1975 COMMUTATOR = >=,
1976 NEGATOR = >,
1977 RESTRICT = scalarltsel,
1978 JOIN = scalarltjoinsel);
1979
1980 CREATE OPERATOR >(
1981 PROCEDURE = _varchar_ci_greater_than,
1982 LEFTARG = varchar_ci,
1983 RIGHTARG = varchar_ci,
1984 COMMUTATOR = <,
1985 NEGATOR = <=,
1986 RESTRICT = scalargtsel,
1987 JOIN = scalargtjoinsel);
1988
1989 CREATE OPERATOR >=(
1990 PROCEDURE = _varchar_ci_greater_equals,
1991 LEFTARG = varchar_ci,
1992 RIGHTARG = varchar_ci,
1993 COMMUTATOR = <=,
1994 NEGATOR = <,
1995 RESTRICT = scalargtsel,
1996 JOIN = scalargtjoinsel);
1997
1998 CREATE OPERATOR <>(
1999 PROCEDURE = _varchar_ci_not_equal,
2000 LEFTARG = varchar_ci,
2001 RIGHTARG = varchar_ci,
2002 COMMUTATOR = <>,
2003 NEGATOR = =,
2004 RESTRICT = neqsel,
2005 JOIN = neqjoinsel);
2006
2007 CREATE OPERATOR =(
2008 PROCEDURE = _varchar_ci_equal,
2009 LEFTARG = varchar_ci,
2010 RIGHTARG = varchar_ci,
2011 COMMUTATOR = =,
2012 NEGATOR = <>,
2013 RESTRICT = eqsel,
2014 JOIN = eqjoinsel,
2015 HASHES,
2016 MERGES,
2017 SORT1= <);
2018
2019 EOF;
2020
2021 break;
2022 }
2023
2024 return '';
2025 }
2026
2027 echo 'done';
2028
2029 ?>