| |
"script_id INTEGER PRIMARY KEY,"
|
| |
"script TEXT NOT NULL UNIQUE"
|
| |
");"
|
| - |
"CREATE TABLE options ("
|
| - |
"package_id INTEGER REFERENCES packages(id) ON DELETE CASCADE"
|
| - |
" ON UPDATE CASCADE,"
|
| - |
"option TEXT,"
|
| - |
"value TEXT,"
|
| - |
"PRIMARY KEY (package_id,option)"
|
| + |
"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)"
|
| |
");"
|
| |
"CREATE TABLE deps ("
|
| |
"origin TEXT NOT NULL,"
|
| |
" (SELECT DISTINCT script_id FROM pkg_script);"
|
| |
"END;"
|
| |
|
| + |
"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;"
|
| + |
|
| |
"PRAGMA user_version = %d;"
|
| |
"COMMIT;"
|
| |
;
|