[ticket/9725] Create an Azure SQL compatible Schema

Two problems were encountered when installing on AzureSQL:
-Azure SQL does not support the ON clause of T-SQL
-Azure SQL requries a clustered index AKA primary key on all tables

The fix is makeshift; it introduces questionable primary indices, which should be replaced with auto--increment columns.

PHPBB3-9725
This commit is contained in:
Henry Sudhof 2012-04-12 18:34:50 +02:00 committed by Patrick Webster
parent 9f4908f0f2
commit fd4f973440
2 changed files with 326 additions and 280 deletions

View file

@ -552,7 +552,7 @@ foreach ($supported_dbms as $dbms)
case 'mssql': case 'mssql':
$line = substr($line, 0, -2); $line = substr($line, 0, -2);
$line .= "\n) ON [PRIMARY]" . (($textimage) ? ' TEXTIMAGE_ON [PRIMARY]' : '') . "\n"; $line .= "\n)";// ON [PRIMARY]" . (($textimage) ? ' TEXTIMAGE_ON [PRIMARY]' : '') . "\n";
$line .= "GO\n\n"; $line .= "GO\n\n";
break; break;
} }
@ -589,7 +589,7 @@ foreach ($supported_dbms as $dbms)
$line .= "\tCONSTRAINT [PK_{$table_name}] PRIMARY KEY CLUSTERED \n"; $line .= "\tCONSTRAINT [PK_{$table_name}] PRIMARY KEY CLUSTERED \n";
$line .= "\t(\n"; $line .= "\t(\n";
$line .= "\t\t[" . implode("],\n\t\t[", $table_data['PRIMARY_KEY']) . "]\n"; $line .= "\t\t[" . implode("],\n\t\t[", $table_data['PRIMARY_KEY']) . "]\n";
$line .= "\t) ON [PRIMARY] \n"; $line .= "\t) \n";
$line .= "GO\n\n"; $line .= "GO\n\n";
break; break;
@ -684,7 +684,7 @@ foreach ($supported_dbms as $dbms)
case 'mssql': case 'mssql':
$line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : ''; $line .= ($key_data[0] == 'INDEX') ? 'CREATE INDEX' : '';
$line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : ''; $line .= ($key_data[0] == 'UNIQUE') ? 'CREATE UNIQUE INDEX' : '';
$line .= " [{$key_name}] ON [{$table_name}]([" . implode('], [', $key_data[1]) . "]) ON [PRIMARY]\n"; $line .= " [{$key_name}] ON [{$table_name}]([" . implode('], [', $key_data[1]) . "]) \n";
$line .= "GO\n\n"; $line .= "GO\n\n";
break; break;
@ -863,8 +863,9 @@ function get_schema_struct()
'KEYS' => array( 'KEYS' => array(
'group_id' => array('INDEX', 'group_id'), 'group_id' => array('INDEX', 'group_id'),
'auth_opt_id' => array('INDEX', 'auth_option_id'), 'auth_opt_id' => array('INDEX', 'auth_option_id'),
'auth_role_id' => array('INDEX', 'auth_role_id'), 'auth_role_id' => array('INDEX', 'auth_role_id', 'auth_option_id'),
), ),
'PRIMARY_KEY' => array('group_id', 'forum_id', 'auth_option_id', 'auth_role_id', 'auth_setting'),
); );
$schema_data['phpbb_acl_options'] = array( $schema_data['phpbb_acl_options'] = array(
@ -921,6 +922,7 @@ function get_schema_struct()
'auth_option_id' => array('INDEX', 'auth_option_id'), 'auth_option_id' => array('INDEX', 'auth_option_id'),
'auth_role_id' => array('INDEX', 'auth_role_id'), 'auth_role_id' => array('INDEX', 'auth_role_id'),
), ),
'PRIMARY_KEY' => array('user_id', 'forum_id', 'auth_option_id', 'auth_role_id', 'auth_setting'),
); );
$schema_data['phpbb_banlist'] = array( $schema_data['phpbb_banlist'] = array(
@ -1142,6 +1144,7 @@ function get_schema_struct()
'user_id' => array('INDEX', 'user_id'), 'user_id' => array('INDEX', 'user_id'),
'notify_stat' => array('INDEX', 'notify_status'), 'notify_stat' => array('INDEX', 'notify_status'),
), ),
'PRIMARY_KEY' => array('forum_id', 'user_id'),
); );
$schema_data['phpbb_groups'] = array( $schema_data['phpbb_groups'] = array(
@ -1258,6 +1261,8 @@ function get_schema_struct()
'disp_idx' => array('INDEX', 'display_on_index'), 'disp_idx' => array('INDEX', 'display_on_index'),
'forum_id' => array('INDEX', 'forum_id'), 'forum_id' => array('INDEX', 'forum_id'),
), ),
'PRIMARY_KEY' => array('forum_id', 'user_id', 'group_id'),
); );
$schema_data['phpbb_modules'] = array( $schema_data['phpbb_modules'] = array(
@ -1293,6 +1298,7 @@ function get_schema_struct()
'poll_opt_id' => array('INDEX', 'poll_option_id'), 'poll_opt_id' => array('INDEX', 'poll_option_id'),
'topic_id' => array('INDEX', 'topic_id'), 'topic_id' => array('INDEX', 'topic_id'),
), ),
'PRIMARY_KEY' => array('topic_id', 'poll_option_id'),
); );
$schema_data['phpbb_poll_votes'] = array( $schema_data['phpbb_poll_votes'] = array(
@ -1307,6 +1313,7 @@ function get_schema_struct()
'vote_user_id' => array('INDEX', 'vote_user_id'), 'vote_user_id' => array('INDEX', 'vote_user_id'),
'vote_user_ip' => array('INDEX', 'vote_user_ip'), 'vote_user_ip' => array('INDEX', 'vote_user_ip'),
), ),
'PRIMARY_KEY' => array('topic_id', 'poll_option_id', 'vote_user_id'),
); );
$schema_data['phpbb_posts'] = array( $schema_data['phpbb_posts'] = array(
@ -1433,6 +1440,7 @@ function get_schema_struct()
'author_id' => array('INDEX', 'author_id'), 'author_id' => array('INDEX', 'author_id'),
'usr_flder_id' => array('INDEX', array('user_id', 'folder_id')), 'usr_flder_id' => array('INDEX', array('user_id', 'folder_id')),
), ),
'PRIMARY_KEY' => array('msg_id', 'user_id', 'author_id'),
); );
$schema_data['phpbb_profile_fields'] = array( $schema_data['phpbb_profile_fields'] = array(
@ -1568,6 +1576,7 @@ function get_schema_struct()
'word_id' => array('INDEX', 'word_id'), 'word_id' => array('INDEX', 'word_id'),
'post_id' => array('INDEX', 'post_id'), 'post_id' => array('INDEX', 'post_id'),
), ),
'PRIMARY_KEY' => array('post_id', 'word_id'),
); );
$schema_data['phpbb_sessions'] = array( $schema_data['phpbb_sessions'] = array(
@ -1683,6 +1692,7 @@ function get_schema_struct()
'tid' => array('INDEX', 'template_id'), 'tid' => array('INDEX', 'template_id'),
'tfn' => array('INDEX', 'template_filename'), 'tfn' => array('INDEX', 'template_filename'),
), ),
'PRIMARY_KEY' => array('template_id', 'template_filename'),
); );
$schema_data['phpbb_styles_theme'] = array( $schema_data['phpbb_styles_theme'] = array(
@ -1812,6 +1822,7 @@ function get_schema_struct()
'user_id' => array('INDEX', 'user_id'), 'user_id' => array('INDEX', 'user_id'),
'notify_stat' => array('INDEX', 'notify_status'), 'notify_stat' => array('INDEX', 'notify_status'),
), ),
'PRIMARY_KEY' => array('topic_id', 'user_id'),
); );
$schema_data['phpbb_user_group'] = array( $schema_data['phpbb_user_group'] = array(
@ -1826,6 +1837,7 @@ function get_schema_struct()
'user_id' => array('INDEX', 'user_id'), 'user_id' => array('INDEX', 'user_id'),
'group_leader' => array('INDEX', 'group_leader'), 'group_leader' => array('INDEX', 'group_leader'),
), ),
'PRIMARY_KEY' => array('group_id', 'user_id'),
); );
$schema_data['phpbb_users'] = array( $schema_data['phpbb_users'] = array(

File diff suppressed because it is too large Load diff