Commit 1534bb79 authored by unknown's avatar unknown
Browse files

Merge olga.mysql.com:/home/igor/mysql-5.0-opt

into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24035

parents 9bb750f5 e0d8e8fd
Loading
Loading
Loading
Loading
+57 −0
Original line number Diff line number Diff line
@@ -377,3 +377,60 @@ create table t1(f1 int, `*f2` int);
insert into t1 values (1,1);
update t1 set `*f2`=1;
drop table t1;
CREATE TABLE t1 (
request_id int unsigned NOT NULL auto_increment,
user_id varchar(12) default NULL,
time_stamp datetime NOT NULL default '0000-00-00 00:00:00',
ip_address varchar(15) default NULL,
PRIMARY KEY (request_id),
KEY user_id_2 (user_id,time_stamp)
);
INSERT INTO t1 (user_id) VALUES ('user1');
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
flush status;
SELECT user_id FROM t1 WHERE request_id=9999999999999;
user_id
show status like '%Handler_read%';
Variable_name	Value
Handler_read_first	0
Handler_read_key	1
Handler_read_next	0
Handler_read_prev	0
Handler_read_rnd	0
Handler_read_rnd_next	0
SELECT user_id FROM t1 WHERE request_id=999999999999999999999999999999;
user_id
show status like '%Handler_read%';
Variable_name	Value
Handler_read_first	0
Handler_read_key	2
Handler_read_next	0
Handler_read_prev	0
Handler_read_rnd	0
Handler_read_rnd_next	7
UPDATE t1 SET user_id=null WHERE request_id=9999999999999;
show status like '%Handler_read%';
Variable_name	Value
Handler_read_first	0
Handler_read_key	3
Handler_read_next	0
Handler_read_prev	0
Handler_read_rnd	0
Handler_read_rnd_next	14
UPDATE t1 SET user_id=null WHERE request_id=999999999999999999999999999999;
show status like '%Handler_read%';
Variable_name	Value
Handler_read_first	0
Handler_read_key	3
Handler_read_next	0
Handler_read_prev	0
Handler_read_rnd	0
Handler_read_rnd_next	21
DROP TABLE t1;
+35 −0
Original line number Diff line number Diff line
@@ -307,3 +307,38 @@ insert into t1 values (1,1);
update t1 set `*f2`=1;
drop table t1;
# End of 4.1 tests

#
# Bug #24035: performance degradation with condition int_field=big_decimal
#

CREATE TABLE t1 (
  request_id int unsigned NOT NULL auto_increment,
  user_id varchar(12) default NULL,
  time_stamp datetime NOT NULL default '0000-00-00 00:00:00',
  ip_address varchar(15) default NULL,
  PRIMARY KEY (request_id),
  KEY user_id_2 (user_id,time_stamp)
);

INSERT INTO t1 (user_id) VALUES ('user1');
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;
INSERT INTO t1(user_id) SELECT user_id FROM t1;

flush status;
SELECT user_id FROM t1 WHERE request_id=9999999999999; 
show status like '%Handler_read%';
SELECT user_id FROM t1 WHERE request_id=999999999999999999999999999999; 
show status like '%Handler_read%';
UPDATE t1 SET user_id=null WHERE request_id=9999999999999;
show status like '%Handler_read%';
UPDATE t1 SET user_id=null WHERE request_id=999999999999999999999999999999;
show status like '%Handler_read%';

DROP TABLE t1;
+16 −1
Original line number Diff line number Diff line
@@ -4296,7 +4296,22 @@ get_mm_leaf(PARAM *param, COND *conf_func, Field *field, KEY_PART *key_part,
  err= value->save_in_field_no_warnings(field, 1);
  if (err > 0 && field->cmp_type() != value->result_type())
  {
    if ((type == Item_func::EQ_FUNC || type == Item_func::EQUAL_FUNC) &&
	value->result_type() == item_cmp_type(field->result_type(),
                                              value->result_type()))

    {
      tree= new (alloc) SEL_ARG(field, 0, 0);
      tree->type= SEL_ARG::IMPOSSIBLE;
    }
    else
    {
      /*
        TODO: We should return trees of the type SEL_ARG::IMPOSSIBLE
        for the cases like int_field > 999999999999999999999999 as well.
      */
      tree= 0;
    }
    goto end;
  } 
  if (err < 0)