aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2011-06-02 02:31:18 +0100
committerMatthew Wild <mwild1@gmail.com>2011-06-02 02:31:18 +0100
commitb863e05f3535fdd9b73491412c3fcb50830c46c5 (patch)
tree5c18192e6e617619650e72e269b8fd1077770a69
parenta4b6de0e0b40d521317119e3d16ff679d5945ea0 (diff)
parent7037ff8b95c6d1860b1ca9e42a9916ac237419cc (diff)
downloadprosody-b863e05f3535fdd9b73491412c3fcb50830c46c5.tar.gz
prosody-b863e05f3535fdd9b73491412c3fcb50830c46c5.zip
Merge 0.8->trunk
-rw-r--r--plugins/mod_storage_sql.lua18
-rw-r--r--util/json.lua2
2 files changed, 20 insertions, 0 deletions
diff --git a/plugins/mod_storage_sql.lua b/plugins/mod_storage_sql.lua
index b88efb64..dd148704 100644
--- a/plugins/mod_storage_sql.lua
+++ b/plugins/mod_storage_sql.lua
@@ -68,6 +68,8 @@ local function create_table()
local create_sql = "CREATE TABLE `prosody` (`host` TEXT, `user` TEXT, `store` TEXT, `key` TEXT, `type` TEXT, `value` TEXT);";
if params.driver == "PostgreSQL" then
create_sql = create_sql:gsub("`", "\"");
+ elseif params.driver == "MySQL" then
+ create_sql = create_sql:gsub("`value` TEXT", "`value` MEDIUMTEXT");
end
local stmt = connection:prepare(create_sql);
@@ -91,6 +93,22 @@ local function create_table()
if not(ok and commit_ok) then
module:log("warn", "Failed to create index (%s), lookups may not be optimised", err or commit_err);
end
+ else -- COMPAT: Upgrade tables from 0.8.0
+ -- Failed to create, but check existing MySQL table here
+ local stmt = connection:prepare("SHOW COLUMNS FROM prosody WHERE Field='value' and Type='text'");
+ local ok = stmt:execute();
+ local commit_ok = connection:commit();
+ if ok and commit_ok then
+ if stmt:rowcount() > 0 then
+ local stmt = connection:prepare("ALTER TABLE prosody MODIFY COLUMN `value` MEDIUMTEXT");
+ local ok = stmt:execute();
+ local commit_ok = connection:commit();
+ if ok and commit_ok then
+ module:log("info", "Database table automatically upgraded");
+ end
+ end
+ repeat until not stmt:fetch();
+ end
end
end
end
diff --git a/util/json.lua b/util/json.lua
index 05453703..cfa84a4b 100644
--- a/util/json.lua
+++ b/util/json.lua
@@ -134,12 +134,14 @@ end
function json.decode(json)
+ json = json.." "; -- appending a space ensures valid json wouldn't touch EOF
local pos = 1;
local current = {};
local stack = {};
local ch, peek;
local function next()
ch = json:sub(pos, pos);
+ if ch == "" then error("Unexpected EOF"); end
pos = pos+1;
peek = json:sub(pos, pos);
return ch;