diff options
Diffstat (limited to 'phpBB/includes/db/db_tools.php')
-rw-r--r-- | phpBB/includes/db/db_tools.php | 95 |
1 files changed, 91 insertions, 4 deletions
diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 0919854f40..f02ec96a9f 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -181,6 +181,33 @@ class phpbb_db_tools 'VARBINARY' => 'blob', ), + 'db2' => array( + 'INT:' => 'integer', + 'BINT' => 'float', + 'UINT' => 'integer', + 'UINT:' => 'integer', + 'TINT:' => 'smallint', + 'USINT' => 'smallint', + 'BOOL' => 'smallint', + 'VCHAR' => 'varchar(255)', + 'VCHAR:' => 'varchar(%d)', + 'CHAR:' => 'char(%d)', + 'XSTEXT' => 'clob(65K)', + 'STEXT' => 'varchar(3000)', + 'TEXT' => 'clob(65K)', + 'MTEXT' => 'clob(16M)', + 'XSTEXT_UNI'=> 'varchar(100)', + 'STEXT_UNI' => 'varchar(255)', + 'TEXT_UNI' => 'clob(65K)', + 'MTEXT_UNI' => 'clob(16M)', + 'TIMESTAMP' => 'integer', + 'DECIMAL' => 'float', + 'VCHAR_UNI' => 'varchar(255)', + 'VCHAR_UNI:'=> 'varchar(%d)', + 'VCHAR_CI' => 'varchar(255)', + 'VARBINARY' => 'varchar(255)', + ), + 'postgres' => array( 'INT:' => 'INT4', 'BINT' => 'INT8', @@ -505,6 +532,24 @@ class phpbb_db_tools return false; break; + case 'db2': + $sql = "SELECT colname + FROM syscat.columns + WHERE tabname = '$table'"; + $result = $this->db->sql_query($sql); + while ($row = $this->db->sql_fetchrow($result)) + { + // lower case just in case + if (strtolower($row['colname']) == $column_name) + { + $this->db->sql_freeresult($result); + return true; + } + } + $this->db->sql_freeresult($result); + return false; + break; + // ugh, SQLite case 'sqlite': $sql = "SELECT sql @@ -762,6 +807,27 @@ class phpbb_db_tools $sql .= ' NOT NULL '; $sql .= (!is_null($column_data[1])) ? "DEFAULT '{$column_data[1]}'" : ''; break; + + case 'db2': + $sql .= "\t{$column_name} {$column_type} NOT NULL"; + + if (isset($column_data[2]) && $column_data[2] == 'auto_increment') + { + $sql .= ' GENERATED BY DEFAULT AS IDENTITY (START WITH 1, INCREMENT BY 1)'; + } + else + { + if (preg_match('/^(integer|smallint|float)$/', $column_type)) + { + $sql .= " DEFAULT {$column_data[1]}"; + } + else + { + $sql .= " DEFAULT '{$column_data[1]}'"; + } + } + $sql .= ",\n"; + break; } $return_array['column_type_sql'] = $sql; @@ -799,6 +865,10 @@ class phpbb_db_tools $statements[] = 'ALTER TABLE ' . $table_name . ' ADD COLUMN "' . $column_name . '" ' . $column_data['column_type_sql']; break; + case 'db2': + $statements[] = 'ALTER TABLE ' . $table_name . ' ADD ' . $column_name . ' ' . $column_data['column_type_sql']; + break; + case 'sqlite': if (version_compare(sqlite_libversion(), '3.0') == -1) { @@ -890,6 +960,10 @@ class phpbb_db_tools $statements[] = 'ALTER TABLE ' . $table_name . ' DROP COLUMN "' . $column_name . '"'; break; + case 'db2': + $statements[] = 'ALTER TABLE ' . $table_name . ' DROP ' . $column_name; + break; + case 'sqlite': if (version_compare(sqlite_libversion(), '3.0') == -1) { @@ -973,6 +1047,7 @@ class phpbb_db_tools case 'oracle': case 'postgres': case 'sqlite': + case 'db2': $statements[] = 'DROP INDEX ' . $table_name . '_' . $index_name; break; } @@ -991,6 +1066,8 @@ class phpbb_db_tools { case 'firebird': case 'postgres': + case 'mysql': + case 'db2': $statements[] = 'ALTER TABLE ' . $table_name . ' ADD PRIMARY KEY (' . implode(', ', $column) . ')'; break; @@ -1003,10 +1080,6 @@ class phpbb_db_tools $statements[] = $sql; break; - case 'mysql': - $statements[] = 'ALTER TABLE ' . $table_name . ' ADD PRIMARY KEY (' . implode(', ', $column) . ')'; - break; - case 'oracle': $statements[] = 'ALTER TABLE ' . $table_name . 'add CONSTRAINT pk_' . $table_name . ' PRIMARY KEY (' . implode(', ', $column) . ')'; break; @@ -1077,6 +1150,7 @@ class phpbb_db_tools case 'postgres': case 'oracle': case 'sqlite': + case 'db2': $statements[] = 'CREATE UNIQUE INDEX ' . $table_name . '_' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; break; @@ -1105,6 +1179,7 @@ class phpbb_db_tools case 'postgres': case 'oracle': case 'sqlite': + case 'db2': $statements[] = 'CREATE INDEX ' . $table_name . '_' . $index_name . ' ON ' . $table_name . '(' . implode(', ', $column) . ')'; break; @@ -1184,6 +1259,13 @@ class phpbb_db_tools $sql = "PRAGMA index_info('" . $table_name . "');"; $col = 'name'; break; + + case 'db2': + $sql = "SELECT indname + FROM SYSCAT.INDEXES + WHERE TABNAME = '$table_name' + AND UNIQUERULE <> 'P'"; + $col = 'name'; } $result = $this->db->sql_query($sql); @@ -1200,6 +1282,7 @@ class phpbb_db_tools case 'oracle': case 'postgres': case 'sqlite': + case 'db2': $row[$col] = substr($row[$col], strlen($table_name) + 1); break; } @@ -1239,6 +1322,10 @@ class phpbb_db_tools $statements[] = 'ALTER TABLE ' . $table_name . ' MODIFY ' . $column_name . ' ' . $column_data['column_type_sql']; break; + case 'db2': + $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER ' . $column_name . ' SET DATA TYPE ' . $column_data['column_type_sql']; + break; + case 'postgres': $sql = 'ALTER TABLE ' . $table_name . ' '; |