• unknown's avatar
    Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX · d8b4d419
    unknown authored
    For "count(*) while index_column = value" an index read
    is done. It consists of an index scan and retrieval of
    each key.
    
    For efficiency reasons the index scan stores the key in
    the special buffer 'lastkey2' once only. At the first 
    iteration it notes this fact with the flag 
    HA_STATE_RNEXT_SAME in 'info->update'.
    
    For efficiency reasons, the key retrieval for blobs
    does not allocate a new buffer, but uses 'lastkey2'...
    
    Now I clear the HA_STATE_RNEXT_SAME flag whenever the 
    buffer has been polluted. In this case, the index scan
    copies the key value again (and sets the flag again).
    
    
    include/my_base.h:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Changed the comment for HA_STATE_RNEXT_SAME as a warning
      for future uses.
    myisam/mi_delete.c:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Removing the flag HA_STATE_RNEXT_SAME from info->update
      if info->lastkey2 was reused for another purpose than
      index scanning.
    myisam/mi_key.c:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Removing the flag HA_STATE_RNEXT_SAME from info->update
      if info->lastkey2 was reused for another purpose than
      index scanning.
    myisam/mi_rnext_same.c:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Removed trailing space and fixed a comment.
    myisam/mi_unique.c:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Removing the flag HA_STATE_RNEXT_SAME from info->update
      if info->lastkey2 was reused for another purpose than
      index scanning.
    myisam/mi_update.c:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Removing the flag HA_STATE_RNEXT_SAME from info->update
      if info->lastkey2 was reused for another purpose than
      index scanning.
    myisam/mi_write.c:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Removing the flag HA_STATE_RNEXT_SAME from info->update
      if info->lastkey2 was reused for another purpose than
      index scanning.
    mysql-test/r/myisam.result:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Added test result.
    mysql-test/t/myisam.test:
      Bug#14980 - COUNT(*) incorrect on MyISAM table with certain INDEX
      Added test.
    d8b4d419
mi_rnext_same.c 3.22 KB