Comparison

plugins/mod_storage_sql.lua @ 8034:149553feb04e

mod_storage_sql: Pass SQL engine as an argument to upgrade and table creator functions
author Kim Alvefur <zash@zash.se>
date Sat, 01 Apr 2017 19:39:20 +0200
parent 8033:6c3cae9b96cb
child 8035:58d6c2ab3d16
comparison
equal deleted inserted replaced
8033:6c3cae9b96cb 8034:149553feb04e
421 end 421 end
422 422
423 --- Initialization 423 --- Initialization
424 424
425 425
426 local function create_table(name) 426 local function create_table(engine, name) -- luacheck: ignore 431/engine
427 local Table, Column, Index = sql.Table, sql.Column, sql.Index; 427 local Table, Column, Index = sql.Table, sql.Column, sql.Index;
428 428
429 local ProsodyTable = Table { 429 local ProsodyTable = Table {
430 name= name or "prosody"; 430 name= name or "prosody";
431 Column { name="host", type="TEXT", nullable=false }; 431 Column { name="host", type="TEXT", nullable=false };
456 engine:transaction(function() 456 engine:transaction(function()
457 ProsodyArchiveTable:create(engine); 457 ProsodyArchiveTable:create(engine);
458 end); 458 end);
459 end 459 end
460 460
461 local function upgrade_table(params, apply_changes) 461 local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore 431/engine
462 local changes = false; 462 local changes = false;
463 if params.driver == "MySQL" then 463 if params.driver == "MySQL" then
464 local success,err = engine:transaction(function() 464 local success,err = engine:transaction(function()
465 local result = engine:execute("SHOW COLUMNS FROM prosody WHERE Field='value' and Type='text'"); 465 local result = engine:execute("SHOW COLUMNS FROM prosody WHERE Field='value' and Type='text'");
466 if result:rowcount() > 0 then 466 if result:rowcount() > 0 then
538 local engines = module:shared("/*/sql/connections"); 538 local engines = module:shared("/*/sql/connections");
539 local params = normalize_params(module:get_option("sql", default_params)); 539 local params = normalize_params(module:get_option("sql", default_params));
540 engine = engines[sql.db2uri(params)]; 540 engine = engines[sql.db2uri(params)];
541 if not engine then 541 if not engine then
542 module:log("debug", "Creating new engine"); 542 module:log("debug", "Creating new engine");
543 engine = sql:create_engine(params, function (engine) 543 engine = sql:create_engine(params, function (engine) -- luacheck: ignore 431/engine
544 if module:get_option("sql_manage_tables", true) then 544 if module:get_option("sql_manage_tables", true) then
545 -- Automatically create table, ignore failure (table probably already exists) 545 -- Automatically create table, ignore failure (table probably already exists)
546 -- FIXME: we should check in information_schema, etc. 546 -- FIXME: we should check in information_schema, etc.
547 create_table(); 547 create_table(engine);
548 -- Check whether the table needs upgrading 548 -- Check whether the table needs upgrading
549 if upgrade_table(params, false) then 549 if upgrade_table(engine, params, false) then
550 module:log("error", "Old database format detected. Please run: prosodyctl mod_%s upgrade", module.name); 550 module:log("error", "Old database format detected. Please run: prosodyctl mod_%s upgrade", module.name);
551 return false, "database upgrade needed"; 551 return false, "database upgrade needed";
552 end 552 end
553 end 553 end
554 end); 554 end);
581 end 581 end
582 -- Upgrade each one 582 -- Upgrade each one
583 for _, params in pairs(uris) do 583 for _, params in pairs(uris) do
584 print("Checking "..params.database.."..."); 584 print("Checking "..params.database.."...");
585 engine = sql:create_engine(params); 585 engine = sql:create_engine(params);
586 upgrade_table(params, true); 586 upgrade_table(engine, params, true);
587 end 587 end
588 print("All done!"); 588 print("All done!");
589 elseif command then 589 elseif command then
590 print("Unknown command: "..command); 590 print("Unknown command: "..command);
591 else 591 else