Loading mysql-test/r/update.result +57 −0 Original line number Diff line number Diff line Loading @@ -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; mysql-test/t/update.test +35 −0 Original line number Diff line number Diff line Loading @@ -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; sql/opt_range.cc +16 −1 Original line number Diff line number Diff line Loading @@ -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) Loading Loading
mysql-test/r/update.result +57 −0 Original line number Diff line number Diff line Loading @@ -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;
mysql-test/t/update.test +35 −0 Original line number Diff line number Diff line Loading @@ -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;
sql/opt_range.cc +16 −1 Original line number Diff line number Diff line Loading @@ -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) Loading