• unknown's avatar
    bug#28570: handler::index_read() is called with different find_flag when · 546c7fcf
    unknown authored
    ORDER BY is used
    
    The range analysis module did not correctly signal to the 
    handler that a range represents a ref (EQ_RANGE flag). This causes 
    non-range queries like 
    SELECT ... FROM ... WHERE keypart_1=const, ..., keypart_n=const 
    ORDER BY ... FOR UPDATE
    to wait for a lock unneccesarily if another running transaction uses
    SELECT ... FOR UPDATE on the same table.
    
    Fixed by setting EQ_RANGE for all range accesses that represent 
    an equality predicate. 
    
    
    mysql-test/r/innodb_mysql.result:
      bug#28570: Test Result
    mysql-test/t/innodb_mysql.test:
      bug#28570: Test Case
    sql/handler.cc:
      bug#28570: Updated comment
    sql/opt_range.cc:
      bug#28570: Removed the criterion that key has to be unique (HA_NOSAME) in 
      order for the EQ_RANGE flag to be set. It is sufficient that the range 
      represent a ref access.
    546c7fcf
handler.cc 76.8 KB