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:
@@ -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 . ' ';
|
||||
|
||||
|
Reference in New Issue
Block a user