Loading mysql-test/r/func_time.result +25 −0 Original line number Diff line number Diff line Loading @@ -847,3 +847,28 @@ timestampdiff(year,'2004-02-28','2005-02-28') select timestampdiff(year,'2004-02-29','2005-02-28'); timestampdiff(year,'2004-02-29','2005-02-28') 0 CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date); CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date); INSERT INTO t1 VALUES (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01'); INSERT INTO t2 VALUES (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15'); SELECT * FROM t1, t2 WHERE t1.day BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; id day id day 1 2005-06-01 1 2005-08-01 3 2005-07-01 1 2005-08-01 1 2005-06-01 2 2005-06-15 1 2005-06-01 3 2005-07-15 3 2005-07-01 3 2005-07-15 SELECT * FROM t1, t2 WHERE CAST(t1.day AS DATE) BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; id day id day 1 2005-06-01 1 2005-08-01 3 2005-07-01 1 2005-08-01 1 2005-06-01 2 2005-06-15 1 2005-06-01 3 2005-07-15 3 2005-07-01 3 2005-07-15 DROP TABLE t1,t2; mysql-test/r/innodb.result +9 −0 Original line number Diff line number Diff line Loading @@ -3194,6 +3194,15 @@ drop trigger t2t; drop trigger t3t; drop trigger t4t; drop table t1, t2, t3, t4, t5; create table t1(a date) engine=innodb; create table t2(a date, key(a)) engine=innodb; insert into t1 values('2005-10-01'); insert into t2 values('2005-10-01'); select * from t1, t2 where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; a a 2005-10-01 2005-10-01 drop table t1, t2; CREATE TABLE t1 ( field1 varchar(8) NOT NULL DEFAULT '', field2 varchar(8) NOT NULL DEFAULT '', Loading mysql-test/t/func_time.test +22 −0 Original line number Diff line number Diff line Loading @@ -446,4 +446,26 @@ select timestampdiff(year,'1999-09-11','2001-9-11'); select timestampdiff(year,'2004-02-28','2005-02-28'); select timestampdiff(year,'2004-02-29','2005-02-28'); # # Bug #18618: BETWEEN for dates with the second argument being a constant # expression and the first and the third arguments being fields # CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date); CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date); INSERT INTO t1 VALUES (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01'); INSERT INTO t2 VALUES (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15'); SELECT * FROM t1, t2 WHERE t1.day BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; SELECT * FROM t1, t2 WHERE CAST(t1.day AS DATE) BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; DROP TABLE t1,t2; # End of 5.0 tests mysql-test/t/innodb.test +12 −1 Original line number Diff line number Diff line Loading @@ -2085,6 +2085,18 @@ connection default; disconnect a; disconnect b; # # Bug #14360: problem with intervals # create table t1(a date) engine=innodb; create table t2(a date, key(a)) engine=innodb; insert into t1 values('2005-10-01'); insert into t2 values('2005-10-01'); select * from t1, t2 where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; drop table t1, t2; # # Test that cascading updates leading to duplicate keys give the correct # error message (bug #9680) Loading Loading @@ -2137,4 +2149,3 @@ alter table t1 drop foreign key c2_fk; show create table t1; # drop table t1, t2; sql/item_cmpfunc.cc +2 −10 Original line number Diff line number Diff line Loading @@ -52,7 +52,6 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) { uint i; Field *field= NULL; bool all_constant= TRUE; /* If the first argument is a FIELD_ITEM, pull out the field. */ if (items[0]->real_item()->type() == Item::FIELD_ITEM) Loading @@ -65,17 +64,10 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) for (i= 1; i < nitems; i++) { type[0]= item_cmp_type(type[0], items[i]->result_type()); if (field && !convert_constant_item(thd, field, &items[i])) all_constant= FALSE; } /* If we had a field that can be compared as a longlong, and all constant items, then the aggregate result will be an INT_RESULT. */ if (field && all_constant) if (field && convert_constant_item(thd, field, &items[i])) type[0]= INT_RESULT; } } static void my_coll_agg_error(DTCollation &c1, DTCollation &c2, Loading Loading
mysql-test/r/func_time.result +25 −0 Original line number Diff line number Diff line Loading @@ -847,3 +847,28 @@ timestampdiff(year,'2004-02-28','2005-02-28') select timestampdiff(year,'2004-02-29','2005-02-28'); timestampdiff(year,'2004-02-29','2005-02-28') 0 CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date); CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date); INSERT INTO t1 VALUES (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01'); INSERT INTO t2 VALUES (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15'); SELECT * FROM t1, t2 WHERE t1.day BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; id day id day 1 2005-06-01 1 2005-08-01 3 2005-07-01 1 2005-08-01 1 2005-06-01 2 2005-06-15 1 2005-06-01 3 2005-07-15 3 2005-07-01 3 2005-07-15 SELECT * FROM t1, t2 WHERE CAST(t1.day AS DATE) BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; id day id day 1 2005-06-01 1 2005-08-01 3 2005-07-01 1 2005-08-01 1 2005-06-01 2 2005-06-15 1 2005-06-01 3 2005-07-15 3 2005-07-01 3 2005-07-15 DROP TABLE t1,t2;
mysql-test/r/innodb.result +9 −0 Original line number Diff line number Diff line Loading @@ -3194,6 +3194,15 @@ drop trigger t2t; drop trigger t3t; drop trigger t4t; drop table t1, t2, t3, t4, t5; create table t1(a date) engine=innodb; create table t2(a date, key(a)) engine=innodb; insert into t1 values('2005-10-01'); insert into t2 values('2005-10-01'); select * from t1, t2 where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; a a 2005-10-01 2005-10-01 drop table t1, t2; CREATE TABLE t1 ( field1 varchar(8) NOT NULL DEFAULT '', field2 varchar(8) NOT NULL DEFAULT '', Loading
mysql-test/t/func_time.test +22 −0 Original line number Diff line number Diff line Loading @@ -446,4 +446,26 @@ select timestampdiff(year,'1999-09-11','2001-9-11'); select timestampdiff(year,'2004-02-28','2005-02-28'); select timestampdiff(year,'2004-02-29','2005-02-28'); # # Bug #18618: BETWEEN for dates with the second argument being a constant # expression and the first and the third arguments being fields # CREATE TABLE t1 (id int NOT NULL PRIMARY KEY, day date); CREATE TABLE t2 (id int NOT NULL PRIMARY KEY, day date); INSERT INTO t1 VALUES (1, '2005-06-01'), (2, '2005-02-01'), (3, '2005-07-01'); INSERT INTO t2 VALUES (1, '2005-08-01'), (2, '2005-06-15'), (3, '2005-07-15'); SELECT * FROM t1, t2 WHERE t1.day BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; SELECT * FROM t1, t2 WHERE CAST(t1.day AS DATE) BETWEEN '2005.09.01' - INTERVAL 6 MONTH AND t2.day; DROP TABLE t1,t2; # End of 5.0 tests
mysql-test/t/innodb.test +12 −1 Original line number Diff line number Diff line Loading @@ -2085,6 +2085,18 @@ connection default; disconnect a; disconnect b; # # Bug #14360: problem with intervals # create table t1(a date) engine=innodb; create table t2(a date, key(a)) engine=innodb; insert into t1 values('2005-10-01'); insert into t2 values('2005-10-01'); select * from t1, t2 where t2.a between t1.a - interval 2 day and t1.a + interval 2 day; drop table t1, t2; # # Test that cascading updates leading to duplicate keys give the correct # error message (bug #9680) Loading Loading @@ -2137,4 +2149,3 @@ alter table t1 drop foreign key c2_fk; show create table t1; # drop table t1, t2;
sql/item_cmpfunc.cc +2 −10 Original line number Diff line number Diff line Loading @@ -52,7 +52,6 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) { uint i; Field *field= NULL; bool all_constant= TRUE; /* If the first argument is a FIELD_ITEM, pull out the field. */ if (items[0]->real_item()->type() == Item::FIELD_ITEM) Loading @@ -65,17 +64,10 @@ static void agg_cmp_type(THD *thd, Item_result *type, Item **items, uint nitems) for (i= 1; i < nitems; i++) { type[0]= item_cmp_type(type[0], items[i]->result_type()); if (field && !convert_constant_item(thd, field, &items[i])) all_constant= FALSE; } /* If we had a field that can be compared as a longlong, and all constant items, then the aggregate result will be an INT_RESULT. */ if (field && all_constant) if (field && convert_constant_item(thd, field, &items[i])) type[0]= INT_RESULT; } } static void my_coll_agg_error(DTCollation &c1, DTCollation &c2, Loading