• Martin Hansson's avatar
    Bug#56423: Different count with SELECT and CREATE SELECT queries · d6ee2ecf
    Martin Hansson authored
    This is the 5.5 version of the fix. The 5.1 version was too complicated to
    merge and was null merged.
    
    This is a regression from the fix for bug no 38999. A storage engine capable
    of reading only a subset of a table's columns updates corresponding bits in
    the read buffer to signal that it has read NULL values for the corresponding
    columns. It cannot, and should not, update any other bits. Bug no 38999
    occurred because the implementation of UPDATE statements compare the NULL bits
    using memcmp, inadvertently comparing bits that were never requested from the
    storage engine. The regression was caused by the storage engine trying to
    alleviate the situation by writing to all NULL bits, even those that it had no
    knowledge of. This has devastating effects for the index merge algorithm,
    which relies on all NULL bits, except those explicitly requested, being left
    unchanged.
    
    The fix reverts the fix for bug no 38999 in both InnoDB and InnoDB plugin and
    changes the server's method of comparing records. For engines that always read
    entire rows, we proceed as usual. For engines capable of reading only select
    columns, the record buffers are now compared on a column by column basis. An
    assertion was also added so that non comparable buffers are never read. Some
    relevant copy-pasted code was also consolidated in a new function.
    d6ee2ecf
sql_insert.cc 137 KB