]> git.saurik.com Git - redis.git/commit - tests/unit/sort.tcl
"SORT by nosort" (skip sorting) respect sorted set ordering.
authorantirez <antirez@gmail.com>
Wed, 3 Oct 2012 09:41:08 +0000 (11:41 +0200)
committerantirez <antirez@gmail.com>
Wed, 3 Oct 2012 16:46:48 +0000 (18:46 +0200)
commit2ba962714aaba78921ce18a65628f71f350be460
treecfad536f2e87a41039ba5d9e4c0231a8d96a6041
parent151b606c11b18e1afc8df132910f26b313143bb4
"SORT by nosort" (skip sorting) respect sorted set ordering.

When SORT is called with the option BY set to a string constant not
inclduing the wildcard character "*", there is no way to sort the output
so any ordering is valid. This allows the SORT internals to optimize its
work and don't really sort the output at all.

However it was odd that this option was not able to retain the natural
order of a sorted set. This feature was requested by users multiple
times as sometimes to call SORT with GET against sorted sets as a way to
mass-fetch objects can be handy.

This commit introduces two things:

1) The ability of SORT to return sorted sets elements in their natural
ordering when `BY nosort` is specified, accordingly to `DESC / ASC` options.
2) The ability of SORT to optimize this case further if LIMIT is passed
as well, avoiding to really fetch the whole sorted set, but directly
obtaining the specified range.

Because in this case the sorting is always deterministic, no
post-sorting activity is performed when SORT is called from a Lua
script.

This commit fixes issue #98.
src/sort.c
tests/unit/sort.tcl