Merge 0.9->0.10
[prosody.git] / plugins / mod_storage_sql2.lua
index e02ad68148e22a1ea626b664337312e7f29480f2..7a2ec4a76e9fa307eec850adab21ee921f35220b 100644 (file)
@@ -222,9 +222,12 @@ function archive_store:append(username, key, when, with, value)
        end
        local user,store = username,self.store;
        return engine:transaction(function()
-               local key = key or uuid.generate();
+               if key then
+                       engine:delete("DELETE FROM `prosodyarchive` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, user or "", store, key);
+               else
+                       key = uuid.generate();
+               end
                local t, value = serialize(value);
-               engine:delete("DELETE FROM `prosodyarchive` WHERE `host`=? AND `user`=? AND `store`=? AND `key`=?", host, user or "", store, key);
                engine:insert("INSERT INTO `prosodyarchive` (`host`, `user`, `store`, `when`, `with`, `key`, `type`, `value`) VALUES (?,?,?,?,?,?,?,?)", host, user or "", store, when, with, key, t, value);
                return key;
        end);
@@ -322,6 +325,10 @@ function archive_store:delete(username, query)
                local sql_query = "DELETE FROM `prosodyarchive` WHERE %s;";
                local args = { host, user or "", store, };
                local where = { "`host` = ?", "`user` = ?", "`store` = ?", };
+               if user == true then
+                       table.remove(args, 2);
+                       table.remove(where, 2);
+               end
                archive_where(query, args, where);
                archive_where_id_range(query, args, where);
                sql_query = sql_query:format(t_concat(where, " AND "));