Commit caf10590 authored by Alexander Barkov's avatar Alexander Barkov

Fixing sporading builtbot test failures happening at '00:00:00' sharp

Some tests relied on the fact that DATETIME->DATE conversion
always produce a truncation (with a warning). This is not the case
when the SQL statement is executed at current time '00:00:00' sharp.

Adding a new SET TIMESTAMP statements to make sure time is not '00:00:00'.
parent 7f67ef14
...@@ -429,6 +429,7 @@ select @a; ...@@ -429,6 +429,7 @@ select @a;
# #
# BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed # BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed
# #
SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-01 00:00:01');
create table t1(a date,key(a)); create table t1(a date,key(a));
insert into t1 values ('2012-01-01'),('2012-02-02'); insert into t1 values ('2012-01-01'),('2012-02-02');
explain explain
...@@ -440,6 +441,7 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -440,6 +441,7 @@ id select_type table type possible_keys key key_len ref rows Extra
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1; select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
1 1
drop table t1; drop table t1;
SET TIMESTAMP=DEFAULT;
# #
# MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
# MDEV-9972 Least function retuns date in date time format # MDEV-9972 Least function retuns date in date time format
......
...@@ -57,6 +57,7 @@ select * from t1; ...@@ -57,6 +57,7 @@ select * from t1;
t t
0000-00-00 00:00:00 0000-00-00 00:00:00
drop table t1; drop table t1;
SET TIMESTAMP=UNIX_TIMESTAMP('2020-08-11 00:00:01');
CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime); CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime);
insert into t1 (b,c,d) values(now(),curtime(),now()); insert into t1 (b,c,d) values(now(),curtime(),now());
Warnings: Warnings:
...@@ -65,6 +66,7 @@ select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1; ...@@ -65,6 +66,7 @@ select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1;
date_format(a,"%Y-%m-%d")=b right(a+0,6)=c+0 a=d+0 date_format(a,"%Y-%m-%d")=b right(a+0,6)=c+0 a=d+0
1 1 1 1 1 1
drop table t1; drop table t1;
SET TIMESTAMP=DEFAULT;
CREATE TABLE t1 (a datetime not null); CREATE TABLE t1 (a datetime not null);
insert into t1 values (0); insert into t1 values (0);
select * from t1 where a is null; select * from t1 where a is null;
...@@ -298,8 +300,10 @@ f2 f3 ...@@ -298,8 +300,10 @@ f2 f3
select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15"; select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15";
f2 f2
2001-04-15 00:00:00 2001-04-15 00:00:00
SET timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:01');
SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE(); SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE();
1 1
SET timestamp=DEFAULT;
drop table t1; drop table t1;
create table t1 (f1 date); create table t1 (f1 date);
insert into t1 values('01-01-01'),('01-01-02'),('01-01-03'); insert into t1 values('01-01-01'),('01-01-02'),('01-01-03');
......
...@@ -369,12 +369,18 @@ select @a; ...@@ -369,12 +369,18 @@ select @a;
--echo # --echo #
--echo # BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed --echo # BUG LP:1008487 virtual bool Item_cache::is_expensive(): Assertion `example' failed
--echo # --echo #
# Set timestamp to make sure DATETIME->DATE truncation happens.
# Otherwise, the warning would disappear at '00:00:00' sharp,
# and a different execution plan would be chosen.
SET TIMESTAMP=UNIX_TIMESTAMP('2012-01-01 00:00:01');
create table t1(a date,key(a)); create table t1(a date,key(a));
insert into t1 values ('2012-01-01'),('2012-02-02'); insert into t1 values ('2012-01-01'),('2012-02-02');
explain explain
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1; select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1; select 1 from t1 as t1_0 inner join t1 as t2 on (t1_0.a <=> now()) join t1 on 1;
drop table t1; drop table t1;
SET TIMESTAMP=DEFAULT;
--echo # --echo #
--echo # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null --echo # MDEV-9521 Least function returns 0000-00-00 for null date columns instead of null
......
...@@ -32,10 +32,12 @@ drop table t1; ...@@ -32,10 +32,12 @@ drop table t1;
# Test insert of now() and curtime() # Test insert of now() and curtime()
# #
SET TIMESTAMP=UNIX_TIMESTAMP('2020-08-11 00:00:01');
CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime); CREATE TABLE t1 (a timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, b date, c time, d datetime);
insert into t1 (b,c,d) values(now(),curtime(),now()); insert into t1 (b,c,d) values(now(),curtime(),now());
select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1; select date_format(a,"%Y-%m-%d")=b,right(a+0,6)=c+0,a=d+0 from t1;
drop table t1; drop table t1;
SET TIMESTAMP=DEFAULT;
# #
# Test of datetime and not null # Test of datetime and not null
...@@ -201,6 +203,7 @@ drop table t1; ...@@ -201,6 +203,7 @@ drop table t1;
# #
# Bug#16377: Wrong DATE/DATETIME comparison in BETWEEN function. # Bug#16377: Wrong DATE/DATETIME comparison in BETWEEN function.
# #
create table t1 (f1 date, f2 datetime, f3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); create table t1 (f1 date, f2 datetime, f3 timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
insert into t1 values('2001-01-01','2001-01-01 01:01:01','2001-01-01 01:01:01'); insert into t1 values('2001-01-01','2001-01-01 01:01:01','2001-01-01 01:01:01');
insert into t1 values('2001-02-05','2001-02-05 00:00:00','2001-02-05 01:01:01'); insert into t1 values('2001-02-05','2001-02-05 00:00:00','2001-02-05 01:01:01');
...@@ -214,7 +217,9 @@ select f1, f2, f3 from t1 where cast(f1 as datetime) between f2 and ...@@ -214,7 +217,9 @@ select f1, f2, f3 from t1 where cast(f1 as datetime) between f2 and
select f2 from t1 where '2001-04-10 12:34:56' between f2 and '01-05-01'; select f2 from t1 where '2001-04-10 12:34:56' between f2 and '01-05-01';
select f2, f3 from t1 where '01-03-10' between f2 and f3; select f2, f3 from t1 where '01-03-10' between f2 and f3;
select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15"; select f2 from t1 where DATE(f2) between "2001-4-15" AND "01-4-15";
SET timestamp=UNIX_TIMESTAMP('2001-01-01 00:00:01');
SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE(); SELECT 1 from dual where NOW() BETWEEN CURRENT_DATE() - INTERVAL 1 DAY AND CURRENT_DATE();
SET timestamp=DEFAULT;
drop table t1; drop table t1;
# #
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment