Barış Soner Uşaklı 6 years ago
parent 48690a01b9
commit ca1e3a758b

@ -25,9 +25,24 @@ module.exports = function (db, module) {
if (!key) {
return callback();
}
db.collection('objects').findOne({ _key: key }, function (err, item) {
callback(err, item !== undefined && item !== null);
});
if (Array.isArray(key)) {
db.collection('objects').find({ _key: { $in: key } }).toArray(function (err, data) {
if (err) {
return callback(err);
}
var map = {};
data.forEach(function (item) {
map[item._key] = true;
});
callback(null, key.map(key => !!map[key]));
});
} else {
db.collection('objects').findOne({ _key: key }, function (err, item) {
callback(err, item !== undefined && item !== null);
});
}
};
module.delete = function (key, callback) {

@ -30,21 +30,42 @@ module.exports = function (db, module) {
return callback();
}
query({
name: 'exists',
text: `
SELECT EXISTS(SELECT *
FROM "legacy_object_live"
WHERE "_key" = $1::TEXT
LIMIT 1) e`,
values: [key],
}, function (err, res) {
if (err) {
return callback(err);
}
if (Array.isArray(key)) {
query({
name: 'exists',
text: `
SELECT o."_key" k
FROM "legacy_object_live" o
WHERE o."_key" = ANY($1::TEXT[])`,
values: [key],
}, function (err, res) {
if (err) {
return callback(err);
}
callback(null, res.rows[0].e);
});
callback(null, key.map(function (k) {
return res.rows.some(function (r) {
return r.k === k;
});
}));
});
} else {
query({
name: 'exists',
text: `
SELECT EXISTS(SELECT *
FROM "legacy_object_live"
WHERE "_key" = $1::TEXT
LIMIT 1) e`,
values: [key],
}, function (err, res) {
if (err) {
return callback(err);
}
callback(null, res.rows[0].e);
});
}
};
module.delete = function (key, callback) {

@ -1,6 +1,8 @@
'use strict';
module.exports = function (redisClient, module) {
var helpers = module.helpers.redis;
module.flushdb = function (callback) {
redisClient.send_command('flushdb', [], function (err) {
if (typeof callback === 'function') {
@ -20,9 +22,15 @@ module.exports = function (redisClient, module) {
};
module.exists = function (key, callback) {
redisClient.exists(key, function (err, exists) {
callback(err, exists === 1);
});
if (Array.isArray(key)) {
helpers.multiKeys(redisClient, 'exists', key, function (err, data) {
callback(err, data && data.map(exists => exists === 1));
});
} else {
redisClient.exists(key, function (err, exists) {
callback(err, exists === 1);
});
}
};
module.delete = function (key, callback) {

@ -53,6 +53,14 @@ describe('Key methods', function () {
});
});
it('should work for an array of keys', function (done) {
db.exists(['testKey', 'doesnotexist'], function (err, exists) {
assert.ifError(err);
assert.deepStrictEqual(exists, [true, false]);
done();
});
});
it('should delete a key without error', function (done) {
db.delete('testKey', function (err) {
assert.ifError(err);

Loading…
Cancel
Save