| |
" (SELECT DISTINCT script_id FROM pkg_script);"
|
| |
"END;"
|
| |
},
|
| + |
{21,
|
| + |
"CREATE TABLE option ("
|
| + |
"option_id INTEGER PRIMARY KEY,"
|
| + |
"option TEXT NOT NULL UNIQUE"
|
| + |
");"
|
| + |
"CREATE TABLE option_desc ("
|
| + |
"option_desc_id INTEGER PRIMARY KEY,"
|
| + |
"option_desc TEXT NOT NULL UNIQUE"
|
| + |
");"
|
| + |
"CREATE TABLE pkg_option ("
|
| + |
"package_id INTEGER NOT NULL REFERENCES packages(id) "
|
| + |
"ON DELETE CASCADE ON UPDATE CASCADE,"
|
| + |
"option_id INTEGER NOT NULL REFERENCES option(option_id) "
|
| + |
"ON DELETE RESTRICT ON UPDATE CASCADE,"
|
| + |
"value TEXT NOT NULL,"
|
| + |
"PRIMARY KEY(package_id, option_id)"
|
| + |
");"
|
| + |
"CREATE TABLE pkg_option_desc ("
|
| + |
"package_id INTEGER NOT NULL REFERENCES packages(id) "
|
| + |
"ON DELETE CASCADE ON UPDATE CASCADE,"
|
| + |
"option_id INTEGER NOT NULL REFERENCES option(option_id) "
|
| + |
"ON DELETE RESTRICT ON UPDATE CASCADE,"
|
| + |
"option_desc_id INTEGER NOT NULL "
|
| + |
"REFERENCES option_desc(option_desc_id) "
|
| + |
"ON DELETE RESTRICT ON UPDATE CASCADE,"
|
| + |
"PRIMARY KEY(package_id, option_id)"
|
| + |
");"
|
| + |
"CREATE TABLE pkg_option_default ("
|
| + |
"package_id INTEGER NOT NULL REFERENCES packages(id) "
|
| + |
"ON DELETE CASCADE ON UPDATE CASCADE,"
|
| + |
"option_id INTEGER NOT NULL REFERENCES option(option_id) "
|
| + |
"ON DELETE RESTRICT ON UPDATE CASCADE,"
|
| + |
"default TEXT NOT NULL,"
|
| + |
"PRIMARY KEY(package_id, option_id)"
|
| + |
");"
|
| + |
"INSERT INTO option(option) "
|
| + |
"SELECT DISTINCT option FROM options;"
|
| + |
"INSERT INTO pkg_option(package_id, option_id, value) "
|
| + |
"SELECT package_id, option_id, value "
|
| + |
"FROM options oo JOIN option o ON (oo.option = o.option);"
|
| + |
"DROP TABLE options;"
|
| + |
"CREATE VIEW options AS "
|
| + |
"SELECT package_id, option, value "
|
| + |
"FROM pkg_option JOIN option USING(option_id);"
|
| + |
"CREATE TRIGGER options_update "
|
| + |
"INSTEAD OF UPDATE ON options "
|
| + |
"FOR EACH ROW BEGIN "
|
| + |
"UPDATE pkg_option "
|
| + |
"SET value = new.value "
|
| + |
"WHERE package_id = old.package_id AND "
|
| + |
"option_id = ( SELECT option_id FROM option "
|
| + |
"WHERE option = old.option );"
|
| + |
"END;"
|
| + |
"CREATE TRIGGER options_insert "
|
| + |
"INSTEAD OF INSERT ON options "
|
| + |
"FOR EACH ROW BEGIN "
|
| + |
"INSERT OR IGNORE INTO option(option) "
|
| + |
"VALUES(new.option);"
|
| + |
"INSERT INTO pkg_option(package_id, option_id, value) "
|
| + |
"VALUES (new.package_id, "
|
| + |
"(SELECT option_id FROM option "
|
| + |
"WHERE option = new.option), "
|
| + |
"new.value);"
|
| + |
"END;"
|
| + |
"CREATE TRIGGER options_delete "
|
| + |
"INSTEAD OF DELETE ON options "
|
| + |
"FOR EACH ROW BEGIN "
|
| + |
"DELETE FROM pkg_option "
|
| + |
"WHERE package_id = old.package_id AND "
|
| + |
"option_id = ( SELECT option_id FROM option "
|
| + |
"WHERE option = old.option );"
|
| + |
"DELETE FROM option "
|
| + |
"WHERE option_id NOT IN "
|
| + |
"( SELECT DISTINCT option_id FROM pkg_option );"
|
| + |
"END;"
|
| + |
},
|
| |
|
| |
/* Mark the end of the array */
|
| |
{ -1, NULL }
|