Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Add backwards compatibility view and triggers to local.sqlite schema.
Matthew Seaman committed 12 years ago
commit bca663a85d33f8f19a349cdf7009940b707c7e01
parent b5a535e
2 files changed +42 -7
modified libpkg/pkgdb.c
@@ -648,6 +648,41 @@ pkgdb_init(sqlite3 *sdb)
		"AND package_id = old.package_id; "
	"END;"

+
	"CREATE VIEW scripts AS SELECT package_id, script, type"
+
                " FROM pkg_script ps JOIN script s"
+
                " ON (ps.script_id = s.script_id);"
+
        "CREATE TRIGGER scripts_update"
+
                " INSTEAD OF UPDATE ON scripts "
+
        "FOR EACH ROW BEGIN"
+
                " INSERT OR IGNORE INTO script(script)"
+
                " VALUES(new.script);"
+
	        " UPDATE pkg_script"
+
                " SET package_id = new.package_id,"
+
                        " type = new.type,"
+
	                " script_id = ( SELECT script_id"
+
	                " FROM script WHERE script = new.script )"
+
                " WHERE package_id = old.package_id"
+
                        " AND type = old.type;"
+
        "END;"
+
        "CREATE TRIGGER scripts_insert"
+
                " INSTEAD OR INSERT ON scripts "
+
        "FOR EACH ROW BEGIN"
+
                " INSERT OR IGNORE INTO script(script)"
+
                " VALUES(new.script);"
+
	        " INSERT INTO pkg_script(package_id, type, script_id) "
+
	        " SELECT new.package_id, new.type, s.script_id"
+
                " FROM script s WHERE new.script = s.script;"
+
	"END;"
+
	"CREATE TRIGGER scripts_delete"
+
	        " INSTEAD OF DELETE ON scripts "
+
        "FOR EACH ROW BEGIN"
+
                " DELETE FROM pkg_script"
+
                " WHERE package_id = old.package_id"
+
                " AND type = old.type;"
+
                " DELETE FROM script"
+
                " WHERE script_id NOT IN"
+
                         " (SELECT DISTINCT script_id FROM pkg_script);"
+
	"END;"

	"PRAGMA user_version = %d;"
	"COMMIT;"
modified libpkg/private/db_upgrades.h
@@ -436,26 +436,26 @@ static struct db_upgrades {
	                " FROM script WHERE script = new.script )"
                " WHERE package_id = old.package_id"
                        " AND type = old.type;"
-
         "END;"
-
         "CREATE TRIGGER scripts_insert"
+
        "END;"
+
        "CREATE TRIGGER scripts_insert"
                " INSTEAD OR INSERT ON scripts "
-
         "FOR EACH ROW BEGIN"
+
        "FOR EACH ROW BEGIN"
                " INSERT OR IGNORE INTO script(script)"
                " VALUES(new.script);"
	        " INSERT INTO pkg_script(package_id, type, script_id) "
	        " SELECT new.package_id, new.type, s.script_id"
                " FROM script s WHERE new.script = s.script;"
-
	 "END;"
-
	 "CREATE TRIGGER scripts_delete"
+
	"END;"
+
	"CREATE TRIGGER scripts_delete"
	        " INSTEAD OF DELETE ON scripts "
-
         "FOR EACH ROW BEGIN"
+
        "FOR EACH ROW BEGIN"
                " DELETE FROM pkg_script"
                " WHERE package_id = old.package_id"
                " AND type = old.type;"
                " DELETE FROM script"
                " WHERE script_id NOT IN"
                         " (SELECT DISTINCT script_id FROM pkg_script);"
-
	 "END;"
+
	"END;"
	},

	/* Mark the end of the array */