• Neil Conway's avatar
    This patch optimizes the md5_text() function (which is used to · 3350b374
    Neil Conway authored
    implement the md5() SQL-level function). The old code did the
    following:
    
    1. de-toast the datum
    2. convert it to a cstring via textout()
    3. get the length of the cstring via strlen()
    
    Since we are treating the datum context as a blob of binary data,
    the latter two steps are unnecessary. Once the data has been
    detoasted, we can just use it as-is, and derive its length from
    the varlena metadata.
    
    This patch improves some run-of-the-mill md5() computations by
    just under 10% in my limited tests, and passes the regression tests.
    
    I also noticed that md5_text() wasn't checking the return value
    of md5_hash(); encountering OOM at precisely the right moment
    could result in returning a random md5 hash. This patch corrects
    that. A better fix would be to make md5_hash() only return on
    success (and/or allocate via palloc()), but since it's used in
    the frontend as well I don't see an easy way to do that.
    3350b374
varlena.c 51.7 KB