1*b0d29bc4SBrooks Davis-- Copyright 2013 The Kyua Authors. 2*b0d29bc4SBrooks Davis-- All rights reserved. 3*b0d29bc4SBrooks Davis-- 4*b0d29bc4SBrooks Davis-- Redistribution and use in source and binary forms, with or without 5*b0d29bc4SBrooks Davis-- modification, are permitted provided that the following conditions are 6*b0d29bc4SBrooks Davis-- met: 7*b0d29bc4SBrooks Davis-- 8*b0d29bc4SBrooks Davis-- * Redistributions of source code must retain the above copyright 9*b0d29bc4SBrooks Davis-- notice, this list of conditions and the following disclaimer. 10*b0d29bc4SBrooks Davis-- * Redistributions in binary form must reproduce the above copyright 11*b0d29bc4SBrooks Davis-- notice, this list of conditions and the following disclaimer in the 12*b0d29bc4SBrooks Davis-- documentation and/or other materials provided with the distribution. 13*b0d29bc4SBrooks Davis-- * Neither the name of Google Inc. nor the names of its contributors 14*b0d29bc4SBrooks Davis-- may be used to endorse or promote products derived from this software 15*b0d29bc4SBrooks Davis-- without specific prior written permission. 16*b0d29bc4SBrooks Davis-- 17*b0d29bc4SBrooks Davis-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18*b0d29bc4SBrooks Davis-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19*b0d29bc4SBrooks Davis-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20*b0d29bc4SBrooks Davis-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21*b0d29bc4SBrooks Davis-- OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22*b0d29bc4SBrooks Davis-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23*b0d29bc4SBrooks Davis-- LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24*b0d29bc4SBrooks Davis-- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25*b0d29bc4SBrooks Davis-- THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26*b0d29bc4SBrooks Davis-- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27*b0d29bc4SBrooks Davis-- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28*b0d29bc4SBrooks Davis 29*b0d29bc4SBrooks Davis-- \file store/v1-to-v2.sql 30*b0d29bc4SBrooks Davis-- Migration of a database with version 1 of the schema to version 2. 31*b0d29bc4SBrooks Davis-- 32*b0d29bc4SBrooks Davis-- Version 2 appeared in revision 9a73561a1e3975bba4cbfd19aee6b2365a39519e 33*b0d29bc4SBrooks Davis-- and its changes were: 34*b0d29bc4SBrooks Davis-- 35*b0d29bc4SBrooks Davis-- * Changed the primary key of the metadata table to be the 36*b0d29bc4SBrooks Davis-- schema_version, not the timestamp. Because timestamps only have 37*b0d29bc4SBrooks Davis-- second resolution, the old schema made testing of schema migrations 38*b0d29bc4SBrooks Davis-- difficult. 39*b0d29bc4SBrooks Davis-- 40*b0d29bc4SBrooks Davis-- * Introduced the metadatas table, which holds the metadata of all test 41*b0d29bc4SBrooks Davis-- programs and test cases in an abstract manner regardless of their 42*b0d29bc4SBrooks Davis-- interface. 43*b0d29bc4SBrooks Davis-- 44*b0d29bc4SBrooks Davis-- * Added the metadata_id field to the test_programs and test_cases 45*b0d29bc4SBrooks Davis-- tables, referencing the new metadatas table. 46*b0d29bc4SBrooks Davis-- 47*b0d29bc4SBrooks Davis-- * Changed the precision of the timeout metadata field to be in seconds 48*b0d29bc4SBrooks Davis-- rather than in microseconds. There is no data loss, and the code that 49*b0d29bc4SBrooks Davis-- writes the metadata is simplified. 50*b0d29bc4SBrooks Davis-- 51*b0d29bc4SBrooks Davis-- * Removed the atf_* and plain_* tables. 52*b0d29bc4SBrooks Davis-- 53*b0d29bc4SBrooks Davis-- * Added missing indexes to improve the performance of reports. 54*b0d29bc4SBrooks Davis-- 55*b0d29bc4SBrooks Davis-- * Added missing column affinities to the absolute_path and relative_path 56*b0d29bc4SBrooks Davis-- columns of the test_programs table. 57*b0d29bc4SBrooks Davis 58*b0d29bc4SBrooks Davis 59*b0d29bc4SBrooks Davis-- TODO(jmmv): Implement addition of missing affinities. 60*b0d29bc4SBrooks Davis 61*b0d29bc4SBrooks Davis 62*b0d29bc4SBrooks Davis-- 63*b0d29bc4SBrooks Davis-- Change primary key of the metadata table. 64*b0d29bc4SBrooks Davis-- 65*b0d29bc4SBrooks Davis 66*b0d29bc4SBrooks Davis 67*b0d29bc4SBrooks DavisCREATE TABLE new_metadata ( 68*b0d29bc4SBrooks Davis schema_version INTEGER PRIMARY KEY CHECK (schema_version >= 1), 69*b0d29bc4SBrooks Davis timestamp TIMESTAMP NOT NULL CHECK (timestamp >= 0) 70*b0d29bc4SBrooks Davis); 71*b0d29bc4SBrooks Davis 72*b0d29bc4SBrooks DavisINSERT INTO new_metadata (schema_version, timestamp) 73*b0d29bc4SBrooks Davis SELECT schema_version, timestamp FROM metadata; 74*b0d29bc4SBrooks Davis 75*b0d29bc4SBrooks DavisDROP TABLE metadata; 76*b0d29bc4SBrooks DavisALTER TABLE new_metadata RENAME TO metadata; 77*b0d29bc4SBrooks Davis 78*b0d29bc4SBrooks Davis 79*b0d29bc4SBrooks Davis-- 80*b0d29bc4SBrooks Davis-- Add the new tables, columns and indexes. 81*b0d29bc4SBrooks Davis-- 82*b0d29bc4SBrooks Davis 83*b0d29bc4SBrooks Davis 84*b0d29bc4SBrooks DavisCREATE TABLE metadatas ( 85*b0d29bc4SBrooks Davis metadata_id INTEGER NOT NULL, 86*b0d29bc4SBrooks Davis property_name TEXT NOT NULL, 87*b0d29bc4SBrooks Davis property_value TEXT, 88*b0d29bc4SBrooks Davis 89*b0d29bc4SBrooks Davis PRIMARY KEY (metadata_id, property_name) 90*b0d29bc4SBrooks Davis); 91*b0d29bc4SBrooks Davis 92*b0d29bc4SBrooks Davis 93*b0d29bc4SBrooks Davis-- Upgrade the test_programs table by adding missing column affinities and 94*b0d29bc4SBrooks Davis-- the new metadata_id column. 95*b0d29bc4SBrooks DavisCREATE TABLE new_test_programs ( 96*b0d29bc4SBrooks Davis test_program_id INTEGER PRIMARY KEY AUTOINCREMENT, 97*b0d29bc4SBrooks Davis action_id INTEGER REFERENCES actions, 98*b0d29bc4SBrooks Davis 99*b0d29bc4SBrooks Davis absolute_path TEXT NOT NULL, 100*b0d29bc4SBrooks Davis root TEXT NOT NULL, 101*b0d29bc4SBrooks Davis relative_path TEXT NOT NULL, 102*b0d29bc4SBrooks Davis test_suite_name TEXT NOT NULL, 103*b0d29bc4SBrooks Davis metadata_id INTEGER, 104*b0d29bc4SBrooks Davis interface TEXT NOT NULL 105*b0d29bc4SBrooks Davis); 106*b0d29bc4SBrooks DavisPRAGMA foreign_keys = OFF; 107*b0d29bc4SBrooks DavisINSERT INTO new_test_programs (test_program_id, action_id, absolute_path, 108*b0d29bc4SBrooks Davis root, relative_path, test_suite_name, 109*b0d29bc4SBrooks Davis interface) 110*b0d29bc4SBrooks Davis SELECT test_program_id, action_id, absolute_path, root, relative_path, 111*b0d29bc4SBrooks Davis test_suite_name, interface FROM test_programs; 112*b0d29bc4SBrooks DavisDROP TABLE test_programs; 113*b0d29bc4SBrooks DavisALTER TABLE new_test_programs RENAME TO test_programs; 114*b0d29bc4SBrooks DavisPRAGMA foreign_keys = ON; 115*b0d29bc4SBrooks Davis 116*b0d29bc4SBrooks Davis 117*b0d29bc4SBrooks DavisALTER TABLE test_cases ADD COLUMN metadata_id INTEGER; 118*b0d29bc4SBrooks Davis 119*b0d29bc4SBrooks Davis 120*b0d29bc4SBrooks DavisCREATE INDEX index_metadatas_by_id 121*b0d29bc4SBrooks Davis ON metadatas (metadata_id); 122*b0d29bc4SBrooks DavisCREATE INDEX index_test_programs_by_action_id 123*b0d29bc4SBrooks Davis ON test_programs (action_id); 124*b0d29bc4SBrooks DavisCREATE INDEX index_test_cases_by_test_programs_id 125*b0d29bc4SBrooks Davis ON test_cases (test_program_id); 126*b0d29bc4SBrooks Davis 127*b0d29bc4SBrooks Davis 128*b0d29bc4SBrooks Davis-- 129*b0d29bc4SBrooks Davis-- Data migration 130*b0d29bc4SBrooks Davis-- 131*b0d29bc4SBrooks Davis-- This is, by far, the trickiest part of the migration. 132*b0d29bc4SBrooks Davis-- TODO(jmmv): Describe the trickiness in here. 133*b0d29bc4SBrooks Davis-- 134*b0d29bc4SBrooks Davis 135*b0d29bc4SBrooks Davis 136*b0d29bc4SBrooks Davis-- Auxiliary table to construct the final contents of the metadatas table. 137*b0d29bc4SBrooks Davis-- 138*b0d29bc4SBrooks Davis-- We construct the contents by writing a row for every metadata property of 139*b0d29bc4SBrooks Davis-- every test program and test case. Entries corresponding to a test program 140*b0d29bc4SBrooks Davis-- will have the test_program_id field set to not NULL and entries corresponding 141*b0d29bc4SBrooks Davis-- to test cases will have the test_case_id set to not NULL. 142*b0d29bc4SBrooks Davis-- 143*b0d29bc4SBrooks Davis-- The tricky part, however, is to create the individual identifiers for every 144*b0d29bc4SBrooks Davis-- metadata entry. We do this by picking the minimum ROWID of a particular set 145*b0d29bc4SBrooks Davis-- of properties that map to a single test_program_id or test_case_id. 146*b0d29bc4SBrooks DavisCREATE TABLE tmp_metadatas ( 147*b0d29bc4SBrooks Davis test_program_id INTEGER DEFAULT NULL, 148*b0d29bc4SBrooks Davis test_case_id INTEGER DEFAULT NULL, 149*b0d29bc4SBrooks Davis interface TEXT NOT NULL, 150*b0d29bc4SBrooks Davis property_name TEXT NOT NULL, 151*b0d29bc4SBrooks Davis property_value TEXT NOT NULL, 152*b0d29bc4SBrooks Davis 153*b0d29bc4SBrooks Davis UNIQUE (test_program_id, test_case_id, property_name) 154*b0d29bc4SBrooks Davis); 155*b0d29bc4SBrooks DavisCREATE INDEX index_tmp_metadatas_by_test_case_id 156*b0d29bc4SBrooks Davis ON tmp_metadatas (test_case_id); 157*b0d29bc4SBrooks DavisCREATE INDEX index_tmp_metadatas_by_test_program_id 158*b0d29bc4SBrooks Davis ON tmp_metadatas (test_program_id); 159*b0d29bc4SBrooks Davis 160*b0d29bc4SBrooks Davis 161*b0d29bc4SBrooks Davis-- Populate default metadata values for all test programs and test cases. 162*b0d29bc4SBrooks Davis-- 163*b0d29bc4SBrooks Davis-- We do this first to ensure that all test programs and test cases have 164*b0d29bc4SBrooks Davis-- explicit values for their metadata. Because we want to keep historical data 165*b0d29bc4SBrooks Davis-- for the tests, we must record these values unconditionally instead of relying 166*b0d29bc4SBrooks Davis-- on the built-in values in the code. 167*b0d29bc4SBrooks Davis-- 168*b0d29bc4SBrooks Davis-- Once this is done, we override any values explicity set by the tests. 169*b0d29bc4SBrooks DavisCREATE TABLE tmp_default_metadata ( 170*b0d29bc4SBrooks Davis default_name TEXT PRIMARY KEY, 171*b0d29bc4SBrooks Davis default_value TEXT NOT NULL 172*b0d29bc4SBrooks Davis); 173*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('allowed_architectures', ''); 174*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('allowed_platforms', ''); 175*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('description', ''); 176*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('has_cleanup', 'false'); 177*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('required_configs', ''); 178*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('required_files', ''); 179*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('required_memory', '0'); 180*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('required_programs', ''); 181*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('required_user', ''); 182*b0d29bc4SBrooks DavisINSERT INTO tmp_default_metadata VALUES ('timeout', '300'); 183*b0d29bc4SBrooks DavisINSERT INTO tmp_metadatas 184*b0d29bc4SBrooks Davis SELECT test_program_id, NULL, interface, default_name, default_value 185*b0d29bc4SBrooks Davis FROM test_programs JOIN tmp_default_metadata; 186*b0d29bc4SBrooks DavisINSERT INTO tmp_metadatas 187*b0d29bc4SBrooks Davis SELECT NULL, test_case_id, interface, default_name, default_value 188*b0d29bc4SBrooks Davis FROM test_programs JOIN test_cases 189*b0d29bc4SBrooks Davis ON test_cases.test_program_id = test_programs.test_program_id 190*b0d29bc4SBrooks Davis JOIN tmp_default_metadata; 191*b0d29bc4SBrooks DavisDROP TABLE tmp_default_metadata; 192*b0d29bc4SBrooks Davis 193*b0d29bc4SBrooks Davis 194*b0d29bc4SBrooks Davis-- Populate metadata overrides from plain test programs. 195*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 196*b0d29bc4SBrooks Davis SET property_value = ( 197*b0d29bc4SBrooks Davis SELECT CAST(timeout / 1000000 AS TEXT) FROM plain_test_programs AS aux 198*b0d29bc4SBrooks Davis WHERE aux.test_program_id = tmp_metadatas.test_program_id) 199*b0d29bc4SBrooks Davis WHERE test_program_id IS NOT NULL AND property_name = 'timeout' 200*b0d29bc4SBrooks Davis AND interface = 'plain'; 201*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 202*b0d29bc4SBrooks Davis SET property_value = ( 203*b0d29bc4SBrooks Davis SELECT DISTINCT CAST(timeout / 1000000 AS TEXT) 204*b0d29bc4SBrooks Davis FROM test_cases AS aux JOIN plain_test_programs 205*b0d29bc4SBrooks Davis ON aux.test_program_id == plain_test_programs.test_program_id 206*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id) 207*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'timeout' 208*b0d29bc4SBrooks Davis AND interface = 'plain'; 209*b0d29bc4SBrooks Davis 210*b0d29bc4SBrooks Davis 211*b0d29bc4SBrooks DavisCREATE INDEX index_tmp_atf_test_cases_multivalues_by_test_case_id 212*b0d29bc4SBrooks Davis ON atf_test_cases_multivalues (test_case_id); 213*b0d29bc4SBrooks Davis 214*b0d29bc4SBrooks Davis 215*b0d29bc4SBrooks Davis-- Populate metadata overrides from ATF test cases. 216*b0d29bc4SBrooks DavisUPDATE atf_test_cases SET description = '' WHERE description IS NULL; 217*b0d29bc4SBrooks DavisUPDATE atf_test_cases SET required_user = '' WHERE required_user IS NULL; 218*b0d29bc4SBrooks Davis 219*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 220*b0d29bc4SBrooks Davis SET property_value = ( 221*b0d29bc4SBrooks Davis SELECT description FROM atf_test_cases AS aux 222*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id) 223*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'description' 224*b0d29bc4SBrooks Davis AND interface = 'atf'; 225*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 226*b0d29bc4SBrooks Davis SET property_value = ( 227*b0d29bc4SBrooks Davis SELECT has_cleanup FROM atf_test_cases AS aux 228*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id) 229*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'has_cleanup' 230*b0d29bc4SBrooks Davis AND interface = 'atf'; 231*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 232*b0d29bc4SBrooks Davis SET property_value = ( 233*b0d29bc4SBrooks Davis SELECT CAST(timeout / 1000000 AS TEXT) FROM atf_test_cases AS aux 234*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id) 235*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'timeout' 236*b0d29bc4SBrooks Davis AND interface = 'atf'; 237*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 238*b0d29bc4SBrooks Davis SET property_value = ( 239*b0d29bc4SBrooks Davis SELECT CAST(required_memory AS TEXT) FROM atf_test_cases AS aux 240*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id) 241*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'required_memory' 242*b0d29bc4SBrooks Davis AND interface = 'atf'; 243*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 244*b0d29bc4SBrooks Davis SET property_value = ( 245*b0d29bc4SBrooks Davis SELECT required_user FROM atf_test_cases AS aux 246*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id) 247*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'required_user' 248*b0d29bc4SBrooks Davis AND interface = 'atf'; 249*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 250*b0d29bc4SBrooks Davis SET property_value = ( 251*b0d29bc4SBrooks Davis SELECT GROUP_CONCAT(aux.property_value, ' ') 252*b0d29bc4SBrooks Davis FROM atf_test_cases_multivalues AS aux 253*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id AND 254*b0d29bc4SBrooks Davis aux.property_name = 'require.arch') 255*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'allowed_architectures' 256*b0d29bc4SBrooks Davis AND interface = 'atf' 257*b0d29bc4SBrooks Davis AND EXISTS(SELECT 1 FROM atf_test_cases_multivalues AS aux 258*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id 259*b0d29bc4SBrooks Davis AND property_name = 'require.arch'); 260*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 261*b0d29bc4SBrooks Davis SET property_value = ( 262*b0d29bc4SBrooks Davis SELECT GROUP_CONCAT(aux.property_value, ' ') 263*b0d29bc4SBrooks Davis FROM atf_test_cases_multivalues AS aux 264*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id AND 265*b0d29bc4SBrooks Davis aux.property_name = 'require.machine') 266*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'allowed_platforms' 267*b0d29bc4SBrooks Davis AND interface = 'atf' 268*b0d29bc4SBrooks Davis AND EXISTS(SELECT 1 FROM atf_test_cases_multivalues AS aux 269*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id 270*b0d29bc4SBrooks Davis AND property_name = 'require.machine'); 271*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 272*b0d29bc4SBrooks Davis SET property_value = ( 273*b0d29bc4SBrooks Davis SELECT GROUP_CONCAT(aux.property_value, ' ') 274*b0d29bc4SBrooks Davis FROM atf_test_cases_multivalues AS aux 275*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id AND 276*b0d29bc4SBrooks Davis aux.property_name = 'require.config') 277*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'required_configs' 278*b0d29bc4SBrooks Davis AND interface = 'atf' 279*b0d29bc4SBrooks Davis AND EXISTS(SELECT 1 FROM atf_test_cases_multivalues AS aux 280*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id 281*b0d29bc4SBrooks Davis AND property_name = 'require.config'); 282*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 283*b0d29bc4SBrooks Davis SET property_value = ( 284*b0d29bc4SBrooks Davis SELECT GROUP_CONCAT(aux.property_value, ' ') 285*b0d29bc4SBrooks Davis FROM atf_test_cases_multivalues AS aux 286*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id AND 287*b0d29bc4SBrooks Davis aux.property_name = 'require.files') 288*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'required_files' 289*b0d29bc4SBrooks Davis AND interface = 'atf' 290*b0d29bc4SBrooks Davis AND EXISTS(SELECT 1 FROM atf_test_cases_multivalues AS aux 291*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id 292*b0d29bc4SBrooks Davis AND property_name = 'require.files'); 293*b0d29bc4SBrooks DavisUPDATE tmp_metadatas 294*b0d29bc4SBrooks Davis SET property_value = ( 295*b0d29bc4SBrooks Davis SELECT GROUP_CONCAT(aux.property_value, ' ') 296*b0d29bc4SBrooks Davis FROM atf_test_cases_multivalues AS aux 297*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id AND 298*b0d29bc4SBrooks Davis aux.property_name = 'require.progs') 299*b0d29bc4SBrooks Davis WHERE test_case_id IS NOT NULL AND property_name = 'required_programs' 300*b0d29bc4SBrooks Davis AND interface = 'atf' 301*b0d29bc4SBrooks Davis AND EXISTS(SELECT 1 FROM atf_test_cases_multivalues AS aux 302*b0d29bc4SBrooks Davis WHERE aux.test_case_id = tmp_metadatas.test_case_id 303*b0d29bc4SBrooks Davis AND property_name = 'require.progs'); 304*b0d29bc4SBrooks Davis 305*b0d29bc4SBrooks Davis 306*b0d29bc4SBrooks Davis-- Fill metadata_id pointers in the test_programs and test_cases tables. 307*b0d29bc4SBrooks DavisUPDATE test_programs 308*b0d29bc4SBrooks Davis SET metadata_id = ( 309*b0d29bc4SBrooks Davis SELECT MIN(ROWID) FROM tmp_metadatas 310*b0d29bc4SBrooks Davis WHERE tmp_metadatas.test_program_id = test_programs.test_program_id 311*b0d29bc4SBrooks Davis ); 312*b0d29bc4SBrooks DavisUPDATE test_cases 313*b0d29bc4SBrooks Davis SET metadata_id = ( 314*b0d29bc4SBrooks Davis SELECT MIN(ROWID) FROM tmp_metadatas 315*b0d29bc4SBrooks Davis WHERE tmp_metadatas.test_case_id = test_cases.test_case_id 316*b0d29bc4SBrooks Davis ); 317*b0d29bc4SBrooks Davis 318*b0d29bc4SBrooks Davis 319*b0d29bc4SBrooks Davis-- Populate the metadatas table based on tmp_metadatas. 320*b0d29bc4SBrooks DavisINSERT INTO metadatas (metadata_id, property_name, property_value) 321*b0d29bc4SBrooks Davis SELECT ( 322*b0d29bc4SBrooks Davis SELECT MIN(ROWID) FROM tmp_metadatas AS s 323*b0d29bc4SBrooks Davis WHERE s.test_program_id = tmp_metadatas.test_program_id 324*b0d29bc4SBrooks Davis ), property_name, property_value 325*b0d29bc4SBrooks Davis FROM tmp_metadatas WHERE test_program_id IS NOT NULL; 326*b0d29bc4SBrooks DavisINSERT INTO metadatas (metadata_id, property_name, property_value) 327*b0d29bc4SBrooks Davis SELECT ( 328*b0d29bc4SBrooks Davis SELECT MIN(ROWID) FROM tmp_metadatas AS s 329*b0d29bc4SBrooks Davis WHERE s.test_case_id = tmp_metadatas.test_case_id 330*b0d29bc4SBrooks Davis ), property_name, property_value 331*b0d29bc4SBrooks Davis FROM tmp_metadatas WHERE test_case_id IS NOT NULL; 332*b0d29bc4SBrooks Davis 333*b0d29bc4SBrooks Davis 334*b0d29bc4SBrooks Davis-- Drop temporary entities used during the migration. 335*b0d29bc4SBrooks DavisDROP INDEX index_tmp_atf_test_cases_multivalues_by_test_case_id; 336*b0d29bc4SBrooks DavisDROP INDEX index_tmp_metadatas_by_test_program_id; 337*b0d29bc4SBrooks DavisDROP INDEX index_tmp_metadatas_by_test_case_id; 338*b0d29bc4SBrooks DavisDROP TABLE tmp_metadatas; 339*b0d29bc4SBrooks Davis 340*b0d29bc4SBrooks Davis 341*b0d29bc4SBrooks Davis-- 342*b0d29bc4SBrooks Davis-- Drop obsolete tables. 343*b0d29bc4SBrooks Davis-- 344*b0d29bc4SBrooks Davis 345*b0d29bc4SBrooks Davis 346*b0d29bc4SBrooks DavisDROP TABLE atf_test_cases; 347*b0d29bc4SBrooks DavisDROP TABLE atf_test_cases_multivalues; 348*b0d29bc4SBrooks DavisDROP TABLE plain_test_programs; 349*b0d29bc4SBrooks Davis 350*b0d29bc4SBrooks Davis 351*b0d29bc4SBrooks Davis-- 352*b0d29bc4SBrooks Davis-- Update the metadata version. 353*b0d29bc4SBrooks Davis-- 354*b0d29bc4SBrooks Davis 355*b0d29bc4SBrooks Davis 356*b0d29bc4SBrooks DavisINSERT INTO metadata (timestamp, schema_version) 357*b0d29bc4SBrooks Davis VALUES (strftime('%s', 'now'), 2); 358