Comparison

plugins/mod_storage_sql.lua @ 4318:44b131d7041b 0.8.2

mod_storage_sql: Add extra logging and error handling around table creation
author Matthew Wild <mwild1@gmail.com>
date Sat, 11 Jun 2011 02:16:26 +0100
parent 4317:5b0fcc5cdd4d
child 5034:2dbb3bf74090
comparison
equal deleted inserted replaced
4317:5b0fcc5cdd4d 4318:44b131d7041b
73 create_sql = create_sql:gsub("`", "\""); 73 create_sql = create_sql:gsub("`", "\"");
74 elseif params.driver == "MySQL" then 74 elseif params.driver == "MySQL" then
75 create_sql = create_sql:gsub("`value` TEXT", "`value` MEDIUMTEXT"); 75 create_sql = create_sql:gsub("`value` TEXT", "`value` MEDIUMTEXT");
76 end 76 end
77 77
78 local stmt = connection:prepare(create_sql); 78 local stmt, err = connection:prepare(create_sql);
79 if stmt then 79 if stmt then
80 local ok = stmt:execute(); 80 local ok = stmt:execute();
81 local commit_ok = connection:commit(); 81 local commit_ok = connection:commit();
82 if ok and commit_ok then 82 if ok and commit_ok then
83 module:log("info", "Initialized new %s database with prosody table", params.driver); 83 module:log("info", "Initialized new %s database with prosody table", params.driver);
101 local stmt = connection:prepare("SHOW COLUMNS FROM prosody WHERE Field='value' and Type='text'"); 101 local stmt = connection:prepare("SHOW COLUMNS FROM prosody WHERE Field='value' and Type='text'");
102 local ok = stmt:execute(); 102 local ok = stmt:execute();
103 local commit_ok = connection:commit(); 103 local commit_ok = connection:commit();
104 if ok and commit_ok then 104 if ok and commit_ok then
105 if stmt:rowcount() > 0 then 105 if stmt:rowcount() > 0 then
106 module:log("info", "Upgrading database schema...");
106 local stmt = connection:prepare("ALTER TABLE prosody MODIFY COLUMN `value` MEDIUMTEXT"); 107 local stmt = connection:prepare("ALTER TABLE prosody MODIFY COLUMN `value` MEDIUMTEXT");
107 local ok = stmt:execute(); 108 local ok, err = stmt:execute();
108 local commit_ok = connection:commit(); 109 local commit_ok = connection:commit();
109 if ok and commit_ok then 110 if ok and commit_ok then
110 module:log("info", "Database table automatically upgraded"); 111 module:log("info", "Database table automatically upgraded");
112 else
113 module:log("error", "Failed to upgrade database schema (%s), please see "
114 .."http://prosody.im/doc/mysql for help",
115 err or "unknown error");
111 end 116 end
112 end 117 end
113 repeat until not stmt:fetch(); 118 repeat until not stmt:fetch();
114 else 119 end
115 module:log("error", "Failed to upgrade database schema, please see http://prosody.im/doc/mysql for help"); 120 end
116 end 121 elseif params.driver ~= "SQLite3" then -- SQLite normally fails to prepare for existing table
117 end 122 module:log("warn", "Prosody was not able to automatically check/create the database table (%s), "
123 .."see http://prosody.im/doc/modules/mod_storage_sql#table_management for help.",
124 err or "unknown error");
118 end 125 end
119 end 126 end
120 127
121 do -- process options to get a db connection 128 do -- process options to get a db connection
122 local ok; 129 local ok;