Comparison

plugins/mod_storage_sql.lua @ 11354:10fba62332c5

mod_storage_sql: Implement map-like API for archives Used by mod_http_file_share, muc moderation, etc. Tests tweaked because they failed on stanza internals that happen becasue of re-serialization. Namespaces differ since inheritance is implicit when building but explicit after parsing.
author Kim Alvefur <zash@zash.se>
date Mon, 01 Feb 2021 12:47:05 +0100
parent 11283:f415176281fa
child 11625:04abe65b8067
comparison
equal deleted inserted replaced
11353:367e6beaf8ab 11354:10fba62332c5
480 return row[1], value, row[4], row[5]; 480 return row[1], value, row[4], row[5];
481 end 481 end
482 end, total; 482 end, total;
483 end 483 end
484 484
485 function archive_store:get(username, key)
486 local iter, err = self:find(username, { key = key })
487 if not iter then return iter, err; end
488 for _, stanza, when, with in iter do
489 return stanza, when, with;
490 end
491 return nil, "item-not-found";
492 end
493
494 function archive_store:set(username, key, new_value, new_when, new_with)
495 local user,store = username,self.store;
496 local ok, result = engine:transaction(function ()
497
498 local update_query = [[
499 UPDATE "prosodyarchive"
500 SET %s
501 WHERE %s
502 ]];
503 local args = { host, user or "", store, key };
504 local setf = {};
505 local where = { "\"host\" = ?", "\"user\" = ?", "\"store\" = ?", "\"key\" = ?"};
506
507 if new_value then
508 table.insert(setf, '"type" = ?')
509 table.insert(setf, '"value" = ?')
510 local t, value = serialize(new_value);
511 table.insert(args, 1, t);
512 table.insert(args, 2, value);
513 end
514
515 if new_when then
516 table.insert(setf, 1, '"when" = ?')
517 table.insert(args, 1, new_when);
518 end
519
520 if new_with then
521 table.insert(setf, 1, '"with" = ?')
522 table.insert(args, 1, new_with);
523 end
524
525 update_query = update_query:format(t_concat(setf, ", "), t_concat(where, " AND "));
526 return engine:update(update_query, unpack(args));
527 end);
528 if not ok then return ok, result; end
529 return result:affected() == 1;
530 end
531
485 function archive_store:summary(username, query) 532 function archive_store:summary(username, query)
486 query = query or {}; 533 query = query or {};
487 local user,store = username,self.store; 534 local user,store = username,self.store;
488 local ok, result = engine:transaction(function() 535 local ok, result = engine:transaction(function()
489 local sql_query = [[ 536 local sql_query = [[