- Olympus can now _install_ every database, more work to come on getting the rest of the board to work

git-svn-id: file:///svn/phpbb/trunk@5811 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
David M 2006-04-21 01:09:04 +00:00
parent fee3ec305c
commit 10e8b6130d
3 changed files with 216 additions and 36 deletions

View file

@ -34,8 +34,7 @@ class acp_database
switch ($mode)
{
// TODO: Firebird creates EVERYTHING in upper case, should this be changed?
// Oracle support must be written
// TODO: Check the cases of Oracle and Firebird ( they generate everything in uppercase )
// The queries are ugly++, they must get some love so that they follow the CS
case 'backup':
@ -154,6 +153,11 @@ class acp_database
$sql_data .= '# Table: ' . $table_name . "\n";
$sql_data .= "DROP TABLE IF EXISTS $table_name;\n";
break;
case 'oracle':
$sql_data .= '# Table: ' . $table_name . "\n";
$sql_data .= "DROP TABLE $table_name;\n\\\n";
break;
case 'postgres':
case 'firebird':
@ -166,10 +170,6 @@ class acp_database
$sql_data .= '# Table: ' . $table_name . "\n";
$sql_data .= "DROP TABLE $table_name;\nGO\n";
break;
default:
trigger_error('KungFuDeathGrip');
break;
}
$sql_data .= $this->get_table_structure($table_name);
}
@ -749,8 +749,88 @@ class acp_database
$db->sql_freeresult($result);
break;
default:
trigger_error('KungFuDeathGrip');
case 'oracle':
$ary_type = $ary_name = array();
// Grab all of the data from current table.
$sql = "SELECT * FROM {$table_name}";
$result = $db->sql_query($sql);
$i_num_fields = ocinumcols($result);
for ($i = 0; $i < $i_num_fields; $i++)
{
$ary_type[] = ocicolumntype($result, $i);
$ary_name[] = "'" . ocicolumnname($result, $i) . "'";
}
while ($row = $db->sql_fetchrow($result))
{
$schema_vals = $schema_fields = array();
// Build the SQL statement to recreate the data.
for ($i = 0; $i < $i_num_fields; $i++)
{
$str_val = $row[$ary_name[$i]];
if (preg_match('#char|text|bool#i', $ary_type[$i]))
{
$str_quote = "'";
$str_empty = '';
$str_val = addslashes($str_val);
}
else if (preg_match('#date|timestamp#i', $ary_type[$i]))
{
if (empty($str_val))
{
$str_quote = '';
}
else
{
$str_quote = "'";
}
}
else
{
$str_quote = '';
$str_empty = 'NULL';
}
if (empty($str_val) && $str_val !== '0')
{
$str_val = $str_empty;
}
$schema_vals[] = $str_quote . $str_val . $str_quote;
$schema_fields[] = $ary_name[$i];
}
// Take the ordered fields and their associated data and build it
// into a valid sql statement to recreate that field in the data.
$sql_data .= "INSERT INTO $table_name (" . implode(', ', $schema_fields) . ') VALUES(' . implode(', ', $schema_vals) . ");\n";
if ($store == true)
{
$write($fp, $sql_data);
}
if ($download == true)
{
if (!empty($oper))
{
echo $oper($sql_data);
}
else
{
echo $sql_data;
}
}
$sql_data = '';
}
$db->sql_freeresult($result);
break;
}
}
}
@ -862,8 +942,18 @@ class acp_database
$db->sql_freeresult($result);
break;
default:
trigger_error('KungFuDeathGrip');
case 'oracle':
$sql = 'SELECT TNAME as table_name FROM TAB';
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
if (stripos($row['table_name'], $table_prefix) === 0)
{
$tables[] = $row['table_name'];
}
}
$db->sql_freeresult($result);
break;
}
foreach ($tables as $table)
@ -1491,8 +1581,96 @@ class acp_database
$db->sql_freeresult($result);
break;
default:
trigger_error('KungFuDeathGrip');
case 'oracle':
$sql_data .= "\nCREATE TABLE $table_name (\n";
$sql = "SELECT COLUMN_NAME, DATA_TYPE, DATA_PRECISION, DATA_LENGTH, NULLABLE, DATA_DEFAULT from ALL_TAB_COLS where table_name = '{$table_name}'";
$result = $db->sql_query($sql);
$rows = array();
while ($row = $db->sql_fetchrow($result))
{
$line = ' "' . $row['column_name'] . '" ' . $row['data_type'];
if ($row['data_type'] !== 'CLOB')
{
if ($row['data_type'] !== 'VARCHAR2')
{
$line .= '(' . $row['data_precision'] . ')';
}
else
{
$line .= '(' . $row['data_length'] . ')';
}
}
if (!empty($row['data_default']))
{
$line .= ' DEFAULT ' . $row['data_default'];
}
if ($row['nullable'] == 'N')
{
$line .= ' NOT NULL';
}
$rows[] = $line;
}
$db->sql_freeresult($result);
$sql = "SELECT A.CONSTRAINT_NAME, A.COLUMN_NAME FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND B.CONSTRAINT_TYPE = 'P' AND A.TABLE_NAME = '{$table_name}'";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$rows[] = " CONSTRAINT {$row['constraint_name']} PRIMARY KEY ({$row['column_name']})";
}
$db->sql_freeresult($result);
$sql = "SELECT A.CONSTRAINT_NAME, A.COLUMN_NAME FROM USER_CONS_COLUMNS A, USER_CONSTRAINTS B WHERE A.CONSTRAINT_NAME = B.CONSTRAINT_NAME AND B.CONSTRAINT_TYPE = 'U' AND A.TABLE_NAME = '{$table_name}'";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$rows[] = " CONSTRAINT {$row['constraint_name']} UNIQUE ({$row['column_name']})";
}
$db->sql_freeresult($result);
$sql_data .= implode(",\n", $rows);
$sql_data .= "\n)\n\\";
$sql = "SELECT A.REFERENCED_NAME FROM USER_DEPENDENCIES A, USER_TRIGGERS B WHERE A.REFERENCED_TYPE = 'SEQUENCE' AND A.NAME = B.TRIGGER_NAME AND B. TABLE_NAME = '{$table_name}'";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$sql_data .= "\nCREATE SEQUENCE {$row['referenced_name']}\\\n";
}
$db->sql_freeresult($result);
$sql = "SELECT DESCRIPTION, WHEN_CLAUSE, TRIGGER_BODY FROM USER_TRIGGERS WHERE TABLE_NAME = '{$table_name}'";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
$sql_data .= "\nCREATE OR REPLACE TRIGGER {$row['description']}WHEN ({$row['when_clause']})\n{$row['trigger_body']}\\";
}
$db->sql_freeresult($result);
$sql = "SELECT A.INDEX_NAME, B.COLUMN_NAME FROM USER_INDEXES A, USER_IND_COLUMNS B WHERE A.UNIQUENESS = 'NONUNIQUE' AND A.INDEX_NAME = B.INDEX_NAME AND B.TABLE_NAME = '{$table_name}'";
$result = $db->sql_query($sql);
$index = array();
while ($row = $db->sql_fetchrow($result))
{
$index[$row['index_name']][] = $row['column_name'];
}
foreach ($index as $index_name => $column_names)
{
$sql_data .= "\nCREATE INDEX $index_name ON $table_name(" . implode(', ', $column_names) . ")\n\\";
}
$db->sql_freeresult($result);
break;
}
return $sql_data;

