• Michael Widenius's avatar
    MDEV-6255 DUPLICATE KEY Errors on SELECT .. GROUP BY that uses temporary and filesort. · c4f5326b
    Michael Widenius authored
    The problem was that my_hash_sort didn't properly delete end-space characters properly, so strings that should compare
    identically was seen as different strings.  (Space was handled correctly, but not NBSP)
    This caused duplicate key errors when a heap table was converted to Aria as part of overflow in group by.
    
    Fixed by removing all characters that compares as end space when creating a hash.
    
    Other things:
    - Fixed that --sorted_results also works for errors in mysqltest.
    - Speed up hash by not comparing strings that has different hash.
    - Speed up many my_hash_sort functions by using registers to calculate hash instead of pointers.
      This was previously done for some functions, but not for all.
    - Made a macro of the hash function, to simplify code and to be able to experiment with new hash functions.
    
    
    
    
    
    
    
    client/mysqltest.cc:
      Fixed that --sorted_results also works for error messages.
    mysql-test/r/ctype_partitions.result:
      New test to ensure that partitions on hash works
    mysql-test/suite/multi_source/gtid.result:
      Updated result
    mysql-test/suite/multi_source/gtid.test:
      Test that --sorted_result works for error messages
    mysql-test/suite/multi_source/gtid_ignore_duplicates.result:
      Updated result
    mysql-test/suite/multi_source/gtid_ignore_duplicates.test:
      Updated result
    mysql-test/suite/multi_source/load_data.result:
      Updated result
    mysql-test/suite/multi_source/load_data.test:
      Updated result
    mysql-test/t/ctype_partitions.test:
      New test to ensure that partitions on hash works
    storage/heap/hp_write.c:
      Speed up hash by not comparing strings that has different hash.
    storage/maria/ma_check.c:
      Extra debug
    strings/ctype-bin.c:
      Use macro for hash function
    strings/ctype-latin1.c:
      Use macro for hash function
      Use registers to calculate hash (speedup)
    strings/ctype-mb.c:
      Use macro for hash function
      Use registers to calculate hash (speedup)
    strings/ctype-simple.c:
      Use macro for hash function
      Use same variable names as in other my_hash_sort functions.
      Update my_hash_sort_simple() to properly remove end space (patch by Bar)
    strings/ctype-uca.c:
      Ignore duplicated space inside strings and end space in my_hash_sort_uca(). This fixed MDEV-6255
      Use macro for hash function
      Use registers to calculate hash (speedup)
    strings/ctype-ucs2.c:
      Use macro for hash function
      Use registers to calculate hash (speedup)
    strings/ctype-utf8.c:
      Use macro for hash function
      Use registers to calculate hash (speedup)
    strings/strings_def.h:
      Made a macro of the hash function, to simplify code and to be able to experiment with new hash functions.
    c4f5326b
ctype-ucs2.c 84.4 KB