Comparison

plugins/mod_storage_sql.lua @ 7758:2b305ec8c146

Merge 0.10->trunk
author Kim Alvefur <zash@zash.se>
date Fri, 02 Dec 2016 11:13:05 +0100
parent 7359:a5a080c12c96
parent 7757:437fb77e5ded
child 7857:db48b1697234
comparison
equal deleted inserted replaced
7747:0e442402cebc 7758:2b305ec8c146
5 local sql = require "util.sql"; 5 local sql = require "util.sql";
6 local xml_parse = require "util.xml".parse; 6 local xml_parse = require "util.xml".parse;
7 local uuid = require "util.uuid"; 7 local uuid = require "util.uuid";
8 local resolve_relative_path = require "util.paths".resolve_relative_path; 8 local resolve_relative_path = require "util.paths".resolve_relative_path;
9 9
10 local stanza_mt = require"util.stanza".stanza_mt; 10 local is_stanza = require"util.stanza".is_stanza;
11 local getmetatable = getmetatable;
12 local t_concat = table.concat; 11 local t_concat = table.concat;
13 local function is_stanza(x) return getmetatable(x) == stanza_mt; end
14 12
15 local noop = function() end 13 local noop = function() end
16 local unpack = unpack 14 local unpack = unpack
17 local function iterator(result) 15 local function iterator(result)
18 return function(result_) 16 return function(result_)
433 end 431 end
434 end 432 end
435 return changes; 433 return changes;
436 end 434 end
437 435
436 local function normalize_database(driver, database)
437 if driver == "SQLite3" and database ~= ":memory:" then
438 return resolve_relative_path(prosody.paths.data or ".", database or "prosody.sqlite");
439 end
440 return database;
441 end
442
438 local function normalize_params(params) 443 local function normalize_params(params)
439 if params.driver == "SQLite3" then 444 return {
440 if params.database ~= ":memory:" then 445 driver = assert(params.driver, "Configuration error: Both the SQL driver and the database need to be specified");
441 params.database = resolve_relative_path(prosody.paths.data or ".", params.database or "prosody.sqlite"); 446 database = assert(normalize_database(params.driver, params.database), "Configuration error: Both the SQL driver and the database need to be specified");
442 end 447 username = params.username;
443 end 448 password = params.password;
444 assert(params.driver and params.database, "Configuration error: Both the SQL driver and the database need to be specified"); 449 host = params.host;
445 return params; 450 port = params.port;
451 };
446 end 452 end
447 453
448 function module.load() 454 function module.load()
449 if prosody.prosodyctl then return; end 455 if prosody.prosodyctl then return; end
450 local engines = module:shared("/*/sql/connections"); 456 local engines = module:shared("/*/sql/connections");
476 local command = table.remove(arg, 1); 482 local command = table.remove(arg, 1);
477 if command == "upgrade" then 483 if command == "upgrade" then
478 -- We need to find every unique dburi in the config 484 -- We need to find every unique dburi in the config
479 local uris = {}; 485 local uris = {};
480 for host in pairs(prosody.hosts) do 486 for host in pairs(prosody.hosts) do
481 local params = config.get(host, "sql") or default_params; 487 local params = normalize_params(config.get(host, "sql") or default_params);
482 uris[sql.db2uri(params)] = params; 488 uris[sql.db2uri(params)] = params;
483 end 489 end
484 print("We will check and upgrade the following databases:\n"); 490 print("We will check and upgrade the following databases:\n");
485 for _, params in pairs(uris) do 491 for _, params in pairs(uris) do
486 print("", "["..params.driver.."] "..params.database..(params.host and " on "..params.host or "")); 492 print("", "["..params.driver.."] "..params.database..(params.host and " on "..params.host or ""));
496 print("Checking "..params.database.."..."); 502 print("Checking "..params.database.."...");
497 engine = sql:create_engine(params); 503 engine = sql:create_engine(params);
498 upgrade_table(params, true); 504 upgrade_table(params, true);
499 end 505 end
500 print("All done!"); 506 print("All done!");
507 elseif command then
508 print("Unknown command: "..command);
501 else 509 else
502 print("Unknown command: "..command); 510 print("Available commands:");
503 end 511 print("","upgrade - Perform database upgrade");
504 end 512 end
513 end