port of fixes for bug-20577 and 46362 for TO_SECONDS
This commit is contained in:
parent
93e02adcfa
commit
ec7c4fb442
@ -656,6 +656,335 @@ EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01
|
|||||||
id select_type table partitions type possible_keys key key_len ref rows Extra
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
1 SIMPLE t1 p0001-01-01,pNULL,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
1 SIMPLE t1 p0001-01-01,pNULL,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
# TO_SECONDS, test of LIST and index
|
||||||
|
CREATE TABLE t1 (a DATE, KEY(a))
|
||||||
|
PARTITION BY LIST (TO_SECONDS(a))
|
||||||
|
(PARTITION `p0001-01-01` VALUES IN (TO_SECONDS('0001-01-01')),
|
||||||
|
PARTITION `p2001-01-01` VALUES IN (TO_SECONDS('2001-01-01')),
|
||||||
|
PARTITION `pNULL` VALUES IN (NULL),
|
||||||
|
PARTITION `p0000-01-02` VALUES IN (TO_SECONDS('0000-01-02')),
|
||||||
|
PARTITION `p1001-01-01` VALUES IN (TO_SECONDS('1001-01-01')));
|
||||||
|
INSERT INTO t1 VALUES ('0000-00-00'), ('0000-01-02'), ('0001-01-01'),
|
||||||
|
('1001-00-00'), ('1001-01-01'), ('1002-00-00'), ('2001-01-01');
|
||||||
|
SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
|
a
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||||
|
a
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a = '1001-01-01';
|
||||||
|
a
|
||||||
|
1001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||||
|
a
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||||
|
a
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||||
|
a
|
||||||
|
1001-00-00
|
||||||
|
# Disabling warnings for the invalid date
|
||||||
|
SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
|
a
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a > '1999-02-31';
|
||||||
|
a
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a = '1999-02-31';
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||||
|
a
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01';
|
||||||
|
a
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 range a a 4 NULL 3 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL range a a 4 NULL 3 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p1001-01-01 system a NULL NULL NULL 1
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 range a a 4 NULL 3 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 range a a 4 NULL 3 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 pNULL ref a a 4 const 1 Using where; Using index
|
||||||
|
# Disabling warnings for the invalid date
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL range a a 4 NULL 2 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL range a a 4 NULL 2 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 pNULL ref a a 4 const 1 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 5 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 range a a 4 NULL 4 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 pNULL,p1001-01-01 range a a 4 NULL 2 Using where; Using index
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p1001-01-01 range a a 4 NULL 3 Using where; Using index
|
||||||
|
# test without index
|
||||||
|
ALTER TABLE t1 DROP KEY a;
|
||||||
|
SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
|
a
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||||
|
a
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a = '1001-01-01';
|
||||||
|
a
|
||||||
|
1001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||||
|
a
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||||
|
a
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||||
|
a
|
||||||
|
1001-00-00
|
||||||
|
# Disabling warnings for the invalid date
|
||||||
|
SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
|
a
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a > '1999-02-31';
|
||||||
|
a
|
||||||
|
2001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a = '1999-02-31';
|
||||||
|
a
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||||
|
a
|
||||||
|
0000-00-00
|
||||||
|
0000-01-02
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||||
|
a
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
1002-00-00
|
||||||
|
SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01';
|
||||||
|
a
|
||||||
|
0001-01-01
|
||||||
|
1001-00-00
|
||||||
|
1001-01-01
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p1001-01-01 system NULL NULL NULL NULL 1
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1001-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 pNULL ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
# Disabling warnings for the invalid date
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a < '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a <= '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a >= '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a > '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p2001-01-01,pNULL ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a = '1999-02-31';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 pNULL ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1002-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0000-00-00' AND '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p0000-01-02,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-02' AND '1002-00-00';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 pNULL,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
EXPLAIN PARTITIONS SELECT * FROM t1 WHERE a BETWEEN '0001-01-01' AND '1001-01-01';
|
||||||
|
id select_type table partitions type possible_keys key key_len ref rows Extra
|
||||||
|
1 SIMPLE t1 p0001-01-01,pNULL,p1001-01-01 ALL NULL NULL NULL NULL 7 Using where
|
||||||
|
DROP TABLE t1;
|
||||||
# Test with DATETIME column NOT NULL
|
# Test with DATETIME column NOT NULL
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
a int(10) unsigned NOT NULL,
|
a int(10) unsigned NOT NULL,
|
||||||
|
@ -51,6 +51,26 @@ INSERT INTO t1 VALUES ('0000-00-00'), ('0000-01-02'), ('0001-01-01'),
|
|||||||
ALTER TABLE t1 DROP KEY a;
|
ALTER TABLE t1 DROP KEY a;
|
||||||
--source include/partition_date_range.inc
|
--source include/partition_date_range.inc
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
--echo # TO_SECONDS, test of LIST and index
|
||||||
|
CREATE TABLE t1 (a DATE, KEY(a))
|
||||||
|
PARTITION BY LIST (TO_SECONDS(a))
|
||||||
|
(PARTITION `p0001-01-01` VALUES IN (TO_SECONDS('0001-01-01')),
|
||||||
|
PARTITION `p2001-01-01` VALUES IN (TO_SECONDS('2001-01-01')),
|
||||||
|
PARTITION `pNULL` VALUES IN (NULL),
|
||||||
|
PARTITION `p0000-01-02` VALUES IN (TO_SECONDS('0000-01-02')),
|
||||||
|
PARTITION `p1001-01-01` VALUES IN (TO_SECONDS('1001-01-01')));
|
||||||
|
if ($verify_without_partitions)
|
||||||
|
{
|
||||||
|
ALTER TABLE t1 REMOVE PARTITIONING;
|
||||||
|
}
|
||||||
|
INSERT INTO t1 VALUES ('0000-00-00'), ('0000-01-02'), ('0001-01-01'),
|
||||||
|
('1001-00-00'), ('1001-01-01'), ('1002-00-00'), ('2001-01-01');
|
||||||
|
--source include/partition_date_range.inc
|
||||||
|
--echo # test without index
|
||||||
|
ALTER TABLE t1 DROP KEY a;
|
||||||
|
--source include/partition_date_range.inc
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
|
# Bug#46362: Endpoint should be set to false for TO_DAYS(DATE)
|
||||||
|
@ -944,8 +944,29 @@ longlong Item_func_to_days::val_int()
|
|||||||
longlong Item_func_to_seconds::val_int_endpoint(bool left_endp,
|
longlong Item_func_to_seconds::val_int_endpoint(bool left_endp,
|
||||||
bool *incl_endp)
|
bool *incl_endp)
|
||||||
{
|
{
|
||||||
longlong res= val_int();
|
DBUG_ASSERT(fixed == 1);
|
||||||
return null_value ? LONGLONG_MIN : res;
|
MYSQL_TIME ltime;
|
||||||
|
longlong seconds;
|
||||||
|
longlong days;
|
||||||
|
int dummy; /* unused */
|
||||||
|
if (get_arg0_date(<ime, TIME_FUZZY_DATE))
|
||||||
|
{
|
||||||
|
/* got NULL, leave the incl_endp intact */
|
||||||
|
return LONGLONG_MIN;
|
||||||
|
}
|
||||||
|
seconds= ltime.hour * 3600L + ltime.minute * 60 + ltime.second;
|
||||||
|
seconds= ltime.neg ? -seconds : seconds;
|
||||||
|
days= (longlong) calc_daynr(ltime.year, ltime.month, ltime.day);
|
||||||
|
seconds+= days * 24L * 3600L;
|
||||||
|
/* Set to NULL if invalid date, but keep the value */
|
||||||
|
null_value= check_date(<ime,
|
||||||
|
(ltime.year || ltime.month || ltime.day),
|
||||||
|
(TIME_NO_ZERO_IN_DATE | TIME_NO_ZERO_DATE),
|
||||||
|
&dummy);
|
||||||
|
/*
|
||||||
|
Even if the evaluation return NULL, seconds is useful for pruning
|
||||||
|
*/
|
||||||
|
return seconds;
|
||||||
}
|
}
|
||||||
|
|
||||||
longlong Item_func_to_seconds::val_int()
|
longlong Item_func_to_seconds::val_int()
|
||||||
@ -959,7 +980,7 @@ longlong Item_func_to_seconds::val_int()
|
|||||||
seconds= ltime.hour * 3600L + ltime.minute * 60 + ltime.second;
|
seconds= ltime.hour * 3600L + ltime.minute * 60 + ltime.second;
|
||||||
seconds=ltime.neg ? -seconds : seconds;
|
seconds=ltime.neg ? -seconds : seconds;
|
||||||
days= (longlong) calc_daynr(ltime.year, ltime.month, ltime.day);
|
days= (longlong) calc_daynr(ltime.year, ltime.month, ltime.day);
|
||||||
return (seconds + days * (24L * 3600L));
|
return seconds + days * 24L * 3600L;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -992,10 +1013,9 @@ enum_monotonicity_info Item_func_to_seconds::get_monotonicity_info() const
|
|||||||
{
|
{
|
||||||
if (args[0]->type() == Item::FIELD_ITEM)
|
if (args[0]->type() == Item::FIELD_ITEM)
|
||||||
{
|
{
|
||||||
if (args[0]->field_type() == MYSQL_TYPE_DATE)
|
if (args[0]->field_type() == MYSQL_TYPE_DATE ||
|
||||||
return MONOTONIC_STRICT_INCREASING;
|
args[0]->field_type() == MYSQL_TYPE_DATETIME)
|
||||||
if (args[0]->field_type() == MYSQL_TYPE_DATETIME)
|
return MONOTONIC_STRICT_INCREASING_NOT_NULL;
|
||||||
return MONOTONIC_INCREASING;
|
|
||||||
}
|
}
|
||||||
return NON_MONOTONIC;
|
return NON_MONOTONIC;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user