Radish alpha
H
rad:z3QDZAW2FAfuLvihrhiyDC9fAD8G9
HardenedBSD Package Manager
Radicle
Git
Update repo DB structure to include (optional) option defaults and option descriptions.
Matthew Seaman committed 12 years ago
commit 0fdf512df978c3ff3ae35580d171c2c7b8081939
parent 513d2da
1 file changed +96 -6
modified libpkg/private/repodb.h
@@ -162,13 +162,39 @@ static const char initsql[] = ""
	    "  ON DELETE RESTRICT ON UPDATE RESTRICT,"
	    "UNIQUE(package_id, license_id)"
	");"
-
	"CREATE TABLE options ("
-
	    "package_id INTEGER REFERENCES packages(id)"
-
	    "  ON DELETE CASCADE ON UPDATE CASCADE,"
-
	    "option TEXT,"
-
	    "value TEXT,"
-
	    "UNIQUE (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 %Q.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_value TEXT NOT NULL,"
+
		"PRIMARY KEY(package_id, option_id)"
	"CREATE TABLE shlibs ("
	    "id INTEGER PRIMARY KEY,"
	    "name TEXT NOT NULL UNIQUE "
@@ -279,6 +305,51 @@ static const struct repo_changes repo_upgrades[] = {
	 "DROP TABLE pkg_abstract;"
	 "DROP TABLE abstract;"
	},
+
	{2005,
+
	 2006,
+
	 "Add capability to track option descriptions and defaults",
+
	 "CREATE TABLE %Q.option ("
+
		"option_id INTEGER PRIMARY KEY,"
+
		"option TEXT NOT NULL UNIQUE"
+
	 ");"
+
	 "CREATE TABLE %Q.option_desc ("
+
		"option_desc_id INTEGER PRIMARY KEY,"
+
		"option_desc TEXT NOT NULL UNIQUE"
+
	 ");"
+
	 "CREATE TABLE %Q.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 %Q.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 %Q.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_value TEXT NOT NULL,"
+
		"PRIMARY KEY(package_id, option_id)"
+
	 "INSERT INTO %Q.option (option) "
+
		"SELECT DISTINCT option FROM %Q.options;"
+
	 "INSERT INTO %Q.pkg_option(package_id, option_id, value) "
+
		"SELECT package_id, option_id, value "
+
		"FROM %Q.options oo JOIN %Q.option o "
+
			"ON (oo.option = o.option);"
+
	 "DROP TABLE %Q.options;",
+
	},
+

	/* Mark the end of the array */
	{ -1, -1, NULL, NULL, }

@@ -287,6 +358,25 @@ static const struct repo_changes repo_upgrades[] = {
/* How to downgrade a newer repo to match what the current system
   expects */
static const struct repo_changes repo_downgrades[] = {
+
	{2006,
+
	 2005,
+
	 "Revert addition of extra options related data",
+
	 "CREATE TABLE %Q.options ("
+
		"package_id INTEGER REFERENCES packages(id) "
+
			"ON DELETE CASCADE ON UPDATE CASCADE,"
+
		"option TEXT,"
+
		"value TEXT,"
+
		"PRIMARY KEY(package_id,option)"
+
	 ");"
+
	 "INSERT INTO %Q.options (package_id, option, value) "
+
		 "SELECT package_id, option, value "
+
		"FROM %Q.pkg_option JOIN %Q.option USING(option_id);"
+
	 "DROP TABLE pkg_option;"
+
	 "DROP TABLE pkg_option_default;"
+
	 "DROP TABLE option;"
+
	 "DROP TABLE pkg_option_desc;"
+
	 "DROP TABLE option_desc;",
+
	},
	{2005,
	 2004,
	 "Revert rename of 'abstract metadata' to 'annotations'",