• unknown's avatar
    bug#2686 - index_merge select on BerkeleyDB table with varchar PK causes mysqld to crash. · afe29967
    unknown authored
    Added put_length() to get_length() and unpack_key() to pack_key().
    Keys were packed with the minimum size of the length field for the key part and 
    unpacked with length size of the base column. 
    For the purpose of optimal key packing we have the method pack_key(), while rows are 
    packed with pack(). Now keys are unpacked with unpack_key() and no longer with 
    unpack() which is used for rows.
    
    
    mysql-test/r/bdb.result:
      bug#2686 - index_merge select on BerkeleyDB table with varchar PK causes mysqld to crash.
      Added the test case results.
    mysql-test/t/bdb.test:
      bug#2686 - index_merge select on BerkeleyDB table with varchar PK causes mysqld to crash.
      Added the test case.
    sql/field.cc:
      bug#2686 - index_merge select on BerkeleyDB table with varchar PK causes mysqld to crash.
      Added put_length() to get_length() and unpack_key() to pack_key().
      Keys were packed with the minimum size of the length field for the key part and 
      unpacked with length size of the base column. 
      For the purpose of optimal key packing we have the method pack_key(), while rows are packed 
      with pack(). Now keys are unpacked with unpack_key() and no longer with unpack() which is 
      used for rows.
    sql/field.h:
      bug#2686 - index_merge select on BerkeleyDB table with varchar PK causes mysqld to crash.
      Added put_length() to get_length() and unpack_key() to pack_key().
      The default implementation simply calls unpack() for those field types that don't need 
      a special key unpacking.
    sql/ha_berkeley.cc:
      bug#2686 - index_merge select on BerkeleyDB table with varchar PK causes mysqld to crash.
      Now keys are unpacked with unpack_key() and no longer with unpack() which is used for rows.
      For most field types, however, this simply calls unpack().
    afe29967
field.cc 116 KB