• unknown's avatar
    Fix for MDEV-3948, and backport of the following collection of fixes and backports · f65e5841
    unknown authored
    from MariaDB 10.0.
      
    The bug in mdev-3948 was an instance of the problem fixed by Sergey's patch
    in 10.0 - namely that the range optimizer could change table->[read | write]_set,
    and not restore it.
      
    revno: 3471
    committer: Sergey Petrunya <psergey@askmonty.org>
    branch nick: 10.0-serg-fix-imerge
    timestamp: Sat 2012-11-03 12:24:36 +0400
    message:
      # MDEV-3817: Wrong result with index_merge+index_merge_intersection, InnoDB table, join, AND and OR conditions
      Reconcile the fixes from:
      #
      # guilhem.bichot@oracle.com-20110805143029-ywrzuz15uzgontr0
      # Fix for BUG#12698916 - "JOIN QUERY GIVES WRONG RESULT AT 2ND EXEC. OR
      # AFTER FLUSH TABLES [-INT VS NULL]"
      #
      # guilhem.bichot@oracle.com-20111209150650-tzx3ldzxe1yfwji6
      # Fix for BUG#12912171 - ASSERTION FAILED: QUICK->HEAD->READ_SET == SAVE_READ_SET
      # and
      #
      and related fixes from: BUG#1006164, MDEV-376:
      
      Now, ROR-merged QUICK_RANGE_SELECT objects make no assumptions about the values
      of table->read_set and table->write_set.
      Each QUICK_ROR_SELECT has (and had before) its own column bitmap, but now, all 
      QUICK_ROR_SELECT's functions that care: reset(), init_ror_merged_scan(), and 
      get_next()  will set table->read_set when invoked and restore it back to what 
      it was before the call before they return.
    
      This allows to avoid the mess when somebody else modifies table->read_set for 
      some reason.
    f65e5841
opt_range.h 33 KB