mirror of
https://github.com/phpbb/phpbb.git
synced 2025-07-25 19:38:53 +00:00
- 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:
parent
fee3ec305c
commit
10e8b6130d
3 changed files with 216 additions and 36 deletions
|
@ -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;
|
||||
|
|
|
@ -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'))
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
)
|
||||
/
|
||||
|
|
Loading…
Add table
Reference in a new issue