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();