Software /
code /
prosody
Comparison
plugins/mod_storage_sql.lua @ 4319:b46b766ce0af
Merge 0.8->trunk
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 11 Jun 2011 02:17:11 +0100 |
parent | 4318:44b131d7041b |
child | 5034:2dbb3bf74090 |
comparison
equal
deleted
inserted
replaced
4316:2478698bdc52 | 4319:b46b766ce0af |
---|---|
63 return connection; | 63 return connection; |
64 end | 64 end |
65 end | 65 end |
66 | 66 |
67 local function create_table() | 67 local function create_table() |
68 if not module:get_option("sql_manage_tables", true) then | |
69 return; | |
70 end | |
68 local create_sql = "CREATE TABLE `prosody` (`host` TEXT, `user` TEXT, `store` TEXT, `key` TEXT, `type` TEXT, `value` TEXT);"; | 71 local create_sql = "CREATE TABLE `prosody` (`host` TEXT, `user` TEXT, `store` TEXT, `key` TEXT, `type` TEXT, `value` TEXT);"; |
69 if params.driver == "PostgreSQL" then | 72 if params.driver == "PostgreSQL" then |
70 create_sql = create_sql:gsub("`", "\""); | 73 create_sql = create_sql:gsub("`", "\""); |
71 elseif params.driver == "MySQL" then | 74 elseif params.driver == "MySQL" then |
72 create_sql = create_sql:gsub("`value` TEXT", "`value` MEDIUMTEXT"); | 75 create_sql = create_sql:gsub("`value` TEXT", "`value` MEDIUMTEXT"); |
73 end | 76 end |
74 | 77 |
75 local stmt = connection:prepare(create_sql); | 78 local stmt, err = connection:prepare(create_sql); |
76 if stmt then | 79 if stmt then |
77 local ok = stmt:execute(); | 80 local ok = stmt:execute(); |
78 local commit_ok = connection:commit(); | 81 local commit_ok = connection:commit(); |
79 if ok and commit_ok then | 82 if ok and commit_ok then |
80 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); |
98 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'"); |
99 local ok = stmt:execute(); | 102 local ok = stmt:execute(); |
100 local commit_ok = connection:commit(); | 103 local commit_ok = connection:commit(); |
101 if ok and commit_ok then | 104 if ok and commit_ok then |
102 if stmt:rowcount() > 0 then | 105 if stmt:rowcount() > 0 then |
106 module:log("info", "Upgrading database schema..."); | |
103 local stmt = connection:prepare("ALTER TABLE prosody MODIFY COLUMN `value` MEDIUMTEXT"); | 107 local stmt = connection:prepare("ALTER TABLE prosody MODIFY COLUMN `value` MEDIUMTEXT"); |
104 local ok = stmt:execute(); | 108 local ok, err = stmt:execute(); |
105 local commit_ok = connection:commit(); | 109 local commit_ok = connection:commit(); |
106 if ok and commit_ok then | 110 if ok and commit_ok then |
107 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"); | |
108 end | 116 end |
109 end | 117 end |
110 repeat until not stmt:fetch(); | 118 repeat until not stmt:fetch(); |
111 else | 119 end |
112 module:log("error", "Failed to upgrade database schema, please see http://prosody.im/doc/mysql for help"); | 120 end |
113 end | 121 elseif params.driver ~= "SQLite3" then -- SQLite normally fails to prepare for existing table |
114 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"); | |
115 end | 125 end |
116 end | 126 end |
117 | 127 |
118 do -- process options to get a db connection | 128 do -- process options to get a db connection |
119 local ok; | 129 local ok; |