import common
from autotest_lib.database import migrate
UP_SQL = """\
BEGIN;
SET storage_engine = InnoDB;
CREATE TABLE `planner_plans` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar(255) NOT NULL UNIQUE,
`label_override` varchar(255) NULL,
`support` longtext NOT NULL,
`complete` bool NOT NULL,
`dirty` bool NOT NULL,
`initialized` bool NOT NULL
)
;
CREATE TABLE `planner_hosts` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`host_id` integer NOT NULL,
`complete` bool NOT NULL,
`blocked` bool NOT NULL
)
;
ALTER TABLE `planner_hosts` ADD CONSTRAINT hosts_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
ALTER TABLE `planner_hosts` ADD CONSTRAINT hosts_host_id_fk FOREIGN KEY (`host_id`) REFERENCES `afe_hosts` (`id`);
CREATE TABLE `planner_test_control_files` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`the_hash` varchar(40) NOT NULL UNIQUE,
`contents` longtext NOT NULL
)
;
CREATE TABLE `planner_tests` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`control_file_id` integer NOT NULL,
`execution_order` integer NOT NULL
)
;
ALTER TABLE `planner_tests` ADD CONSTRAINT tests_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
ALTER TABLE `planner_tests` ADD CONSTRAINT tests_control_file_id_fk FOREIGN KEY (`control_file_id`) REFERENCES `planner_test_control_files` (`id`);
CREATE TABLE `planner_test_jobs` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`test_id` integer NOT NULL,
`afe_job_id` integer NOT NULL
)
;
ALTER TABLE `planner_test_jobs` ADD CONSTRAINT test_jobs_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
ALTER TABLE `planner_test_jobs` ADD CONSTRAINT test_jobs_test_id_fk FOREIGN KEY (`test_id`) REFERENCES `planner_tests` (`id`);
ALTER TABLE `planner_test_jobs` ADD CONSTRAINT test_jobs_afe_job_id_fk FOREIGN KEY (`afe_job_id`) REFERENCES `afe_jobs` (`id`);
CREATE TABLE `planner_bugs` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`external_uid` varchar(255) NOT NULL UNIQUE
)
;
CREATE TABLE `planner_test_runs` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`test_job_id` integer NOT NULL,
`tko_test_id` integer(10) UNSIGNED NOT NULL,
`status` varchar(16) NOT NULL,
`finalized` bool NOT NULL,
`seen` bool NOT NULL,
`triaged` bool NOT NULL
)
;
ALTER TABLE `planner_test_runs` ADD CONSTRAINT test_runs_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
ALTER TABLE `planner_test_runs` ADD CONSTRAINT test_runs_test_job_id_fk FOREIGN KEY (`test_job_id`) REFERENCES `planner_test_jobs` (`id`);
ALTER TABLE `planner_test_runs` ADD CONSTRAINT test_runs_tko_test_id_fk FOREIGN KEY (`tko_test_id`) REFERENCES `%(tko_db_name)s`.`tko_tests` (`test_idx`);
CREATE TABLE `planner_data_types` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`name` varchar(255) NOT NULL,
`db_table` varchar(255) NOT NULL
)
;
CREATE TABLE `planner_history` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`action_id` integer NOT NULL,
`user_id` integer NOT NULL,
`data_type_id` integer NOT NULL,
`object_id` integer NOT NULL,
`old_object_repr` longtext NOT NULL,
`new_object_repr` longtext NOT NULL,
`time` datetime NOT NULL
)
;
ALTER TABLE `planner_history` ADD CONSTRAINT history_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
ALTER TABLE `planner_history` ADD CONSTRAINT history_user_id_fk FOREIGN KEY (`user_id`) REFERENCES `afe_users` (`id`);
ALTER TABLE `planner_history` ADD CONSTRAINT history_data_type_id_fk FOREIGN KEY (`data_type_id`) REFERENCES `planner_data_types` (`id`);
CREATE TABLE `planner_saved_objects` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`user_id` integer NOT NULL,
`type` varchar(16) NOT NULL,
`name` varchar(255) NOT NULL,
`encoded_object` longtext NOT NULL,
UNIQUE (`user_id`, `type`, `name`)
)
;
ALTER TABLE `planner_saved_objects` ADD CONSTRAINT saved_objects_user_id_fk FOREIGN KEY (`user_id`) REFERENCES `afe_users` (`id`);
CREATE TABLE `planner_custom_queries` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`query` longtext NOT NULL
)
;
ALTER TABLE `planner_custom_queries` ADD CONSTRAINT custom_queries_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
CREATE TABLE `planner_keyvals` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`the_hash` varchar(40) NOT NULL UNIQUE,
`key` varchar(1024) NOT NULL,
`value` varchar(1024) NOT NULL
)
;
CREATE TABLE `planner_autoprocess` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`condition` longtext NOT NULL,
`enabled` bool NOT NULL,
`reason_override` varchar(255) NULL
)
;
ALTER TABLE `planner_autoprocess` ADD CONSTRAINT autoprocess_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
CREATE TABLE `planner_plan_owners` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`plan_id` integer NOT NULL,
`user_id` integer NOT NULL,
UNIQUE (`plan_id`, `user_id`)
)
;
ALTER TABLE `planner_plan_owners` ADD CONSTRAINT plan_owners_plan_id_fk FOREIGN KEY (`plan_id`) REFERENCES `planner_plans` (`id`);
ALTER TABLE `planner_plan_owners` ADD CONSTRAINT plan_owners_user_id_fk FOREIGN KEY (`user_id`) REFERENCES `afe_users` (`id`);
CREATE TABLE `planner_test_run_bugs` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`testrun_id` integer NOT NULL,
`bug_id` integer NOT NULL,
UNIQUE (`testrun_id`, `bug_id`)
)
;
ALTER TABLE `planner_test_run_bugs` ADD CONSTRAINT test_run_bugs_testrun_id_fk FOREIGN KEY (`testrun_id`) REFERENCES `planner_test_runs` (`id`);
ALTER TABLE `planner_test_run_bugs` ADD CONSTRAINT test_run_bugs_bug_id_fk FOREIGN KEY (`bug_id`) REFERENCES `planner_bugs` (`id`);
CREATE TABLE `planner_autoprocess_labels` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`autoprocess_id` integer NOT NULL,
`testlabel_id` integer NOT NULL,
UNIQUE (`autoprocess_id`, `testlabel_id`)
)
;
ALTER TABLE `planner_autoprocess_labels` ADD CONSTRAINT autoprocess_labels_autoprocess_id_fk FOREIGN KEY (`autoprocess_id`) REFERENCES `planner_autoprocess` (`id`);
ALTER TABLE `planner_autoprocess_labels` ADD CONSTRAINT autoprocess_labels_testlabel_id_fk FOREIGN KEY (`testlabel_id`) REFERENCES `%(tko_db_name)s`.`tko_test_labels` (`id`);
CREATE TABLE `planner_autoprocess_keyvals` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`autoprocess_id` integer NOT NULL,
`keyval_id` integer NOT NULL,
UNIQUE (`autoprocess_id`, `keyval_id`)
)
;
ALTER TABLE `planner_autoprocess_keyvals` ADD CONSTRAINT autoprocess_keyvals_autoprocess_id_fk FOREIGN KEY (`autoprocess_id`) REFERENCES `planner_autoprocess` (`id`);
ALTER TABLE `planner_autoprocess_keyvals` ADD CONSTRAINT autoprocess_keyvals_keyval_id_fk FOREIGN KEY (`keyval_id`) REFERENCES `planner_keyvals` (`id`);
CREATE TABLE `planner_autoprocess_bugs` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`autoprocess_id` integer NOT NULL,
`bug_id` integer NOT NULL,
UNIQUE (`autoprocess_id`, `bug_id`)
)
;
ALTER TABLE `planner_autoprocess_bugs` ADD CONSTRAINT autoprocess_bugs_autoprocess_id_fk FOREIGN KEY (`autoprocess_id`) REFERENCES `planner_autoprocess` (`id`);
ALTER TABLE `planner_autoprocess_bugs` ADD CONSTRAINT autoprocess_bugs_bug_id_fk FOREIGN KEY (`bug_id`) REFERENCES `planner_bugs` (`id`);
CREATE INDEX `planner_hosts_plan_id` ON `planner_hosts` (`plan_id`);
CREATE INDEX `planner_hosts_host_id` ON `planner_hosts` (`host_id`);
CREATE INDEX `planner_tests_plan_id` ON `planner_tests` (`plan_id`);
CREATE INDEX `planner_tests_control_file_id` ON `planner_tests` (`control_file_id`);
CREATE INDEX `planner_test_jobs_plan_id` ON `planner_test_jobs` (`plan_id`);
CREATE INDEX `planner_test_jobs_test_id` ON `planner_test_jobs` (`test_id`);
CREATE INDEX `planner_test_jobs_afe_job_id` ON `planner_test_jobs` (`afe_job_id`);
CREATE INDEX `planner_test_runs_plan_id` ON `planner_test_runs` (`plan_id`);
CREATE INDEX `planner_test_runs_test_job_id` ON `planner_test_runs` (`test_job_id`);
CREATE INDEX `planner_test_runs_tko_test_id` ON `planner_test_runs` (`tko_test_id`);
CREATE INDEX `planner_history_plan_id` ON `planner_history` (`plan_id`);
CREATE INDEX `planner_history_user_id` ON `planner_history` (`user_id`);
CREATE INDEX `planner_history_data_type_id` ON `planner_history` (`data_type_id`);
CREATE INDEX `planner_saved_objects_user_id` ON `planner_saved_objects` (`user_id`);
CREATE INDEX `planner_custom_queries_plan_id` ON `planner_custom_queries` (`plan_id`);
CREATE INDEX `planner_autoprocess_plan_id` ON `planner_autoprocess` (`plan_id`);
COMMIT;
"""
DOWN_SQL = """\
DROP TABLE IF EXISTS planner_autoprocess_labels;
DROP TABLE IF EXISTS planner_autoprocess_bugs;
DROP TABLE IF EXISTS planner_autoprocess_keyvals;
DROP TABLE IF EXISTS planner_autoprocess;
DROP TABLE IF EXISTS planner_custom_queries;
DROP TABLE IF EXISTS planner_saved_objects;
DROP TABLE IF EXISTS planner_history;
DROP TABLE IF EXISTS planner_data_types;
DROP TABLE IF EXISTS planner_hosts;
DROP TABLE IF EXISTS planner_keyvals;
DROP TABLE IF EXISTS planner_plan_owners;
DROP TABLE IF EXISTS planner_test_run_bugs;
DROP TABLE IF EXISTS planner_test_runs;
DROP TABLE IF EXISTS planner_test_jobs;
DROP TABLE IF EXISTS planner_tests;
DROP TABLE IF EXISTS planner_test_control_files;
DROP TABLE IF EXISTS planner_bugs;
DROP TABLE IF EXISTS planner_plans;
"""
def migrate_up(manager):
tko_manager = migrate.get_migration_manager(db_name='TKO', debug=False,
force=False)
if tko_manager.get_db_version() < 31:
raise Exception('You must update the TKO database to at least version '
'31 before applying AUTOTEST_WEB migration 45')
manager.execute_script(UP_SQL % dict(tko_db_name=tko_manager.get_db_name()))