mod_storage_sql2: Add prosodyctl command to upgrade tables from the command-line
authorMatthew Wild <mwild1@gmail.com>
Tue, 07 Jul 2015 17:41:09 +0100
changeset 6759 2e75b94e3a1e
parent 6758 b80202ad47e8
child 6760 fc9c1a566a19
mod_storage_sql2: Add prosodyctl command to upgrade tables from the command-line
plugins/mod_storage_sql2.lua
--- a/plugins/mod_storage_sql2.lua	Tue Jul 07 17:40:23 2015 +0100
+++ b/plugins/mod_storage_sql2.lua	Tue Jul 07 17:41:09 2015 +0100
@@ -405,3 +405,36 @@
 
 	module:provides("storage", driver);
 end
+
+function module.command(arg)
+	local config = require "core.configmanager";
+	local prosodyctl = require "util.prosodyctl";
+	local command = table.remove(arg, 1);
+	if command == "upgrade" then
+		-- We need to find every unique dburi in the config
+		local uris = {};
+		for host in pairs(prosody.hosts) do
+			local params = config.get(host, "sql") or default_params;
+			uris[sql.db2uri(params)] = params;
+		end
+		print("We will check and upgrade the following databases:\n");
+		for _, params in pairs(uris) do
+			print("", "["..params.driver.."] "..params.database..(params.host and " on "..params.host or ""));
+		end
+		print("");
+		print("Ensure you have working backups of the above databases before continuing! ");
+		if not prosodyctl.show_yesno("Continue with the database upgrade? [yN]") then
+			print("Ok, no upgrade. But you do have backups, don't you? ...don't you?? :-)");
+			return;
+		end
+		-- Upgrade each one
+		for _, params in pairs(uris) do
+			print("Checking "..params.database.."...");
+			engine = sql:create_engine(params);
+			upgrade_table(params, true);
+		end
+		print("All done!");
+	else
+		print("Unknown command: "..command);
+	end
+end