Mercurial > prosody-hg
comparison plugins/mod_storage_sql.lua @ 7179:bfa3b2ee384c
Merge 0.10->trunk
| author | Kim Alvefur <zash@zash.se> |
|---|---|
| date | Mon, 22 Feb 2016 15:24:20 +0100 |
| parents | 5953f415c815 |
| children | 7e659f87973d |
comparison
equal
deleted
inserted
replaced
| 7171:91d36a37a9ff | 7179:bfa3b2ee384c |
|---|---|
| 233 end | 233 end |
| 234 local function archive_where_id_range(query, args, where) | 234 local function archive_where_id_range(query, args, where) |
| 235 local args_len = #args | 235 local args_len = #args |
| 236 -- Before or after specific item, exclusive | 236 -- Before or after specific item, exclusive |
| 237 if query.after then -- keys better be unique! | 237 if query.after then -- keys better be unique! |
| 238 where[#where+1] = "`sort_id` > (SELECT `sort_id` FROM `prosodyarchive` WHERE `key` = ? AND `host` = ? AND `user` = ? AND `store` = ? LIMIT 1)" | 238 where[#where+1] = "`sort_id` > COALESCE((SELECT `sort_id` FROM `prosodyarchive` WHERE `key` = ? AND `host` = ? AND `user` = ? AND `store` = ? LIMIT 1), 0)" |
| 239 args[args_len+1], args[args_len+2], args[args_len+3], args[args_len+4] = query.after, args[1], args[2], args[3]; | 239 args[args_len+1], args[args_len+2], args[args_len+3], args[args_len+4] = query.after, args[1], args[2], args[3]; |
| 240 args_len = args_len + 4 | 240 args_len = args_len + 4 |
| 241 end | 241 end |
| 242 if query.before then | 242 if query.before then |
| 243 where[#where+1] = "`sort_id` < (SELECT `sort_id` FROM `prosodyarchive` WHERE `key` = ? AND `host` = ? AND `user` = ? AND `store` = ? LIMIT 1)" | 243 where[#where+1] = "`sort_id` < COALESCE((SELECT `sort_id` FROM `prosodyarchive` WHERE `key` = ? AND `host` = ? AND `user` = ? AND `store` = ? LIMIT 1), (SELECT MAX(`sort_id`)+1 FROM `prosodyarchive`))" |
| 244 args[args_len+1], args[args_len+2], args[args_len+3], args[args_len+4] = query.before, args[1], args[2], args[3]; | 244 args[args_len+1], args[args_len+2], args[args_len+3], args[args_len+4] = query.before, args[1], args[2], args[3]; |
| 245 end | 245 end |
| 246 end | 246 end |
| 247 | 247 |
| 248 function archive_store:find(username, query) | 248 function archive_store:find(username, query) |
| 273 if query.limit then | 273 if query.limit then |
| 274 args[#args+1] = query.limit; | 274 args[#args+1] = query.limit; |
| 275 end | 275 end |
| 276 | 276 |
| 277 sql_query = sql_query:format(t_concat(where, " AND "), query.reverse and "DESC" or "ASC", query.limit and " LIMIT ?" or ""); | 277 sql_query = sql_query:format(t_concat(where, " AND "), query.reverse and "DESC" or "ASC", query.limit and " LIMIT ?" or ""); |
| 278 module:log("debug", sql_query); | |
| 279 return engine:select(sql_query, unpack(args)); | 278 return engine:select(sql_query, unpack(args)); |
| 280 end); | 279 end); |
| 281 if not ok then return ok, result end | 280 if not ok then return ok, result end |
| 282 return function() | 281 return function() |
| 283 local row = result(); | 282 local row = result(); |
| 299 table.remove(where, 2); | 298 table.remove(where, 2); |
| 300 end | 299 end |
| 301 archive_where(query, args, where); | 300 archive_where(query, args, where); |
| 302 archive_where_id_range(query, args, where); | 301 archive_where_id_range(query, args, where); |
| 303 sql_query = sql_query:format(t_concat(where, " AND ")); | 302 sql_query = sql_query:format(t_concat(where, " AND ")); |
| 304 module:log("debug", sql_query); | |
| 305 return engine:delete(sql_query, unpack(args)); | 303 return engine:delete(sql_query, unpack(args)); |
| 306 end); | 304 end); |
| 307 end | 305 end |
| 308 | 306 |
| 309 local stores = { | 307 local stores = { |
| 451 if prosody.prosodyctl then return; end | 449 if prosody.prosodyctl then return; end |
| 452 local engines = module:shared("/*/sql/connections"); | 450 local engines = module:shared("/*/sql/connections"); |
| 453 local params = normalize_params(module:get_option("sql", default_params)); | 451 local params = normalize_params(module:get_option("sql", default_params)); |
| 454 engine = engines[sql.db2uri(params)]; | 452 engine = engines[sql.db2uri(params)]; |
| 455 if not engine then | 453 if not engine then |
| 456 module:log("info", "Creating new engine"); | 454 module:log("debug", "Creating new engine"); |
| 457 engine = sql:create_engine(params, function (engine) | 455 engine = sql:create_engine(params, function (engine) |
| 458 if module:get_option("sql_manage_tables", true) then | 456 if module:get_option("sql_manage_tables", true) then |
| 459 -- Automatically create table, ignore failure (table probably already exists) | 457 -- Automatically create table, ignore failure (table probably already exists) |
| 460 -- FIXME: we should check in information_schema, etc. | 458 -- FIXME: we should check in information_schema, etc. |
| 461 create_table(); | 459 create_table(); |
