Commit 4fdadd62 authored by mhansson@dl145s.mysql.com's avatar mhansson@dl145s.mysql.com
Browse files

Merge mhansson@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  dl145s.mysql.com:/data0/mhansson/my50-bug28570
parents 222fddcb 1da8451d
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -1047,4 +1047,22 @@ t1 CREATE TABLE `t1` (
  KEY `a` (`a`(255))
) ENGINE=InnoDB DEFAULT CHARSET=utf8
drop table t1;
CREATE TABLE t1 (
a INT,
b INT,
KEY (b)
) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30);
START TRANSACTION;
SELECT * FROM t1 WHERE b=20 FOR UPDATE;
a	b
2	20
START TRANSACTION;
SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE;
a	b
1	10
2	10
ROLLBACK;
ROLLBACK;
DROP TABLE t1;
End of 5.0 tests
+28 −0
Original line number Diff line number Diff line
@@ -881,5 +881,33 @@ insert into t1 values('aaa');
alter table t1 add index(a(1024));
show create table t1;
drop table t1;
# Bug #28570: handler::index_read() is called with different find_flag when 
# ORDER BY is used
#

CREATE TABLE t1 (
  a INT,
  b INT,
  KEY (b)
) ENGINE=InnoDB;

INSERT INTO t1 VALUES (1,10), (2,10), (2,20), (3,30);

START TRANSACTION;
SELECT * FROM t1 WHERE b=20 FOR UPDATE;

--connect (conn2, localhost, root,,test)

# This statement gives a "failed: 1205: Lock wait timeout exceeded; try 
# restarting transaction" message when the bug is present.
START TRANSACTION;
SELECT * FROM t1 WHERE b=10 ORDER BY A FOR UPDATE;
ROLLBACK;

--disconnect conn2
--connection default

ROLLBACK;
DROP TABLE t1;

--echo End of 5.0 tests
+2 −1
Original line number Diff line number Diff line
@@ -2610,7 +2610,8 @@ int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
    read_range_first()
    start_key		Start key. Is 0 if no min range
    end_key		End key.  Is 0 if no max range
    eq_range_arg	Set to 1 if start_key == end_key
    eq_range_arg	Set to 1 if start_key == end_key and the range endpoints
                        will not change during query execution.
    sorted		Set to 1 if result should be sorted per key

  NOTES
+1 −2
Original line number Diff line number Diff line
@@ -6369,8 +6369,7 @@ QUICK_RANGE_SELECT *get_quick_select_for_ref(THD *thd, TABLE *table,
  range->min_key=range->max_key=(char*) ref->key_buff;
  range->min_length=range->max_length=ref->key_length;
  range->flag= ((ref->key_length == key_info->key_length &&
		 (key_info->flags & (HA_NOSAME | HA_END_SPACE_KEY)) ==
		 HA_NOSAME) ? EQ_RANGE : 0);
		 (key_info->flags & HA_END_SPACE_KEY) == 0) ? EQ_RANGE : 0);

  if (!(quick->key_parts=key_part=(KEY_PART *)
	alloc_root(&quick->alloc,sizeof(KEY_PART)*ref->key_parts)))