From a03638bd16746c0a2d9a3fcb682d5026104edaf2 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Wed, 12 Apr 2017 21:51:17 +0200 Subject: mod_storage_sql: Quote some field names --- plugins/mod_storage_sql.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'plugins/mod_storage_sql.lua') diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index b49551d6..d9e45781 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -462,12 +462,12 @@ local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore local changes = false; if params.driver == "MySQL" then local success,err = engine:transaction(function() - local result = engine:execute("SHOW COLUMNS FROM prosody WHERE Field='value' and Type='text'"); + local result = engine:execute("SHOW COLUMNS FROM \"prosody\" WHERE \"Field\"='value' and \"Type\"='text'"); if result:rowcount() > 0 then changes = true; if apply_changes then module:log("info", "Upgrading database schema..."); - engine:execute("ALTER TABLE prosody MODIFY COLUMN \"value\" MEDIUMTEXT"); + engine:execute("ALTER TABLE \"prosody\" MODIFY COLUMN \"value\" MEDIUMTEXT"); module:log("info", "Database table automatically upgraded"); end end -- cgit v1.2.3 From d938b42d8f9f4d2108383167c3b8139ad5157816 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Wed, 12 Apr 2017 21:53:21 +0200 Subject: mod_storage_sql: Pass charset and collation names via variable binding --- plugins/mod_storage_sql.lua | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'plugins/mod_storage_sql.lua') diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index d9e45781..9f33d987 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -484,12 +484,11 @@ local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore local check_encoding_query = [[ SELECT "COLUMN_NAME","COLUMN_TYPE","TABLE_NAME" FROM "information_schema"."columns" - WHERE "TABLE_NAME" LIKE 'prosody%%' AND ( "CHARACTER_SET_NAME"!='%s' OR "COLLATION_NAME"!='%s_bin' ); + WHERE "TABLE_NAME" LIKE 'prosody%%' AND ( "CHARACTER_SET_NAME"!=? OR "COLLATION_NAME"!=?); ]]; - check_encoding_query = check_encoding_query:format(engine.charset, engine.charset); -- FIXME Is it ok to ignore the return values from this? engine:transaction(function() - local result = assert(engine:execute(check_encoding_query)); + local result = assert(engine:execute(check_encoding_query, engine.charset, engine.charset.."_bin")); local n_bad_columns = result:rowcount(); if n_bad_columns > 0 then changes = true; @@ -507,7 +506,7 @@ local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore end end end); - success,err = engine:transaction(function() return engine:execute(check_encoding_query); end); + success,err = engine:transaction(function() return engine:execute(check_encoding_query, engine.charset, engine.charset.."_bin"); end); if not success then module:log("error", "Failed to check/upgrade database encoding: %s", err or "unknown error"); return false; -- cgit v1.2.3 From 8aaba129330f4d197c648464cc9312c95b727553 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Wed, 12 Apr 2017 23:16:23 +0200 Subject: mod_storage_sql: Break long lines --- plugins/mod_storage_sql.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'plugins/mod_storage_sql.lua') diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index 9f33d987..9f2933a0 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -484,7 +484,8 @@ local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore local check_encoding_query = [[ SELECT "COLUMN_NAME","COLUMN_TYPE","TABLE_NAME" FROM "information_schema"."columns" - WHERE "TABLE_NAME" LIKE 'prosody%%' AND ( "CHARACTER_SET_NAME"!=? OR "COLLATION_NAME"!=?); + WHERE "TABLE_NAME" LIKE 'prosody%%' + AND ( "CHARACTER_SET_NAME"!=? OR "COLLATION_NAME"!=?); ]]; -- FIXME Is it ok to ignore the return values from this? engine:transaction(function() @@ -506,7 +507,9 @@ local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore end end end); - success,err = engine:transaction(function() return engine:execute(check_encoding_query, engine.charset, engine.charset.."_bin"); end); + success,err = engine:transaction(function() + return engine:execute(check_encoding_query, engine.charset, engine.charset.."_bin"); + end); if not success then module:log("error", "Failed to check/upgrade database encoding: %s", err or "unknown error"); return false; -- cgit v1.2.3 From caf3175a5f2b457c97bfe6ba217a2fcc0661baf2 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Thu, 13 Apr 2017 01:29:35 +0200 Subject: mod_storage_sql: Limit encoding check to current database --- plugins/mod_storage_sql.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'plugins/mod_storage_sql.lua') diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua index 9f2933a0..aab43d1f 100644 --- a/plugins/mod_storage_sql.lua +++ b/plugins/mod_storage_sql.lua @@ -485,11 +485,12 @@ local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore SELECT "COLUMN_NAME","COLUMN_TYPE","TABLE_NAME" FROM "information_schema"."columns" WHERE "TABLE_NAME" LIKE 'prosody%%' + AND "TABLE_SCHEMA" = ? AND ( "CHARACTER_SET_NAME"!=? OR "COLLATION_NAME"!=?); ]]; -- FIXME Is it ok to ignore the return values from this? engine:transaction(function() - local result = assert(engine:execute(check_encoding_query, engine.charset, engine.charset.."_bin")); + local result = assert(engine:execute(check_encoding_query, params.database, engine.charset, engine.charset.."_bin")); local n_bad_columns = result:rowcount(); if n_bad_columns > 0 then changes = true; @@ -508,7 +509,8 @@ local function upgrade_table(engine, params, apply_changes) -- luacheck: ignore end end); success,err = engine:transaction(function() - return engine:execute(check_encoding_query, engine.charset, engine.charset.."_bin"); + return engine:execute(check_encoding_query, params.database, + engine.charset, engine.charset.."_bin"); end); if not success then module:log("error", "Failed to check/upgrade database encoding: %s", err or "unknown error"); -- cgit v1.2.3