diff --git a/src/database/redis/sorted.js b/src/database/redis/sorted.js index 4c6ab89c8a..977b1abfd1 100644 --- a/src/database/redis/sorted.js +++ b/src/database/redis/sorted.js @@ -75,6 +75,18 @@ module.exports = function(redisClient, module) { }; module.getSortedSetUnion = function(sets, start, stop, callback) { + var args = Array.prototype.slice.call(arguments, 0); + args.unshift(null); + sortedSetUnion.apply(null, args); + } + + module.getSortedSetRevUnion = function(sets, start, stop, callback) { + var args = Array.prototype.slice.call(arguments, 0); + args.unshift(true); + sortedSetUnion.apply(null, args); + } + + var sortedSetUnion = function(rev, sets, start, stop, callback) { // start and stop optional if (typeof start === 'function') { callback = start; @@ -92,7 +104,7 @@ module.exports = function(redisClient, module) { sets.unshift('temp'); multi.zunionstore.apply(multi, sets); - multi.zrange('temp', start, stop); + multi[rev ? 'zrevrange' : 'zrange']('temp', start, stop); multi.del('temp'); multi.exec(function(err, results) { if (!err && typeof callback === 'function') { diff --git a/tests/database.js b/tests/database.js index 6176d26c9a..76aa19bed9 100644 --- a/tests/database.js +++ b/tests/database.js @@ -330,6 +330,12 @@ describe('Test database', function() { }); } + function getSortedSetRevUnion(callback) { + db.getSortedSetUnion(['users:joindate', 'users:derp', 'users:postcount'], function(err, data) { + callback(err, {'sortedSetUnion': data}); + }); + } + var sortedSetTasks = [ sortedSetAdd, sortedSetAdd, @@ -344,7 +350,8 @@ describe('Test database', function() { sortedSetScore, sortedSetsScore, getSortedSetRevRangeByScore, - getSortedSetUnion + getSortedSetUnion, + getSortedSetRevUnion ]; async.series(sortedSetTasks, function(err, results) {