mod_storage_sql: Add extra logging and error handling around table creation
authorMatthew Wild <mwild1@gmail.com>
Sat, 11 Jun 2011 01:16:26 +0000 (02:16 +0100)
committerMatthew Wild <mwild1@gmail.com>
Sat, 11 Jun 2011 01:16:26 +0000 (02:16 +0100)
plugins/mod_storage_sql.lua

index 59583def2bf4ef82e77e72f28809af32fe4d656f..6a2d36f102b4550b599aa878b306bd9cf6a10044 100644 (file)
@@ -75,7 +75,7 @@ local function create_table()
                create_sql = create_sql:gsub("`value` TEXT", "`value` MEDIUMTEXT");
        end
        
-       local stmt = connection:prepare(create_sql);
+       local stmt, err = connection:prepare(create_sql);
        if stmt then
                local ok = stmt:execute();
                local commit_ok = connection:commit();
@@ -103,18 +103,25 @@ local function create_table()
                        local commit_ok = connection:commit();
                        if ok and commit_ok then
                                if stmt:rowcount() > 0 then
+                                       module:log("info", "Upgrading database schema...");
                                        local stmt = connection:prepare("ALTER TABLE prosody MODIFY COLUMN `value` MEDIUMTEXT");
-                                       local ok = stmt:execute();
+                                       local ok, err = stmt:execute();
                                        local commit_ok = connection:commit();
                                        if ok and commit_ok then
                                                module:log("info", "Database table automatically upgraded");
+                                       else
+                                               module:log("error", "Failed to upgrade database schema (%s), please see "
+                                                       .."http://prosody.im/doc/mysql for help",
+                                                       err or "unknown error");
                                        end
                                end
                                repeat until not stmt:fetch();
-                       else
-                               module:log("error", "Failed to upgrade database schema, please see http://prosody.im/doc/mysql for help");
                        end
                end
+       elseif params.driver ~= "SQLite3" then -- SQLite normally fails to prepare for existing table
+               module:log("warn", "Prosody was not able to automatically check/create the database table (%s), "
+                       .."see http://prosody.im/doc/modules/mod_storage_sql#table_management for help.",
+                       err or "unknown error");
        end
 end