• antirez's avatar
    Fixed compareStringObject() and introduced collateStringObject(). · 81e55ec0
    antirez authored
    compareStringObject was not always giving the same result when comparing
    two exact strings, but encoded as integers or as sds strings, since it
    switched to strcmp() when at least one of the strings were not sds
    encoded.
    
    For instance the two strings "123" and "123\x00456", where the first
    string was integer encoded, would result into the old implementation of
    compareStringObject() to return 0 as if the strings were equal, while
    instead the second string is "greater" than the first in a binary
    comparison.
    
    The same compasion, but with "123" encoded as sds string, would instead
    return a value < 0, as it is correct. It is not impossible that the
    above caused some obscure bug, since the comparison was not always
    deterministic, and compareStringObject() is used in the implementation
    of skiplists, hash tables, and so forth.
    
    At the same time, collateStringObject() was introduced by this commit, so
    that can be used by SORT command to return sorted strings usign
    collation instead of binary comparison. See next commit.
    81e55ec0
object.c 18.3 KB