• Alexander Barkov's avatar
    A joint patch for MDEV-19284 and MDEV-19285 (INSTANT ALTER) · c59d6395
    Alexander Barkov authored
    This patch fixes:
    
    - MDEV-19284 INSTANT ALTER with ucs2-to-utf16 conversion produces bad data
    - MDEV-19285 INSTANT ALTER from ascii_general_ci to latin1_general_ci produces corrupt data
    
    These regressions were introduced in 10.4.3 by:
    - MDEV-15564 Avoid table rebuild in ALTER TABLE on collation or charset changes
    
    Changes:
    
    1. Cleanup: Adding a helper method
       Field_longstr::csinfo_change_allows_instant_alter(),
       to remove some duplicate code in field.cc.
    
    2. Cleanup: removing Type_handler::Charsets_are_compatible() and static
       function charsets_are_compatible() and
       introducing new methods in the recently added class Charset instead:
       - encoding_allows_reinterpret_as()
       - encoding_and_order_allow_reinterpret_as()
    
    3. Bug fix: Removing the code that allowed instant conversion for
       ascii-to->8bit and ucs2-to->utf16.
       This actually fixes MDEV-19284 and MDEV-19285.
    
    4. Bug fix: Adding a helper method Charset::collation_specific_name().
       The old corresponding code in Type_handler::Charsets_are_compatible()
       was not safe against (badly named) user-defined collations whose
       character set name can be longer than collation name.
    c59d6395
sql_type.cc 257 KB