Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
bye bye slow trigger /!\ database rebuild needed /!\
Baptiste Daroussin committed 14 years ago
commit 58f7abf4ca7a41f2c7ab461e248d4225d40c7370
parent 12b03b7
1 file changed +9 -3
modified libpkg/pkgdb.c
@@ -218,9 +218,6 @@ pkgdb_init(sqlite3 *sdb)
	"CREATE VIEW pkg_dirs AS SELECT origin, path FROM packages "
	"INNER JOIN pkg_dirs_assoc ON packages.id = pkg_dirs_assoc.package_id "
	"INNER JOIN directories ON pkg_dirs_assoc.directory_id = directories.id;"
-
	"CREATE TRIGGER pkg_dirs_clean AFTER DELETE ON packages BEGIN "
-
		"DELETE from directories WHERE id NOT IN (SELECT DISTINCT directory_id FROM pkg_dirs_assoc);"
-
	"END;"
	"CREATE TRIGGER dir_insert INSTEAD OF INSERT ON pkg_dirs "
	"FOR EACH ROW BEGIN "
		"INSERT OR IGNORE INTO directories (path) VALUES (NEW.path);"
@@ -1150,6 +1147,7 @@ pkgdb_unregister_pkg(struct pkgdb *db, const char *origin)
{
	sqlite3_stmt *stmt_del;
	int ret;
+
	char *errmsg;
	const char sql[] = "DELETE FROM packages WHERE origin = ?1;";

	if (db == NULL)
@@ -1169,6 +1167,14 @@ pkgdb_unregister_pkg(struct pkgdb *db, const char *origin)
	if (ret != SQLITE_DONE)
		return (ERROR_SQLITE(db->sqlite));

+
	/* cleanup directories */
+
	ret = sqlite3_exec(db->sqlite, "DELETE from directories WHERE id NOT IN (SELECT DISTINCT directory_id FROM pkg_dirs_assoc);", NULL, NULL, &errmsg);
+
	if (ret != SQLITE_OK) {
+
		ret = pkg_error_set(EPKG_FATAL, "%s", errmsg);
+
		sqlite3_free(errmsg);
+
		return (ret);
+
	}
+

	return (EPKG_OK);
}