fix: #8954, clear purged replies and toPids (#8959)

* fix: #8954, clear purged replies and toPids

* fix: redis test
This commit is contained in:
Barış Soner Uşaklı
2020-11-26 12:04:01 -05:00
committed by GitHub
parent 39dae0aaff
commit 5bb5ec4618
7 changed files with 103 additions and 22 deletions

View File

@@ -247,20 +247,26 @@ SELECT (h."data" ? $2::TEXT AND h."data"->>$2::TEXT IS NOT NULL) b
};
module.deleteObjectFields = async function (key, fields) {
if (!key || !Array.isArray(fields) || !fields.length) {
if (!key || (Array.isArray(key) && !key.length) || !Array.isArray(fields) || !fields.length) {
return;
}
await module.pool.query({
name: 'deleteObjectFields',
text: `
UPDATE "legacy_hash"
SET "data" = COALESCE((SELECT jsonb_object_agg("key", "value")
FROM jsonb_each("data")
WHERE "key" <> ALL ($2::TEXT[])), '{}')
WHERE "_key" = $1::TEXT`,
values: [key, fields],
});
async function delKey(key, fields) {
await module.pool.query({
name: 'deleteObjectFields',
text: `
UPDATE "legacy_hash"
SET "data" = COALESCE((SELECT jsonb_object_agg("key", "value")
FROM jsonb_each("data")
WHERE "key" <> ALL ($2::TEXT[])), '{}')
WHERE "_key" = $1::TEXT`,
values: [key, fields],
});
}
if (Array.isArray(key)) {
await Promise.all(key.map(k => delKey(k, fields)));
} else {
await delKey(key, fields);
}
};
module.incrObjectField = async function (key, field) {