aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/includes/db/db_tools.php
diff options
context:
space:
mode:
Diffstat (limited to 'phpBB/includes/db/db_tools.php')
-rw-r--r--phpBB/includes/db/db_tools.php95
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 . ' ';