Radish alpha
H
HardenedBSD Package Manager
Radicle
Git (anonymous pull)
Log in to clone via SSH
Update repo DB structure to include (optional) option defaults and option descriptions.
Matthew Seaman committed 12 years ago
commit 0fdf512df978c3ff3ae35580d171c2c7b8081939
parent 513d2da18031f288f243747a0520f5a96d44ecd3
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'",