Software /
code /
prosody
Comparison
plugins/mod_storage_sql.lua @ 4285:c806a599224a
mod_storage_sql: Switch to MEDIUMTEXT for the 'value' column when using MySQL, as it imposes a 64K limit otherwise, potentially truncating data. Automatically upgrades existing tables.
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Thu, 02 Jun 2011 02:30:26 +0100 |
parent | 4218:8a271b3fcaa7 |
child | 4297:3421dfaa8188 |
comparison
equal
deleted
inserted
replaced
4284:20979f124ad9 | 4285:c806a599224a |
---|---|
66 | 66 |
67 local function create_table() | 67 local function create_table() |
68 local create_sql = "CREATE TABLE `prosody` (`host` TEXT, `user` TEXT, `store` TEXT, `key` TEXT, `type` TEXT, `value` TEXT);"; | 68 local create_sql = "CREATE TABLE `prosody` (`host` TEXT, `user` TEXT, `store` TEXT, `key` TEXT, `type` TEXT, `value` TEXT);"; |
69 if params.driver == "PostgreSQL" then | 69 if params.driver == "PostgreSQL" then |
70 create_sql = create_sql:gsub("`", "\""); | 70 create_sql = create_sql:gsub("`", "\""); |
71 elseif params.driver == "MySQL" then | |
72 create_sql = create_sql:gsub("`value` TEXT", "`value` MEDIUMTEXT"); | |
71 end | 73 end |
72 | 74 |
73 local stmt = connection:prepare(create_sql); | 75 local stmt = connection:prepare(create_sql); |
74 if stmt then | 76 if stmt then |
75 local ok = stmt:execute(); | 77 local ok = stmt:execute(); |
89 commit_ok, commit_err = connection:commit(); | 91 commit_ok, commit_err = connection:commit(); |
90 end | 92 end |
91 if not(ok and commit_ok) then | 93 if not(ok and commit_ok) then |
92 module:log("warn", "Failed to create index (%s), lookups may not be optimised", err or commit_err); | 94 module:log("warn", "Failed to create index (%s), lookups may not be optimised", err or commit_err); |
93 end | 95 end |
96 else -- COMPAT: Upgrade tables from 0.8.0 | |
97 -- Failed to create, but check existing MySQL table here | |
98 local stmt = connection:prepare("SHOW COLUMNS FROM prosody WHERE Field='value' and Type='text'"); | |
99 local ok = stmt:execute(); | |
100 local commit_ok = connection:commit(); | |
101 if ok and commit_ok then | |
102 if stmt:rowcount() > 0 then | |
103 local stmt = connection:prepare("ALTER TABLE prosody MODIFY COLUMN `value` MEDIUMTEXT"); | |
104 local ok = stmt:execute(); | |
105 local commit_ok = connection:commit(); | |
106 if ok and commit_ok then | |
107 module:log("info", "Database table automatically upgraded"); | |
108 end | |
109 end | |
110 repeat until not stmt:fetch(); | |
111 end | |
94 end | 112 end |
95 end | 113 end |
96 end | 114 end |
97 | 115 |
98 do -- process options to get a db connection | 116 do -- process options to get a db connection |