import common from autotest_lib.database import db_utils RECREATE_VIEWS_UP = """ CREATE VIEW tko_test_view AS SELECT tko_tests.test_idx, tko_tests.job_idx, tko_tests.test, tko_tests.subdir, tko_tests.kernel_idx, tko_tests.status, tko_tests.reason, tko_tests.machine_idx, tko_tests.started_time AS test_started_time, tko_tests.finished_time AS test_finished_time, tko_jobs.tag AS job_tag, tko_jobs.label AS job_label, tko_jobs.username AS job_username, tko_jobs.queued_time AS job_queued_time, tko_jobs.started_time AS job_started_time, tko_jobs.finished_time AS job_finished_time, tko_machines.hostname AS machine_hostname, tko_machines.machine_group, tko_machines.owner AS machine_owner, tko_kernels.kernel_hash, tko_kernels.base AS kernel_base, tko_kernels.printable AS kernel_printable, tko_status.word AS status_word FROM tko_tests INNER JOIN tko_jobs ON tko_jobs.job_idx = tko_tests.job_idx INNER JOIN tko_machines ON tko_machines.machine_idx = tko_jobs.machine_idx INNER JOIN tko_kernels ON tko_kernels.kernel_idx = tko_tests.kernel_idx INNER JOIN tko_status ON tko_status.status_idx = tko_tests.status; CREATE VIEW tko_perf_view AS SELECT tko_tests.test_idx, tko_tests.job_idx, tko_tests.test, tko_tests.subdir, tko_tests.kernel_idx, tko_tests.status, tko_tests.reason, tko_tests.machine_idx, tko_tests.started_time AS test_started_time, tko_tests.finished_time AS test_finished_time, tko_jobs.tag AS job_tag, tko_jobs.label AS job_label, tko_jobs.username AS job_username, tko_jobs.queued_time AS job_queued_time, tko_jobs.started_time AS job_started_time, tko_jobs.finished_time AS job_finished_time, tko_machines.hostname AS machine_hostname, tko_machines.machine_group, tko_machines.owner AS machine_owner, tko_kernels.kernel_hash, tko_kernels.base AS kernel_base, tko_kernels.printable AS kernel_printable, tko_status.word AS status_word, tko_iteration_result.iteration, tko_iteration_result.attribute AS iteration_key, tko_iteration_result.value AS iteration_value FROM tko_tests INNER JOIN tko_jobs ON tko_jobs.job_idx = tko_tests.job_idx INNER JOIN tko_machines ON tko_machines.machine_idx = tko_jobs.machine_idx INNER JOIN tko_kernels ON tko_kernels.kernel_idx = tko_tests.kernel_idx INNER JOIN tko_status ON tko_status.status_idx = tko_tests.status INNER JOIN tko_iteration_result ON tko_iteration_result.test_idx = tko_tests.test_idx; CREATE VIEW tko_test_view_2 AS SELECT tko_tests.test_idx, tko_tests.job_idx, tko_tests.test AS test_name, tko_tests.subdir, tko_tests.kernel_idx, tko_tests.status AS status_idx, tko_tests.reason, tko_tests.machine_idx, tko_tests.started_time AS test_started_time, tko_tests.finished_time AS test_finished_time, tko_jobs.tag AS job_tag, tko_jobs.label AS job_name, tko_jobs.username AS job_owner, tko_jobs.queued_time AS job_queued_time, tko_jobs.started_time AS job_started_time, tko_jobs.finished_time AS job_finished_time, tko_jobs.afe_job_id AS afe_job_id, tko_machines.hostname AS hostname, tko_machines.machine_group AS platform, tko_machines.owner AS machine_owner, tko_kernels.kernel_hash, tko_kernels.base AS kernel_base, tko_kernels.printable AS kernel, tko_status.word AS status FROM tko_tests INNER JOIN tko_jobs ON tko_jobs.job_idx = tko_tests.job_idx INNER JOIN tko_machines ON tko_machines.machine_idx = tko_jobs.machine_idx INNER JOIN tko_kernels ON tko_kernels.kernel_idx = tko_tests.kernel_idx INNER JOIN tko_status ON tko_status.status_idx = tko_tests.status; CREATE VIEW tko_test_view_outer_joins AS SELECT tko_tests.test_idx, tko_tests.job_idx, tko_tests.test AS test_name, tko_tests.subdir, tko_tests.kernel_idx, tko_tests.status AS status_idx, tko_tests.reason, tko_tests.machine_idx, tko_tests.started_time AS test_started_time, tko_tests.finished_time AS test_finished_time, tko_jobs.tag AS job_tag, tko_jobs.label AS job_name, tko_jobs.username AS job_owner, tko_jobs.queued_time AS job_queued_time, tko_jobs.started_time AS job_started_time, tko_jobs.finished_time AS job_finished_time, tko_machines.hostname AS hostname, tko_machines.machine_group AS platform, tko_machines.owner AS machine_owner, tko_kernels.kernel_hash, tko_kernels.base AS kernel_base, tko_kernels.printable AS kernel, tko_status.word AS status FROM tko_tests LEFT OUTER JOIN tko_jobs ON tko_jobs.job_idx = tko_tests.job_idx LEFT OUTER JOIN tko_machines ON tko_machines.machine_idx = tko_jobs.machine_idx LEFT OUTER JOIN tko_kernels ON tko_kernels.kernel_idx = tko_tests.kernel_idx LEFT OUTER JOIN tko_status ON tko_status.status_idx = tko_tests.status; CREATE VIEW tko_perf_view_2 AS SELECT tko_tests.test_idx, tko_tests.job_idx, tko_tests.test AS test_name, tko_tests.subdir, tko_tests.kernel_idx, tko_tests.status AS status_idx, tko_tests.reason, tko_tests.machine_idx, tko_tests.started_time AS test_started_time, tko_tests.finished_time AS test_finished_time, tko_jobs.tag AS job_tag, tko_jobs.label AS job_name, tko_jobs.username AS job_owner, tko_jobs.queued_time AS job_queued_time, tko_jobs.started_time AS job_started_time, tko_jobs.finished_time AS job_finished_time, tko_machines.hostname AS hostname, tko_machines.machine_group AS platform, tko_machines.owner AS machine_owner, tko_kernels.kernel_hash, tko_kernels.base AS kernel_base, tko_kernels.printable AS kernel, tko_status.word AS status, tko_iteration_result.iteration, tko_iteration_result.attribute AS iteration_key, tko_iteration_result.value AS iteration_value FROM tko_tests LEFT OUTER JOIN tko_jobs ON tko_jobs.job_idx = tko_tests.job_idx LEFT OUTER JOIN tko_machines ON tko_machines.machine_idx = tko_jobs.machine_idx LEFT OUTER JOIN tko_kernels ON tko_kernels.kernel_idx = tko_tests.kernel_idx LEFT OUTER JOIN tko_status ON tko_status.status_idx = tko_tests.status LEFT OUTER JOIN tko_iteration_result ON tko_iteration_result.test_idx = tko_tests.test_idx; """ RECREATE_VIEWS_DOWN = """ CREATE VIEW test_view AS SELECT tests.test_idx, tests.job_idx, tests.test, tests.subdir, tests.kernel_idx, tests.status, tests.reason, tests.machine_idx, tests.started_time AS test_started_time, tests.finished_time AS test_finished_time, jobs.tag AS job_tag, jobs.label AS job_label, jobs.username AS job_username, jobs.queued_time AS job_queued_time, jobs.started_time AS job_started_time, jobs.finished_time AS job_finished_time, machines.hostname AS machine_hostname, machines.machine_group, machines.owner AS machine_owner, kernels.kernel_hash, kernels.base AS kernel_base, kernels.printable AS kernel_printable, status.word AS status_word FROM tests INNER JOIN jobs ON jobs.job_idx = tests.job_idx INNER JOIN machines ON machines.machine_idx = jobs.machine_idx INNER JOIN kernels ON kernels.kernel_idx = tests.kernel_idx INNER JOIN status ON status.status_idx = tests.status; CREATE VIEW perf_view AS SELECT tests.test_idx, tests.job_idx, tests.test, tests.subdir, tests.kernel_idx, tests.status, tests.reason, tests.machine_idx, tests.started_time AS test_started_time, tests.finished_time AS test_finished_time, jobs.tag AS job_tag, jobs.label AS job_label, jobs.username AS job_username, jobs.queued_time AS job_queued_time, jobs.started_time AS job_started_time, jobs.finished_time AS job_finished_time, machines.hostname AS machine_hostname, machines.machine_group, machines.owner AS machine_owner, kernels.kernel_hash, kernels.base AS kernel_base, kernels.printable AS kernel_printable, status.word AS status_word, iteration_result.iteration, iteration_result.attribute AS iteration_key, iteration_result.value AS iteration_value FROM tests INNER JOIN jobs ON jobs.job_idx = tests.job_idx INNER JOIN machines ON machines.machine_idx = jobs.machine_idx INNER JOIN kernels ON kernels.kernel_idx = tests.kernel_idx INNER JOIN status ON status.status_idx = tests.status INNER JOIN iteration_result ON iteration_result.test_idx = tests.test_idx; CREATE VIEW test_view_outer_joins AS SELECT tests.test_idx, tests.job_idx, tests.test AS test_name, tests.subdir, tests.kernel_idx, tests.status AS status_idx, tests.reason, tests.machine_idx, tests.started_time AS test_started_time, tests.finished_time AS test_finished_time, jobs.tag AS job_tag, jobs.label AS job_name, jobs.username AS job_owner, jobs.queued_time AS job_queued_time, jobs.started_time AS job_started_time, jobs.finished_time AS job_finished_time, machines.hostname AS hostname, machines.machine_group AS platform, machines.owner AS machine_owner, kernels.kernel_hash, kernels.base AS kernel_base, kernels.printable AS kernel, status.word AS status FROM tests LEFT OUTER JOIN jobs ON jobs.job_idx = tests.job_idx LEFT OUTER JOIN machines ON machines.machine_idx = jobs.machine_idx LEFT OUTER JOIN kernels ON kernels.kernel_idx = tests.kernel_idx LEFT OUTER JOIN status ON status.status_idx = tests.status; CREATE VIEW test_view_2 AS SELECT tests.test_idx, tests.job_idx, tests.test AS test_name, tests.subdir, tests.kernel_idx, tests.status AS status_idx, tests.reason, tests.machine_idx, tests.started_time AS test_started_time, tests.finished_time AS test_finished_time, jobs.tag AS job_tag, jobs.label AS job_name, jobs.username AS job_owner, jobs.queued_time AS job_queued_time, jobs.started_time AS job_started_time, jobs.finished_time AS job_finished_time, jobs.afe_job_id AS afe_job_id, machines.hostname AS hostname, machines.machine_group AS platform, machines.owner AS machine_owner, kernels.kernel_hash, kernels.base AS kernel_base, kernels.printable AS kernel, status.word AS status FROM tests INNER JOIN jobs ON jobs.job_idx = tests.job_idx INNER JOIN machines ON machines.machine_idx = jobs.machine_idx INNER JOIN kernels ON kernels.kernel_idx = tests.kernel_idx INNER JOIN status ON status.status_idx = tests.status; CREATE VIEW perf_view_2 AS SELECT tests.test_idx, tests.job_idx, tests.test AS test_name, tests.subdir, tests.kernel_idx, tests.status AS status_idx, tests.reason, tests.machine_idx, tests.started_time AS test_started_time, tests.finished_time AS test_finished_time, jobs.tag AS job_tag, jobs.label AS job_name, jobs.username AS job_owner, jobs.queued_time AS job_queued_time, jobs.started_time AS job_started_time, jobs.finished_time AS job_finished_time, machines.hostname AS hostname, machines.machine_group AS platform, machines.owner AS machine_owner, kernels.kernel_hash, kernels.base AS kernel_base, kernels.printable AS kernel, status.word AS status, iteration_result.iteration, iteration_result.attribute AS iteration_key, iteration_result.value AS iteration_value FROM tests LEFT OUTER JOIN jobs ON jobs.job_idx = tests.job_idx LEFT OUTER JOIN machines ON machines.machine_idx = jobs.machine_idx LEFT OUTER JOIN kernels ON kernels.kernel_idx = tests.kernel_idx LEFT OUTER JOIN status ON status.status_idx = tests.status LEFT OUTER JOIN iteration_result ON iteration_result.test_idx = tests.test_idx; """ ORIG_NAMES = ( 'embedded_graphing_queries', 'iteration_attributes', 'iteration_result', 'jobs', 'kernels', 'machines', 'patches', 'query_history', 'saved_queries', 'status', 'test_attributes', 'test_labels', 'test_labels_tests', 'tests', ) RENAMES_UP = dict((name, 'tko_' + name) for name in ORIG_NAMES) VIEWS_TO_DROP_UP = ( 'test_view', 'test_view_2', 'test_view_outer_joins', 'perf_view', 'perf_view_2', ) RENAMES_DOWN = dict((value, key) for key, value in RENAMES_UP.iteritems()) VIEWS_TO_DROP_DOWN = ['tko_' + view for view in VIEWS_TO_DROP_UP] def migrate_up(manager): db_utils.drop_views(manager, VIEWS_TO_DROP_UP) db_utils.rename(manager, RENAMES_UP) manager.execute_script(RECREATE_VIEWS_UP) def migrate_down(manager): db_utils.drop_views(manager, VIEWS_TO_DROP_DOWN) db_utils.rename(manager, RENAMES_DOWN) manager.execute_script(RECREATE_VIEWS_DOWN)