Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Move unicity in the database into the tuple: (origin, name)
Baptiste Daroussin committed 11 years ago
commit a925d2308319227fb7a57d1295d8391d9991c28b
parent 97a8342
2 files changed +52 -3
modified libpkg/pkgdb.c
@@ -458,7 +458,7 @@ pkgdb_init(sqlite3 *sdb)
	"BEGIN;"
	"CREATE TABLE packages ("
		"id INTEGER PRIMARY KEY,"
-
		"origin TEXT UNIQUE NOT NULL,"
+
		"origin TEXT NOT NULL,"
		"name TEXT NOT NULL,"
		"version TEXT NOT NULL,"
		"comment TEXT NOT NULL,"
@@ -478,6 +478,7 @@ pkgdb_init(sqlite3 *sdb)
		"manifestdigest TEXT NULL, "
		"pkg_format_version INTEGER"
	");"
+
	"CREATE UNIQUE INDEX packages_unique ON packages(origin, name);"
	"CREATE TABLE mtree ("
		"id INTEGER PRIMARY KEY,"
		"content TEXT NOT NULL UNIQUE"
@@ -533,9 +534,9 @@ pkgdb_init(sqlite3 *sdb)
		"name TEXT NOT NULL,"
		"version TEXT NOT NULL,"
		"package_id INTEGER REFERENCES packages(id) ON DELETE CASCADE"
-
			" ON UPDATE CASCADE,"
-
		"PRIMARY KEY (package_id,origin)"
+
			" ON UPDATE CASCADE"
	");"
+
	"CREATE UNIQUE INDEX deps_unique ON deps(origin, version, package_id);"
	"CREATE TABLE files ("
		"path TEXT PRIMARY KEY,"
		"sha256 TEXT,"
modified libpkg/private/db_upgrades.h
@@ -575,6 +575,54 @@ static struct db_upgrades {
	"DELETE FROM pkg_lock_pid;"
	"INSERT INTO pkg_lock VALUES(0,0,0);"
	},
+
	/* Move uniqueness outside of tables into indexes to simplify evolution */
+
	{25,
+
	"ALTER TABLE packages RENAME TO oldpkgs;"
+
	"CREATE TABLE packages ("
+
		"id INTEGER PRIMARY KEY,"
+
		"origin TEXT NOT NULL,"
+
		"name TEXT NOT NULL,"
+
		"version TEXT NOT NULL,"
+
		"comment TEXT NOT NULL,"
+
		"desc TEXT NOT NULL,"
+
		"mtree_id INTEGER REFERENCES mtree(id) ON DELETE RESTRICT"
+
			" ON UPDATE CASCADE,"
+
		"message TEXT,"
+
		"arch TEXT NOT NULL,"
+
		"maintainer TEXT NOT NULL, "
+
		"www TEXT,"
+
		"prefix TEXT NOT NULL,"
+
		"flatsize INTEGER NOT NULL,"
+
		"automatic INTEGER NOT NULL,"
+
		"locked INTEGER NOT NULL DEFAULT 0,"
+
		"licenselogic INTEGER NOT NULL,"
+
		"infos TEXT, "
+
		"time INTEGER,"
+
		"pkg_format_version INTEGER"
+
	");"
+
	"CREATE UNIQUE INDEX packages_unique ON packages(origin, name);"
+
	"INSERT INTO packages (id, origin, name, version, comment, desc, "
+
		"mtree_id, message, arch, maintainer, www, prefix, flatsize, "
+
		"automatic, licenselogic, pkg_format_version) "
+
		"SELECT id, origin, name, version, comment, desc, "
+
		"mtree_id, message, arch, maintainer, www, prefix, flatsize, "
+
		"automatic, licenselogic, pkg_format_version "
+
		"FROM oldpkgs;"
+
	"DROP TABLE oldpkgs;"
+
	"ALTER TABLE deps RENAME TO olddeps;"
+
	"CREATE TABLE deps ("
+
		"origin TEXT NOT NULL,"
+
		"name TEXT NOT NULL,"
+
		"version TEXT NOT NULL,"
+
		"package_id INTEGER REFERENCES packages(id) ON DELETE CASCADE"
+
			" ON UPDATE CASCADE"
+
	");"
+
	"CREATE UNIQUE INDEX deps_unique ON deps(origin, version, package_id);"
+
	"INSERT INTO deps (origin, name, version, package_id) "
+
		"SELECT origin, name, version, package_id "
+
		"FROM olddeps;"
+
	"DROP TABLE olddeps;"
+
	},


	/* Mark the end of the array */