View file

@ -90,6 +90,8 @@ class dbal_oracle extends dbal
{
global $cache;
$query = preg_replace('#FROM \(([^)]*)\)(,|[\n\r\t ]+(?:WHERE|LEFT JOIN)) #', 'FROM \1\2 ', $query);
// EXPLAIN only in extra debug mode
if (defined('DEBUG_EXTRA'))
{

View file

@ -51,7 +51,7 @@ CREATE TABLE phpbb_attachments (
physical_filename varchar2(255),
real_filename varchar2(255),
download_count number(8) DEFAULT '0' NOT NULL,
comment clob,
"COMMENT" clob,
extension varchar2(100),
mimetype varchar2(100),
filesize number(20) NOT NULL,
@ -84,7 +84,7 @@ CREATE INDEX phpbb_attachments_topic_id on phpbb_attachments (topic_id)
/
CREATE INDEX phpbb_attachments_poster_id on phpbb_attachments (poster_id)
/
CREATE INDEX phpbb_attachments_physical_filename on phpbb_attachments (physical_filename)
CREATE INDEX phpbb_attachments_phys_fname on phpbb_attachments (physical_filename)
/
CREATE INDEX phpbb_attachments_filesize on phpbb_attachments (filesize)
/
@ -104,7 +104,7 @@ CREATE TABLE phpbb_auth_groups (
CREATE INDEX phpbb_auth_groups_group_id on phpbb_auth_groups (group_id)
/
CREATE INDEX phpbb_auth_groups_auth_option_id on phpbb_auth_groups (auth_option_id)
CREATE INDEX phpbb_auth_groups_auth_opt_id on phpbb_auth_groups (auth_option_id)
/
@ -182,7 +182,7 @@ CREATE TABLE phpbb_auth_roles_data (
role_id number(8) DEFAULT '0' NOT NULL,
auth_option_id number(8) DEFAULT '0' NOT NULL,
auth_setting number(4) DEFAULT '0' NOT NULL,
CONSTRAINT pk_phpbb_confirm PRIMARY KEY (role_id, auth_option_id)
CONSTRAINT pk_phpbb_auth_roles_data PRIMARY KEY (role_id, auth_option_id)
)
/
@ -201,7 +201,7 @@ CREATE TABLE phpbb_auth_users (
CREATE INDEX phpbb_auth_users_user_id on phpbb_auth_users (user_id)
/
CREATE INDEX phpbb_auth_users_auth_option_id on phpbb_auth_users (auth_option_id)
CREATE INDEX phpbb_auth_users_auth_opt_id on phpbb_auth_users (auth_option_id)
/
@ -255,7 +255,7 @@ CREATE TABLE phpbb_bbcodes (
)
/
CREATE INDEX phpbb_bbcodes_display_on_posting on phpbb_bbcodes (display_on_posting)
CREATE INDEX phpbb_bbcodes_disp_on_posting on phpbb_bbcodes (display_on_posting)
/
@ -529,7 +529,7 @@ END;
CREATE INDEX phpbb_forums_left_right_id on phpbb_forums (left_id, right_id)
/
CREATE INDEX phpbb_forums_forum_last_post_id on phpbb_forums (forum_last_post_id)
CREATE INDEX phpbb_forums_forum_last_pst_id on phpbb_forums (forum_last_post_id)
/
@ -571,7 +571,7 @@ CREATE INDEX phpbb_forums_watch_forum_id on phpbb_forums_watch (forum_id)
/
CREATE INDEX phpbb_forums_watch_user_id on phpbb_forums_watch (user_id)
/
CREATE INDEX phpbb_forums_watch_notify_status on phpbb_forums_watch (notify_status)
CREATE INDEX phpbb_forums_watch_notify_stat on phpbb_forums_watch (notify_status)
/
@ -738,7 +738,7 @@ CREATE TABLE phpbb_moderator_cache (
)
/
CREATE INDEX phpbb_moderator_cache_display_on_index on phpbb_moderator_cache (display_on_index)
CREATE INDEX phpbb_moderator_cache_disp_idx on phpbb_moderator_cache (display_on_index)
/
CREATE INDEX phpbb_moderator_cache_forum_id on phpbb_moderator_cache (forum_id)
/
@ -751,14 +751,14 @@ CREATE TABLE phpbb_modules (
module_id number(8) NOT NULL,
module_enabled number(1) DEFAULT '1' NOT NULL,
module_display number(1) DEFAULT '1' NOT NULL,
module_name varchar2(255) DEFAULT '' NOT NULL,
module_class varchar2(10) DEFAULT '' NOT NULL,
module_name varchar2(255) DEFAULT '',
module_class varchar2(10) DEFAULT '',
parent_id number(8) DEFAULT '0' NOT NULL,
left_id number(8) DEFAULT '0' NOT NULL,
right_id number(8) DEFAULT '0' NOT NULL,
module_langname varchar2(255) DEFAULT '' NOT NULL,
module_mode varchar2(255) DEFAULT '' NOT NULL,
module_auth varchar2(255) DEFAULT '' NOT NULL,
module_langname varchar2(255) DEFAULT '',
module_mode varchar2(255) DEFAULT '',
module_auth varchar2(255) DEFAULT '',
CONSTRAINT pk_phpbb_modules PRIMARY KEY (module_id)
)
/
@ -795,7 +795,7 @@ CREATE TABLE phpbb_poll_results (
)
/
CREATE INDEX phpbb_poll_results_poll_option_id on phpbb_poll_results (poll_option_id)
CREATE INDEX phpbb_poll_results_poll_opt_id on phpbb_poll_results (poll_option_id)
/
CREATE INDEX phpbb_poll_results_topic_id on phpbb_poll_results (topic_id)
/
@ -953,7 +953,7 @@ CREATE TABLE phpbb_privmsgs_folder (
CREATE SEQUENCE phpbb_privmsgs_folder_seq
/
CREATE OR REPLACE TRIGGER ai_phpbb_privmsgs_seq
CREATE OR REPLACE TRIGGER ai_phpbb_privmsgs_fldr_seq
BEFORE INSERT ON phpbb_privmsgs_folder
FOR EACH ROW WHEN (
new.folder_id IS NULL OR new.folder_id = 0
@ -1065,9 +1065,9 @@ BEGIN
END;
/
CREATE INDEX phpbb_profile_fields_field_type on phpbb_profile_fields (field_type)
CREATE INDEX phpbb_profile_fields_field_typ on phpbb_profile_fields (field_type)
/
CREATE INDEX phpbb_profile_fields_field_order on phpbb_profile_fields (field_order)
CREATE INDEX phpbb_profile_fields_fld_order on phpbb_profile_fields (field_order)
/
@ -1202,7 +1202,7 @@ END;
Table: phpbb_search_results
*/
CREATE TABLE phpbb_search_results (
session_key varchar2(32) DEFAULT '',
search_key varchar2(32) DEFAULT '',
search_time number(11) DEFAULT '0' NOT NULL,
search_keywords clob,
search_authors clob,
@ -1438,9 +1438,9 @@ CREATE TABLE phpbb_styles_template_data (
)
/
CREATE INDEX phpbb_styles_template_data_template_id on phpbb_styles_template_data (template_id)
CREATE INDEX phpbb_sty_tmplt_dt_tmplate_id on phpbb_styles_template_data (template_id)
/
CREATE INDEX phpbb_styles_template_data_template_filename on phpbb_styles_template_data (template_filename)
CREATE INDEX phpbb_sty_tmplt_dt_tmplt_fname on phpbb_styles_template_data (template_filename)
/
@ -1640,7 +1640,7 @@ CREATE INDEX phpbb_topics_forum_id on phpbb_topics (forum_id)
/
CREATE INDEX phpbb_topics_forum_id_type on phpbb_topics (forum_id, topic_type)
/
CREATE INDEX phpbb_topics_topic_last_post_time on phpbb_topics (topic_last_post_time)
CREATE INDEX phpbb_topics_last_post_time on phpbb_topics (topic_last_post_time)
/
@ -1686,7 +1686,7 @@ CREATE INDEX phpbb_topics_watch_topic_id on phpbb_topics_watch (topic_id)
/
CREATE INDEX phpbb_topics_watch_user_id on phpbb_topics_watch (user_id)
/
CREATE INDEX phpbb_topics_watch_notify_status on phpbb_topics_watch (notify_status)
CREATE INDEX phpbb_topics_watch_notify_stat on phpbb_topics_watch (notify_status)
/
@ -1816,7 +1816,7 @@ CREATE TABLE phpbb_warnings (
user_id number(8) DEFAULT '0' NOT NULL,
post_id number(8) DEFAULT '0' NOT NULL,
log_id number(8) DEFAULT '0' NOT NULL,
warning_time number(11) DEFAULT '0' NOT NULL
warning_time number(11) DEFAULT '0' NOT NULL,
CONSTRAINT pk_phpbb_warnings PRIMARY KEY (warning_id)
)
/