• Michael Widenius's avatar
    MDEV-4280: Assertion `empty_size == empty_size_on_page' failure in... · 4e9bf37f
    Michael Widenius authored
    MDEV-4280: Assertion `empty_size == empty_size_on_page' failure in ma_blockrec.c or ER_NOT_KEYFILE on query with DISTINCT and GROUP BY
    This could happen when using Aria for internal temporary files (default case) and using DISTINCT.
    _ma_scan_restore_block_record() didn't work correctly if there was rows inserted, updated or deleted on the handler
    between calls to _ma_scan_remember_block_record() and _ma_scan_restore_block_record().
    The effect was that some DISTINCT queries that used remove_dup_with_compare() could fail.
    
    .bzrignore:
      Ignore sql_yacc.hh
    mysql-test/suite/maria/r/distinct.result:
      Test case for MDEV-4280
    mysql-test/suite/maria/t/distinct.test:
      Test case for MDEV-4280
    mysql-test/t/mysql.test:
      Fixed test suite (we could get error -1 in some cases)
    sql/sql_select.cc:
      Break loop if restart_rnd_next() gives an error
    storage/maria/ha_maria.cc:
      scan_restore_pos() can return disk fault error.
    storage/maria/ma_blockrec.c:
      _ma_scan_remember_block_record() did incorrectly update scan.dir instead of scan_save.dir .
      _ma_scan_restore_block_record() didn't work correctly if there was rows inserted,updated or deleted on the handler
      between calls to _ma_scan_remember_block_record() and _ma_scan_restore_block_record().
      Fixed by adding counters for row changes and reading the current scan page if changes had been made.
    storage/maria/ma_blockrec.h:
      scan_restore_pos() can return disk fault error.
    storage/maria/ma_delete.c:
      Increment row_changes
    storage/maria/ma_scan.c:
      scan_restore_pos() can return disk fault error.
    storage/maria/ma_update.c:
      Increment row_changes
    storage/maria/ma_write.c:
      Increment row_changes
    storage/maria/maria_def.h:
      scan_restore_pos() can return disk fault error.
    4e9bf37f
distinct.test 786 Bytes