1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-07-30 21:40:43 +02:00

- add DB2 support

/me takes a nap


git-svn-id: file:///svn/phpbb/trunk@8308 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
David M
2008-01-06 13:46:20 +00:00
parent 57645ad5bc
commit 2f08a36062
13 changed files with 2049 additions and 14 deletions

View File

@@ -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 . ' ';