• mats@kindahl-laptop.dnsalias.net's avatar
    BUG#29549 (Endians: test failures on Solaris): · c4298a3f
    mats@kindahl-laptop.dnsalias.net authored
    Refactoring code to add parameter to pack() and unpack() functions with
    purpose of indicating if data should be packed in little-endian or
    native order. Using new functions to always pack data for binary log
    in little-endian order. The purpose of this refactoring is to allow
    proper implementation of endian-agnostic pack() and unpack() functions.
    
    Eliminating several versions of virtual pack() and unpack() functions
    in favor for one single virtual function which is overridden in
    subclasses.
    
    Implementing pack() and unpack() functions for some field types that
    packed data in native format regardless of the value of the
    st_table_share::db_low_byte_first flag.
    
    The field types that were packed in native format regardless are:
    Field_real, Field_decimal, Field_tiny, Field_short, Field_medium,
    Field_long, Field_longlong, and Field_blob.
    
    Before the patch, row-based logging wrote the rows incorrectly on
    big-endian machines where the storage engine defined its own
    low_byte_first() to be FALSE on big-endian machines (the default
    is TRUE), while little-endian machines wrote the fields in correct
    order. The only known storage engine that does this is NDB. In effect,
    this means that row-based replication from or to a big-endian
    machine where the table was using NDB as storage engine failed if the
    other engine was either non-NDB or on a little-endian machine.
    
    With this patch, row-based logging is now always done in little-endian
    order, while ORDER BY uses the native order if the storage engine
    defines low_byte_first() to return FALSE for big-endian machines.
    
    In addition, the max_data_length() function available in Field_blob
    was generalized to the entire Field hierarchy to give the maximum
    number of bytes that Field::pack() will write.
    c4298a3f
rpl_ndb_innodb2ndb.test 645 Bytes