• Alexander Nozdrin's avatar
    Bug#55980 Character sets: supplementary character _bin ordering is wrong · 8b4af2a2
    Alexander Nozdrin authored
    Problem:
    - ORDER BY for utf8mb4_bin, utf16_bin and utf32_bin returned
      results in a wrong order, because old functions
      (supporting only BMP range) were used to handle these collations.
    - Additionally, utf16_bin did not sort supplementary characters
      between U+D700 and U+E000, as WL#1213 specification specified.
    
    include/m_ctype.h:
      Adding prototypes.
    mysql-test/include/ctype_filesort2.inc:
      Adding a new shared test file.
    mysql-test/t/ctype_utf8mb4.test:
      Adding tests.
    strings/ctype-ucs2.c:
      - Fixing my_strncoll[sp]_utf16_bin to compare
        binary representation instead of code points,
        to make columns with indexes sort correct.
      - Fixing my_collation_handler_utf32_bin and
        my_collation_handler_utf16_bin to use new
        functions.
    strings/ctype-utf8.c:
      - Adding my_strnxfrm[len]_unicode_fill_bin()
        to handle utf8mb4_bin, utf16_bin and utf32_bin,
        using 3 bytes per weight.
        This function also performs special reordering in case of utf16_bin.
      - Fixing my_collation_utf8mb4_bin handler to use the
        new function.
    8b4af2a2
ctype-ucs2.c 84.3 KB