From: Mattias Jonsson Date: March 16 2011 10:59am Subject: bzr commit into mysql-5.1 branch (mattias.jonsson:3576) Bug#28928 Bug#11746819 List-Archive: http://lists.mysql.com/commits/133121 X-Bug: 28928,11746819 Message-Id: <201103161059.p2GAxGhV029764@acsmt358.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5113266381447832839==" --===============5113266381447832839== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///Users/mattiasj/mysql-bzr/b28928-51/ based on revid:dmitry.shulga@stripped 3576 Mattias Jonsson 2011-03-16 Bug#11746819: Bug#28928: UNIX_TIMESTAMP() should be considered unary monotonic by partition pruning Made UNIX_TIMESTAMP MONOTONIC_INCREASING when it have TIMESTAMP argument (only). modified: mysql-test/r/partition.result mysql-test/r/partition_datatype.result mysql-test/t/partition.test mysql-test/t/partition_datatype.test sql/item_timefunc.cc sql/item_timefunc.h === modified file 'mysql-test/r/partition.result' --- a/mysql-test/r/partition.result 2010-12-22 09:50:36 +0000 +++ b/mysql-test/r/partition.result 2011-03-16 10:59:01 +0000 @@ -76,6 +76,15 @@ a b 2007-07-30 17:35:48 p1 2009-07-14 17:35:55 pmax 2009-09-21 17:31:42 pmax +SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +a b +2007-07-30 17:35:48 p1 +EXPLAIN PARTITIONS SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t1 p1 system PRIMARY NULL NULL NULL 1 +EXPLAIN PARTITIONS SELECT * FROM t1 where a = '2007-07-30 17:35:48'; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t1 p1 system PRIMARY NULL NULL NULL 1 ALTER TABLE t1 REORGANIZE PARTITION pmax INTO ( PARTITION p3 VALUES LESS THAN (1247688000), PARTITION pmax VALUES LESS THAN MAXVALUE); @@ -84,6 +93,15 @@ a b 2007-07-30 17:35:48 p1 2009-07-14 17:35:55 pmax 2009-09-21 17:31:42 pmax +SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +a b +2007-07-30 17:35:48 p1 +EXPLAIN PARTITIONS SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t1 p1 system PRIMARY NULL NULL NULL 1 +EXPLAIN PARTITIONS SELECT * FROM t1 where a = '2007-07-30 17:35:48'; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t1 p1 system PRIMARY NULL NULL NULL 1 SHOW CREATE TABLE t1; Table Create Table t1 CREATE TABLE `t1` ( === modified file 'mysql-test/r/partition_datatype.result' --- a/mysql-test/r/partition_datatype.result 2008-12-09 11:16:39 +0000 +++ b/mysql-test/r/partition_datatype.result 2011-03-16 10:59:01 +0000 @@ -336,3 +336,1003 @@ select hex(a) from t1 where a = 7; hex(a) 7 drop table t1; +# +# Bug#28928: UNIX_TIMESTAMP() should be considered unary monotonic +# by partition pruning +SET @old_time_zone= @@session.time_zone; +SET @@session.time_zone = 'UTC'; +# Using MyISAM to get stable values on TABLE_ROWS in I_S.PARTITIONS +CREATE TABLE t1 +(a TIMESTAMP NULL, +tz varchar(16)) +ENGINE = MyISAM; +CREATE TABLE t2 LIKE t1; +ALTER TABLE t2 PARTITION BY RANGE (UNIX_TIMESTAMP(a)) +(PARTITION `p0` VALUES LESS THAN (0), +PARTITION `p-2000` VALUES LESS THAN (UNIX_TIMESTAMP('2000-01-01')), +PARTITION `p-2011-MSK` VALUES LESS THAN (UNIX_TIMESTAMP('2011-03-26 23:00:00')), +PARTITION `p-2011-MSD-1` VALUES LESS THAN (UNIX_TIMESTAMP('2011-10-29 22:00:00')), +PARTITION `p-2011-MSD-2` VALUES LESS THAN (UNIX_TIMESTAMP('2011-10-29 23:00:00')), +PARTITION `p-2012-MSK-1` VALUES LESS THAN (UNIX_TIMESTAMP('2011-10-30 00:00:00')), +PARTITION `p-2012-MSK-2` VALUES LESS THAN (UNIX_TIMESTAMP('2012-03-24 23:00:00')), +PARTITION `pEnd` VALUES LESS THAN (UNIX_TIMESTAMP('2038-01-19 03:14:07')), +PARTITION `pMax` VALUES LESS THAN MAXVALUE); +# Test 'odd' values +INSERT INTO t1 VALUES (NULL, 'UTC'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00', 'UTC'); +# Test invalid values +INSERT INTO t1 VALUES ('1901-01-01 00:00:00', 'UTCI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES ('1969-12-31 23:59:59', 'UTCI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES ('2038-01-19 03:14:08', 'UTCI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES ('1970-01-01 00:00:00', 'UTCI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +# Test start range +INSERT INTO t1 VALUES ('1970-01-01 00:00:01', 'UTC'); +INSERT INTO t1 VALUES ('1974-02-05 21:28:16', 'UTC'); +# Test end range +INSERT INTO t1 VALUES ('2038-01-19 03:14:06', 'UTC'); +INSERT INTO t1 VALUES ('2038-01-19 03:14:07', 'UTC'); +# Test Daylight saving shift +INSERT INTO t1 VALUES ('2011-03-26 22:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-03-26 23:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-03-26 23:00:01', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 21:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 22:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 22:00:01', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 22:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 23:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 23:00:01', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 23:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-30 00:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-30 00:00:01', 'UTC'); +SET @@session.time_zone = 'Europe/Moscow'; +# Test 'odd' values +INSERT INTO t1 VALUES (NULL, 'Moscow'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00', 'Moscow'); +# Test invalid values +INSERT INTO t1 VALUES ('0000-00-00 03:00:00', 'MoscowI'); +Warnings: +Warning 1265 Data truncated for column 'a' at row 1 +INSERT INTO t1 VALUES ('1901-01-01 00:00:00', 'MoscowI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES ('1969-12-31 23:59:59', 'MoscowI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES ('1970-01-01 02:29:29', 'MoscowI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES ('2038-01-19 06:14:08', 'MoscowI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +INSERT INTO t1 VALUES ('1970-01-01 03:00:00', 'MoscowI'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +# values truncated to 03:00:00 due to daylight saving shift +INSERT INTO t1 VALUES ('2011-03-27 02:00:00', 'MoscowI'); +Warnings: +Warning 1299 Invalid TIMESTAMP value in column 'a' at row 1 +INSERT INTO t1 VALUES ('2011-03-27 02:00:01', 'MoscowI'); +Warnings: +Warning 1299 Invalid TIMESTAMP value in column 'a' at row 1 +INSERT INTO t1 VALUES ('2011-03-27 02:59:59', 'MoscowI'); +Warnings: +Warning 1299 Invalid TIMESTAMP value in column 'a' at row 1 +# Test start range +INSERT INTO t1 VALUES ('1970-01-01 03:00:01', 'Moscow'); +INSERT INTO t1 VALUES ('1974-02-05 21:28:16', 'Moscow'); +# Test end range +INSERT INTO t1 VALUES ('2038-01-19 06:14:06', 'Moscow'); +INSERT INTO t1 VALUES ('2038-01-19 06:14:07', 'Moscow'); +# Test Daylight saving shift +INSERT INTO t1 VALUES ('2011-03-27 01:59:59', 'Moscow'); +INSERT INTO t1 VALUES ('2011-03-27 03:00:00', 'Moscow'); +INSERT INTO t1 VALUES ('2011-03-27 03:00:01', 'Moscow'); +INSERT INTO t1 VALUES ('2011-10-30 01:59:59', 'Moscow'); +# All values between 02:00 and 02:59:59 will be interpretated as DST +INSERT INTO t1 VALUES ('2011-10-30 02:00:00', 'MoscowD'); +INSERT INTO t1 VALUES ('2011-10-30 02:00:01', 'MoscowD'); +INSERT INTO t1 VALUES ('2011-10-30 02:59:59', 'MoscowD'); +INSERT INTO t1 VALUES ('2011-10-30 03:00:00', 'Moscow'); +INSERT INTO t1 VALUES ('2011-10-30 03:00:01', 'Moscow'); +SET @@session.time_zone = 'UTC'; +INSERT INTO t2 SELECT * FROM t1; +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +PARTITION_NAME TABLE_ROWS +p0 2 +p-2000 16 +p-2011-MSK 2 +p-2011-MSD-1 9 +p-2011-MSD-2 6 +p-2012-MSK-1 3 +p-2012-MSK-2 4 +pEnd 2 +pMax 2 +SELECT * FROM t1 ORDER BY a, tz; +a tz +NULL Moscow +NULL UTC +0000-00-00 00:00:00 Moscow +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 UTC +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +1970-01-01 00:00:01 Moscow +1970-01-01 00:00:01 UTC +1974-02-05 18:28:16 Moscow +1974-02-05 21:28:16 UTC +2011-03-26 22:59:59 Moscow +2011-03-26 22:59:59 UTC +2011-03-26 23:00:00 Moscow +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 UTC +2011-03-26 23:00:01 Moscow +2011-03-26 23:00:01 UTC +2011-10-29 21:59:59 Moscow +2011-10-29 21:59:59 UTC +2011-10-29 22:00:00 MoscowD +2011-10-29 22:00:00 UTC +2011-10-29 22:00:01 MoscowD +2011-10-29 22:00:01 UTC +2011-10-29 22:59:59 MoscowD +2011-10-29 22:59:59 UTC +2011-10-29 23:00:00 UTC +2011-10-29 23:00:01 UTC +2011-10-29 23:59:59 UTC +2011-10-30 00:00:00 Moscow +2011-10-30 00:00:00 UTC +2011-10-30 00:00:01 Moscow +2011-10-30 00:00:01 UTC +2038-01-19 03:14:06 Moscow +2038-01-19 03:14:06 UTC +2038-01-19 03:14:07 Moscow +2038-01-19 03:14:07 UTC +SELECT * FROM t2 ORDER BY a, tz; +a tz +NULL Moscow +NULL UTC +0000-00-00 00:00:00 Moscow +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 UTC +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +1970-01-01 00:00:01 Moscow +1970-01-01 00:00:01 UTC +1974-02-05 18:28:16 Moscow +1974-02-05 21:28:16 UTC +2011-03-26 22:59:59 Moscow +2011-03-26 22:59:59 UTC +2011-03-26 23:00:00 Moscow +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 UTC +2011-03-26 23:00:01 Moscow +2011-03-26 23:00:01 UTC +2011-10-29 21:59:59 Moscow +2011-10-29 21:59:59 UTC +2011-10-29 22:00:00 MoscowD +2011-10-29 22:00:00 UTC +2011-10-29 22:00:01 MoscowD +2011-10-29 22:00:01 UTC +2011-10-29 22:59:59 MoscowD +2011-10-29 22:59:59 UTC +2011-10-29 23:00:00 UTC +2011-10-29 23:00:01 UTC +2011-10-29 23:59:59 UTC +2011-10-30 00:00:00 Moscow +2011-10-30 00:00:00 UTC +2011-10-30 00:00:01 Moscow +2011-10-30 00:00:01 UTC +2038-01-19 03:14:06 Moscow +2038-01-19 03:14:06 UTC +2038-01-19 03:14:07 Moscow +2038-01-19 03:14:07 UTC +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 23:00:00' ORDER BY a, tz; +a tz +2011-03-26 22:59:59 Moscow +2011-03-26 22:59:59 UTC +2011-03-26 23:00:00 Moscow +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 23:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSK,p-2011-MSD-1 ALL NULL NULL NULL NULL 11 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 22:59:59' ORDER BY a, tz; +a tz +2011-03-26 22:59:59 Moscow +2011-03-26 22:59:59 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 22:59:59' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSK ALL NULL NULL NULL NULL 2 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 22:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; +a tz +2011-03-26 22:59:59 Moscow +2011-03-26 22:59:59 UTC +2011-03-26 23:00:00 Moscow +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 UTC +2011-03-26 23:00:01 Moscow +2011-03-26 23:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 22:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSK,p-2011-MSD-1 ALL NULL NULL NULL NULL 11 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 23:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; +a tz +2011-03-26 23:00:00 Moscow +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 UTC +2011-03-26 23:00:01 Moscow +2011-03-26 23:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 23:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1 ALL NULL NULL NULL NULL 9 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 23:00:00' ORDER BY a, tz; +a tz +2011-10-29 21:59:59 Moscow +2011-10-29 21:59:59 UTC +2011-10-29 22:00:00 MoscowD +2011-10-29 22:00:00 UTC +2011-10-29 22:00:01 MoscowD +2011-10-29 22:00:01 UTC +2011-10-29 22:59:59 MoscowD +2011-10-29 22:59:59 UTC +2011-10-29 23:00:00 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 23:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1,p-2011-MSD-2,p-2012-MSK-1 ALL NULL NULL NULL NULL 18 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 22:59:59' ORDER BY a, tz; +a tz +2011-10-29 21:59:59 Moscow +2011-10-29 21:59:59 UTC +2011-10-29 22:00:00 MoscowD +2011-10-29 22:00:00 UTC +2011-10-29 22:00:01 MoscowD +2011-10-29 22:00:01 UTC +2011-10-29 22:59:59 MoscowD +2011-10-29 22:59:59 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 22:59:59' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1,p-2011-MSD-2 ALL NULL NULL NULL NULL 15 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 22:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +a tz +2011-10-29 22:59:59 MoscowD +2011-10-29 22:59:59 UTC +2011-10-29 23:00:00 UTC +2011-10-29 23:00:01 UTC +2011-10-29 23:59:59 UTC +2011-10-30 00:00:00 Moscow +2011-10-30 00:00:00 UTC +2011-10-30 00:00:01 Moscow +2011-10-30 00:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 22:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-2,p-2012-MSK-1,p-2012-MSK-2 ALL NULL NULL NULL NULL 13 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 23:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +a tz +2011-10-29 23:00:00 UTC +2011-10-29 23:00:01 UTC +2011-10-29 23:59:59 UTC +2011-10-30 00:00:00 Moscow +2011-10-30 00:00:00 UTC +2011-10-30 00:00:01 Moscow +2011-10-30 00:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 23:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2012-MSK-1,p-2012-MSK-2 ALL NULL NULL NULL NULL 7 Using where; Using filesort +# Test end range changes +DELETE FROM t2 WHERE a = 0; +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'UTC'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +SELECT COUNT(*) FROM t2; +COUNT(*) +35 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +1 +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +a tz +NULL Moscow +NULL UTC +0000-00-00 00:00:00 UTC +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +a tz +2038-01-19 03:14:07 Moscow +2038-01-19 03:14:07 UTC +2038-01-19 03:14:06 Moscow +UPDATE t2 SET a = TIMESTAMPADD(SECOND, 1, a); +Warnings: +Warning 1264 Out of range value for column 'a' at row 34 +Warning 1264 Out of range value for column 'a' at row 35 +SELECT MIN(a), MAX(a) FROM t2; +MIN(a) MAX(a) +0000-00-00 00:00:00 2038-01-19 03:14:07 +SELECT COUNT(*) FROM t2; +COUNT(*) +35 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +2 +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +PARTITION_NAME TABLE_ROWS +p0 3 +p-2000 6 +p-2011-MSK 0 +p-2011-MSD-1 9 +p-2011-MSD-2 6 +p-2012-MSK-1 4 +p-2012-MSK-2 5 +pEnd 0 +pMax 2 +SELECT * FROM t2 ORDER BY a, tz; +a tz +NULL Moscow +NULL UTC +NULL UTC +0000-00-00 00:00:00 Moscow +0000-00-00 00:00:00 UTC +1970-01-01 00:00:02 Moscow +1970-01-01 00:00:02 UTC +1974-02-05 18:28:17 Moscow +1974-02-05 21:28:17 UTC +2011-03-26 23:00:00 Moscow +2011-03-26 23:00:00 UTC +2011-03-26 23:00:01 Moscow +2011-03-26 23:00:01 MoscowI +2011-03-26 23:00:01 MoscowI +2011-03-26 23:00:01 MoscowI +2011-03-26 23:00:01 UTC +2011-03-26 23:00:02 Moscow +2011-03-26 23:00:02 UTC +2011-10-29 22:00:00 Moscow +2011-10-29 22:00:00 UTC +2011-10-29 22:00:01 MoscowD +2011-10-29 22:00:01 UTC +2011-10-29 22:00:02 MoscowD +2011-10-29 22:00:02 UTC +2011-10-29 23:00:00 MoscowD +2011-10-29 23:00:00 UTC +2011-10-29 23:00:01 UTC +2011-10-29 23:00:02 UTC +2011-10-30 00:00:00 UTC +2011-10-30 00:00:01 Moscow +2011-10-30 00:00:01 UTC +2011-10-30 00:00:02 Moscow +2011-10-30 00:00:02 UTC +2038-01-19 03:14:07 Moscow +2038-01-19 03:14:07 UTC +# Test start range changes +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'UTC'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +SELECT COUNT(*) FROM t2; +COUNT(*) +36 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +3 +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +a tz +NULL Moscow +NULL UTC +NULL UTC +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +a tz +2038-01-19 03:14:07 Moscow +2038-01-19 03:14:07 UTC +2011-10-30 00:00:02 Moscow +UPDATE t2 SET a = TIMESTAMPADD(SECOND, -1, a); +SELECT MIN(a), MAX(a) FROM t2; +MIN(a) MAX(a) +1970-01-01 00:00:01 2038-01-19 03:14:06 +SELECT COUNT(*) FROM t2; +COUNT(*) +36 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +0 +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +PARTITION_NAME TABLE_ROWS +p0 6 +p-2000 4 +p-2011-MSK 2 +p-2011-MSD-1 9 +p-2011-MSD-2 6 +p-2012-MSK-1 3 +p-2012-MSK-2 4 +pEnd 2 +pMax 0 +SELECT * FROM t2 ORDER BY a, tz; +a tz +NULL Moscow +NULL Moscow +NULL UTC +NULL UTC +NULL UTC +NULL UTC +1970-01-01 00:00:01 Moscow +1970-01-01 00:00:01 UTC +1974-02-05 18:28:16 Moscow +1974-02-05 21:28:16 UTC +2011-03-26 22:59:59 Moscow +2011-03-26 22:59:59 UTC +2011-03-26 23:00:00 Moscow +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 MoscowI +2011-03-26 23:00:00 UTC +2011-03-26 23:00:01 Moscow +2011-03-26 23:00:01 UTC +2011-10-29 21:59:59 Moscow +2011-10-29 21:59:59 UTC +2011-10-29 22:00:00 MoscowD +2011-10-29 22:00:00 UTC +2011-10-29 22:00:01 MoscowD +2011-10-29 22:00:01 UTC +2011-10-29 22:59:59 MoscowD +2011-10-29 22:59:59 UTC +2011-10-29 23:00:00 UTC +2011-10-29 23:00:01 UTC +2011-10-29 23:59:59 UTC +2011-10-30 00:00:00 Moscow +2011-10-30 00:00:00 UTC +2011-10-30 00:00:01 Moscow +2011-10-30 00:00:01 UTC +2038-01-19 03:14:06 Moscow +2038-01-19 03:14:06 UTC +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` timestamp NULL DEFAULT NULL, + `tz` varchar(16) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (UNIX_TIMESTAMP(a)) +(PARTITION p0 VALUES LESS THAN (0) ENGINE = MyISAM, + PARTITION `p-2000` VALUES LESS THAN (946684800) ENGINE = MyISAM, + PARTITION `p-2011-MSK` VALUES LESS THAN (1301180400) ENGINE = MyISAM, + PARTITION `p-2011-MSD-1` VALUES LESS THAN (1319925600) ENGINE = MyISAM, + PARTITION `p-2011-MSD-2` VALUES LESS THAN (1319929200) ENGINE = MyISAM, + PARTITION `p-2012-MSK-1` VALUES LESS THAN (1319932800) ENGINE = MyISAM, + PARTITION `p-2012-MSK-2` VALUES LESS THAN (1332630000) ENGINE = MyISAM, + PARTITION pEnd VALUES LESS THAN (2147483647) ENGINE = MyISAM, + PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */ +TRUNCATE TABLE t2; +SET @@session.time_zone = 'Europe/Moscow'; +INSERT INTO t2 SELECT * FROM t1; +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +PARTITION_NAME TABLE_ROWS +p0 2 +p-2000 16 +p-2011-MSK 2 +p-2011-MSD-1 9 +p-2011-MSD-2 6 +p-2012-MSK-1 3 +p-2012-MSK-2 4 +pEnd 2 +pMax 2 +SELECT * FROM t1 ORDER BY a, tz; +a tz +NULL Moscow +NULL UTC +0000-00-00 00:00:00 Moscow +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 UTC +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +1970-01-01 03:00:01 Moscow +1970-01-01 03:00:01 UTC +1974-02-05 21:28:16 Moscow +1974-02-06 00:28:16 UTC +2011-03-27 01:59:59 Moscow +2011-03-27 01:59:59 UTC +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 UTC +2011-03-27 03:00:01 Moscow +2011-03-27 03:00:01 UTC +2011-10-30 01:59:59 Moscow +2011-10-30 01:59:59 UTC +2011-10-30 02:00:00 MoscowD +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 MoscowD +2011-10-30 02:59:59 UTC +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 UTC +2011-10-30 03:00:00 Moscow +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +2038-01-19 06:14:06 Moscow +2038-01-19 06:14:06 UTC +2038-01-19 06:14:07 Moscow +2038-01-19 06:14:07 UTC +SELECT * FROM t2 ORDER BY a, tz; +a tz +NULL Moscow +NULL UTC +0000-00-00 00:00:00 Moscow +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 MoscowI +0000-00-00 00:00:00 UTC +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +0000-00-00 00:00:00 UTCI +1970-01-01 03:00:01 Moscow +1970-01-01 03:00:01 UTC +1974-02-05 21:28:16 Moscow +1974-02-06 00:28:16 UTC +2011-03-27 01:59:59 Moscow +2011-03-27 01:59:59 UTC +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 UTC +2011-03-27 03:00:01 Moscow +2011-03-27 03:00:01 UTC +2011-10-30 01:59:59 Moscow +2011-10-30 01:59:59 UTC +2011-10-30 02:00:00 MoscowD +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 MoscowD +2011-10-30 02:59:59 UTC +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 UTC +2011-10-30 03:00:00 Moscow +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +2038-01-19 06:14:06 Moscow +2038-01-19 06:14:06 UTC +2038-01-19 06:14:07 Moscow +2038-01-19 06:14:07 UTC +# Testing the leap from 01:59:59 to 03:00:00 +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 03:00:00' ORDER BY a, tz; +a tz +2011-03-27 01:59:59 Moscow +2011-03-27 01:59:59 UTC +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 03:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSK,p-2011-MSD-1 ALL NULL NULL NULL NULL 11 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 01:59:59' ORDER BY a, tz; +a tz +2011-03-27 01:59:59 Moscow +2011-03-27 01:59:59 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 01:59:59' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSK ALL NULL NULL NULL NULL 2 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 01:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; +a tz +2011-03-27 01:59:59 Moscow +2011-03-27 01:59:59 UTC +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 UTC +2011-03-27 03:00:01 Moscow +2011-03-27 03:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 01:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSK,p-2011-MSD-1 ALL NULL NULL NULL NULL 11 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 03:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; +a tz +2011-03-27 01:59:59 Moscow +2011-03-27 01:59:59 UTC +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 UTC +2011-03-27 03:00:01 Moscow +2011-03-27 03:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 03:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSK,p-2011-MSD-1 ALL NULL NULL NULL NULL 11 Using where; Using filesort +# Testing the leap from 02:59:59 to 02:00:00 +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:00:00' ORDER BY a, tz; +a tz +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1 ALL NULL NULL NULL NULL 9 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:59:59' ORDER BY a, tz; +a tz +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:59:59' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1 ALL NULL NULL NULL NULL 9 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 03:00:00' ORDER BY a, tz; +a tz +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 03:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1 ALL NULL NULL NULL NULL 9 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 01:59:59' ORDER BY a, tz; +a tz +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 01:59:59' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1 ALL NULL NULL NULL NULL 9 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +a tz +2011-10-30 01:59:59 Moscow +2011-10-30 01:59:59 UTC +2011-10-30 02:00:00 MoscowD +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 MoscowD +2011-10-30 02:59:59 UTC +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 UTC +2011-10-30 03:00:00 Moscow +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1,p-2011-MSD-2,p-2012-MSK-1,p-2012-MSK-2 ALL NULL NULL NULL NULL 22 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +a tz +2011-10-30 01:59:59 Moscow +2011-10-30 01:59:59 UTC +2011-10-30 02:00:00 MoscowD +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 MoscowD +2011-10-30 02:59:59 UTC +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 UTC +2011-10-30 03:00:00 Moscow +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1,p-2011-MSD-2,p-2012-MSK-1,p-2012-MSK-2 ALL NULL NULL NULL NULL 22 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 03:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +a tz +2011-10-30 01:59:59 Moscow +2011-10-30 01:59:59 UTC +2011-10-30 02:00:00 MoscowD +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 MoscowD +2011-10-30 02:59:59 UTC +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 UTC +2011-10-30 03:00:00 Moscow +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 03:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1,p-2011-MSD-2,p-2012-MSK-1,p-2012-MSK-2 ALL NULL NULL NULL NULL 22 Using where; Using filesort +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 01:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +a tz +2011-10-30 01:59:59 Moscow +2011-10-30 01:59:59 UTC +2011-10-30 02:00:00 MoscowD +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 MoscowD +2011-10-30 02:59:59 UTC +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 UTC +2011-10-30 03:00:00 Moscow +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 01:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +id select_type table partitions type possible_keys key key_len ref rows Extra +1 SIMPLE t2 p-2011-MSD-1,p-2011-MSD-2,p-2012-MSK-1,p-2012-MSK-2 ALL NULL NULL NULL NULL 22 Using where; Using filesort +# Test end range changes +DELETE FROM t2 WHERE a = 0; +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'Moscow'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +SELECT COUNT(*) FROM t2; +COUNT(*) +35 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +1 +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +a tz +NULL Moscow +NULL UTC +0000-00-00 00:00:00 Moscow +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +a tz +2038-01-19 06:14:07 Moscow +2038-01-19 06:14:07 UTC +2038-01-19 06:14:06 Moscow +UPDATE t2 SET a = TIMESTAMPADD(SECOND, 1, a); +Warnings: +Warning 1299 Invalid TIMESTAMP value in column 'a' at row 8 +Warning 1299 Invalid TIMESTAMP value in column 'a' at row 9 +Warning 1264 Out of range value for column 'a' at row 34 +Warning 1264 Out of range value for column 'a' at row 35 +SELECT MIN(a), MAX(a) FROM t2; +MIN(a) MAX(a) +0000-00-00 00:00:00 2038-01-19 06:14:07 +SELECT COUNT(*) FROM t2; +COUNT(*) +35 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +2 +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +PARTITION_NAME TABLE_ROWS +p0 3 +p-2000 6 +p-2011-MSK 0 +p-2011-MSD-1 9 +p-2011-MSD-2 8 +p-2012-MSK-1 0 +p-2012-MSK-2 7 +pEnd 0 +pMax 2 +SELECT * FROM t2 ORDER BY a, tz; +a tz +NULL Moscow +NULL Moscow +NULL UTC +0000-00-00 00:00:00 Moscow +0000-00-00 00:00:00 UTC +1970-01-01 03:00:02 Moscow +1970-01-01 03:00:02 UTC +1974-02-05 21:28:17 Moscow +1974-02-06 00:28:17 UTC +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 UTC +2011-03-27 03:00:01 Moscow +2011-03-27 03:00:01 MoscowI +2011-03-27 03:00:01 MoscowI +2011-03-27 03:00:01 MoscowI +2011-03-27 03:00:01 UTC +2011-03-27 03:00:02 Moscow +2011-03-27 03:00:02 UTC +2011-10-30 02:00:00 Moscow +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:00:02 MoscowD +2011-10-30 02:00:02 UTC +2011-10-30 02:00:02 UTC +2011-10-30 03:00:00 MoscowD +2011-10-30 03:00:00 UTC +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +2011-10-30 03:00:02 Moscow +2011-10-30 03:00:02 UTC +2038-01-19 06:14:07 Moscow +2038-01-19 06:14:07 UTC +# Test start range changes +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'Moscow'); +Warnings: +Warning 1264 Out of range value for column 'a' at row 1 +SELECT COUNT(*) FROM t2; +COUNT(*) +36 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +3 +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +a tz +NULL Moscow +NULL Moscow +NULL UTC +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +a tz +2038-01-19 06:14:07 Moscow +2038-01-19 06:14:07 UTC +2011-10-30 03:00:02 Moscow +UPDATE t2 SET a = TIMESTAMPADD(SECOND, -1, a); +Warnings: +Warning 1299 Invalid TIMESTAMP value in column 'a' at row 18 +Warning 1299 Invalid TIMESTAMP value in column 'a' at row 19 +SELECT MIN(a), MAX(a) FROM t2; +MIN(a) MAX(a) +1970-01-01 03:00:01 2038-01-19 06:14:06 +SELECT COUNT(*) FROM t2; +COUNT(*) +36 +SELECT COUNT(*) FROM t2 WHERE a = 0; +COUNT(*) +0 +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +PARTITION_NAME TABLE_ROWS +p0 6 +p-2000 4 +p-2011-MSK 0 +p-2011-MSD-1 11 +p-2011-MSD-2 9 +p-2012-MSK-1 0 +p-2012-MSK-2 4 +pEnd 2 +pMax 0 +SELECT * FROM t2 ORDER BY a, tz; +a tz +NULL Moscow +NULL Moscow +NULL Moscow +NULL Moscow +NULL UTC +NULL UTC +1970-01-01 03:00:01 Moscow +1970-01-01 03:00:01 UTC +1974-02-05 21:28:16 Moscow +1974-02-06 00:28:16 UTC +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 Moscow +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 MoscowI +2011-03-27 03:00:00 UTC +2011-03-27 03:00:00 UTC +2011-03-27 03:00:01 Moscow +2011-03-27 03:00:01 UTC +2011-10-30 01:59:59 Moscow +2011-10-30 01:59:59 UTC +2011-10-30 02:00:00 MoscowD +2011-10-30 02:00:00 UTC +2011-10-30 02:00:00 UTC +2011-10-30 02:00:01 MoscowD +2011-10-30 02:00:01 UTC +2011-10-30 02:00:01 UTC +2011-10-30 02:59:59 MoscowD +2011-10-30 02:59:59 UTC +2011-10-30 02:59:59 UTC +2011-10-30 03:00:00 Moscow +2011-10-30 03:00:00 UTC +2011-10-30 03:00:01 Moscow +2011-10-30 03:00:01 UTC +2038-01-19 06:14:06 Moscow +2038-01-19 06:14:06 UTC +SHOW CREATE TABLE t2; +Table Create Table +t2 CREATE TABLE `t2` ( + `a` timestamp NULL DEFAULT NULL, + `tz` varchar(16) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +/*!50100 PARTITION BY RANGE (UNIX_TIMESTAMP(a)) +(PARTITION p0 VALUES LESS THAN (0) ENGINE = MyISAM, + PARTITION `p-2000` VALUES LESS THAN (946684800) ENGINE = MyISAM, + PARTITION `p-2011-MSK` VALUES LESS THAN (1301180400) ENGINE = MyISAM, + PARTITION `p-2011-MSD-1` VALUES LESS THAN (1319925600) ENGINE = MyISAM, + PARTITION `p-2011-MSD-2` VALUES LESS THAN (1319929200) ENGINE = MyISAM, + PARTITION `p-2012-MSK-1` VALUES LESS THAN (1319932800) ENGINE = MyISAM, + PARTITION `p-2012-MSK-2` VALUES LESS THAN (1332630000) ENGINE = MyISAM, + PARTITION pEnd VALUES LESS THAN (2147483647) ENGINE = MyISAM, + PARTITION pMax VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */ +TRUNCATE TABLE t2; +DROP TABLE t1, t2; +SET @@session.time_zone= @old_time_zone; === modified file 'mysql-test/t/partition.test' --- a/mysql-test/t/partition.test 2010-12-22 09:50:36 +0000 +++ b/mysql-test/t/partition.test 2011-03-16 10:59:01 +0000 @@ -112,10 +112,16 @@ INSERT INTO t1 VALUES ('2009-07-14 17:35 INSERT INTO t1 VALUES ('2009-09-21 17:31:42', 'pmax'); SELECT * FROM t1; +SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +EXPLAIN PARTITIONS SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +EXPLAIN PARTITIONS SELECT * FROM t1 where a = '2007-07-30 17:35:48'; ALTER TABLE t1 REORGANIZE PARTITION pmax INTO ( PARTITION p3 VALUES LESS THAN (1247688000), PARTITION pmax VALUES LESS THAN MAXVALUE); SELECT * FROM t1; +SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +EXPLAIN PARTITIONS SELECT * FROM t1 where a between '2007-01-01' and '2007-08-01'; +EXPLAIN PARTITIONS SELECT * FROM t1 where a = '2007-07-30 17:35:48'; SHOW CREATE TABLE t1; DROP TABLE t1; === modified file 'mysql-test/t/partition_datatype.test' --- a/mysql-test/t/partition_datatype.test 2008-02-25 20:18:50 +0000 +++ b/mysql-test/t/partition_datatype.test 2011-03-16 10:59:01 +0000 @@ -6,6 +6,7 @@ # Partitions: crash if varchar length > 65530 # -- source include/have_partition.inc +-- source include/have_innodb.inc --disable_warnings drop table if exists t1; @@ -230,3 +231,312 @@ show create table t1; insert into t1 values (1),(4),(7),(10),(13),(16),(19),(22),(25),(28),(31),(34); select hex(a) from t1 where a = 7; drop table t1; + +--echo # +--echo # Bug#28928: UNIX_TIMESTAMP() should be considered unary monotonic +--echo # by partition pruning +SET @old_time_zone= @@session.time_zone; +SET @@session.time_zone = 'UTC'; +--echo # Using MyISAM to get stable values on TABLE_ROWS in I_S.PARTITIONS +CREATE TABLE t1 +(a TIMESTAMP NULL, + tz varchar(16)) +ENGINE = MyISAM; +CREATE TABLE t2 LIKE t1; +ALTER TABLE t2 PARTITION BY RANGE (UNIX_TIMESTAMP(a)) +(PARTITION `p0` VALUES LESS THAN (0), + PARTITION `p-2000` VALUES LESS THAN (UNIX_TIMESTAMP('2000-01-01')), + PARTITION `p-2011-MSK` VALUES LESS THAN (UNIX_TIMESTAMP('2011-03-26 23:00:00')), + PARTITION `p-2011-MSD-1` VALUES LESS THAN (UNIX_TIMESTAMP('2011-10-29 22:00:00')), + PARTITION `p-2011-MSD-2` VALUES LESS THAN (UNIX_TIMESTAMP('2011-10-29 23:00:00')), + PARTITION `p-2012-MSK-1` VALUES LESS THAN (UNIX_TIMESTAMP('2011-10-30 00:00:00')), + PARTITION `p-2012-MSK-2` VALUES LESS THAN (UNIX_TIMESTAMP('2012-03-24 23:00:00')), + PARTITION `pEnd` VALUES LESS THAN (UNIX_TIMESTAMP('2038-01-19 03:14:07')), + PARTITION `pMax` VALUES LESS THAN MAXVALUE); + + +--echo # Test 'odd' values +INSERT INTO t1 VALUES (NULL, 'UTC'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00', 'UTC'); +--echo # Test invalid values +INSERT INTO t1 VALUES ('1901-01-01 00:00:00', 'UTCI'); +INSERT INTO t1 VALUES ('1969-12-31 23:59:59', 'UTCI'); +INSERT INTO t1 VALUES ('2038-01-19 03:14:08', 'UTCI'); +INSERT INTO t1 VALUES ('1970-01-01 00:00:00', 'UTCI'); +--echo # Test start range +INSERT INTO t1 VALUES ('1970-01-01 00:00:01', 'UTC'); +INSERT INTO t1 VALUES ('1974-02-05 21:28:16', 'UTC'); +--echo # Test end range +INSERT INTO t1 VALUES ('2038-01-19 03:14:06', 'UTC'); +INSERT INTO t1 VALUES ('2038-01-19 03:14:07', 'UTC'); +--echo # Test Daylight saving shift +INSERT INTO t1 VALUES ('2011-03-26 22:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-03-26 23:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-03-26 23:00:01', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 21:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 22:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 22:00:01', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 22:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 23:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 23:00:01', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-29 23:59:59', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-30 00:00:00', 'UTC'); +INSERT INTO t1 VALUES ('2011-10-30 00:00:01', 'UTC'); + +SET @@session.time_zone = 'Europe/Moscow'; + +--echo # Test 'odd' values +INSERT INTO t1 VALUES (NULL, 'Moscow'); +INSERT INTO t1 VALUES ('0000-00-00 00:00:00', 'Moscow'); +--echo # Test invalid values +INSERT INTO t1 VALUES ('0000-00-00 03:00:00', 'MoscowI'); +INSERT INTO t1 VALUES ('1901-01-01 00:00:00', 'MoscowI'); +INSERT INTO t1 VALUES ('1969-12-31 23:59:59', 'MoscowI'); +INSERT INTO t1 VALUES ('1970-01-01 02:29:29', 'MoscowI'); +INSERT INTO t1 VALUES ('2038-01-19 06:14:08', 'MoscowI'); +INSERT INTO t1 VALUES ('1970-01-01 03:00:00', 'MoscowI'); +--echo # values truncated to 03:00:00 due to daylight saving shift +INSERT INTO t1 VALUES ('2011-03-27 02:00:00', 'MoscowI'); +INSERT INTO t1 VALUES ('2011-03-27 02:00:01', 'MoscowI'); +INSERT INTO t1 VALUES ('2011-03-27 02:59:59', 'MoscowI'); +--echo # Test start range +INSERT INTO t1 VALUES ('1970-01-01 03:00:01', 'Moscow'); +INSERT INTO t1 VALUES ('1974-02-05 21:28:16', 'Moscow'); +--echo # Test end range +INSERT INTO t1 VALUES ('2038-01-19 06:14:06', 'Moscow'); +INSERT INTO t1 VALUES ('2038-01-19 06:14:07', 'Moscow'); +--echo # Test Daylight saving shift +INSERT INTO t1 VALUES ('2011-03-27 01:59:59', 'Moscow'); +INSERT INTO t1 VALUES ('2011-03-27 03:00:00', 'Moscow'); +INSERT INTO t1 VALUES ('2011-03-27 03:00:01', 'Moscow'); +INSERT INTO t1 VALUES ('2011-10-30 01:59:59', 'Moscow'); +--echo # All values between 02:00 and 02:59:59 will be interpretated as DST +INSERT INTO t1 VALUES ('2011-10-30 02:00:00', 'MoscowD'); +INSERT INTO t1 VALUES ('2011-10-30 02:00:01', 'MoscowD'); +INSERT INTO t1 VALUES ('2011-10-30 02:59:59', 'MoscowD'); +INSERT INTO t1 VALUES ('2011-10-30 03:00:00', 'Moscow'); +INSERT INTO t1 VALUES ('2011-10-30 03:00:01', 'Moscow'); + + +SET @@session.time_zone = 'UTC'; + +INSERT INTO t2 SELECT * FROM t1; + +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; + +SELECT * FROM t1 ORDER BY a, tz; +SELECT * FROM t2 ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 23:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 23:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 22:59:59' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-26 22:59:59' ORDER BY a, tz; + + +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 22:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 22:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 23:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 23:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; + + + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 23:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 23:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 22:59:59' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 22:59:59' ORDER BY a, tz; + + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 22:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 22:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 23:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 23:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; + + +--echo # Test end range changes +DELETE FROM t2 WHERE a = 0; +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'UTC'); +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +UPDATE t2 SET a = TIMESTAMPADD(SECOND, 1, a); +SELECT MIN(a), MAX(a) FROM t2; +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +SELECT * FROM t2 ORDER BY a, tz; + +--echo # Test start range changes +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'UTC'); +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +UPDATE t2 SET a = TIMESTAMPADD(SECOND, -1, a); +SELECT MIN(a), MAX(a) FROM t2; +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +SELECT * FROM t2 ORDER BY a, tz; + +SHOW CREATE TABLE t2; +TRUNCATE TABLE t2; + +SET @@session.time_zone = 'Europe/Moscow'; + +INSERT INTO t2 SELECT * FROM t1; + +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; + +SELECT * FROM t1 ORDER BY a, tz; +SELECT * FROM t2 ORDER BY a, tz; + +--echo # Testing the leap from 01:59:59 to 03:00:00 +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 03:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 03:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 01:59:59' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-01 00:00:00' and '2011-03-27 01:59:59' ORDER BY a, tz; + + +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 01:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 01:59:59' and '2011-03-28 00:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 03:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-03-26 03:00:00' and '2011-03-28 00:00:00' ORDER BY a, tz; + + + +--echo # Testing the leap from 02:59:59 to 02:00:00 +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:59:59' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 02:59:59' ORDER BY a, tz; + + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 03:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 03:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 01:59:59' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-01 00:00:00' and '2011-10-29 01:59:59' ORDER BY a, tz; + + + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 02:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; + + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 03:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 03:00:00' and '2011-10-31 00:00:00' ORDER BY a, tz; + +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 01:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; +EXPLAIN PARTITIONS +SELECT * FROM t2 +WHERE a BETWEEN '2011-10-29 01:59:59' and '2011-10-31 00:00:00' ORDER BY a, tz; + + + +--echo # Test end range changes +DELETE FROM t2 WHERE a = 0; +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'Moscow'); +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +UPDATE t2 SET a = TIMESTAMPADD(SECOND, 1, a); +SELECT MIN(a), MAX(a) FROM t2; +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +SELECT * FROM t2 ORDER BY a, tz; + +--echo # Test start range changes +INSERT INTO t2 VALUES ('1970-01-01 00:00:00', 'Moscow'); +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT * FROM t2 ORDER BY a, tz LIMIT 3; +SELECT * FROM t2 ORDER BY a DESC, tz LIMIT 3; +UPDATE t2 SET a = TIMESTAMPADD(SECOND, -1, a); +SELECT MIN(a), MAX(a) FROM t2; +SELECT COUNT(*) FROM t2; +SELECT COUNT(*) FROM t2 WHERE a = 0; +SELECT PARTITION_NAME, TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS +WHERE TABLE_NAME = 't2'; +SELECT * FROM t2 ORDER BY a, tz; + +SHOW CREATE TABLE t2; +TRUNCATE TABLE t2; + +DROP TABLE t1, t2; +SET @@session.time_zone= @old_time_zone; === modified file 'sql/item_timefunc.cc' --- a/sql/item_timefunc.cc 2010-11-12 10:12:15 +0000 +++ b/sql/item_timefunc.cc 2011-03-16 10:59:01 +0000 @@ -1316,6 +1316,26 @@ longlong Item_func_unix_timestamp::val_i return (longlong) TIME_to_timestamp(current_thd, <ime, ¬_used); } +enum_monotonicity_info Item_func_unix_timestamp::get_monotonicity_info() const +{ + if (args[0]->type() == Item::FIELD_ITEM && + (args[0]->field_type() == MYSQL_TYPE_TIMESTAMP)) + return MONOTONIC_INCREASING; + return NON_MONOTONIC; +} + + +longlong Item_func_unix_timestamp::val_int_endpoint(bool left_endp, bool *incl_endp) +{ + DBUG_ASSERT(fixed == 1); + DBUG_ASSERT(arg_count == 1 && + args[0]->type() == Item::FIELD_ITEM && + args[0]->field_type() == MYSQL_TYPE_TIMESTAMP); + Field *field=((Item_field*) args[0])->field; + /* Leave the incl_endp intact */ + return ((Field_timestamp*) field)->get_timestamp(&null_value); +} + longlong Item_func_time_to_sec::val_int() { === modified file 'sql/item_timefunc.h' --- a/sql/item_timefunc.h 2011-01-28 12:37:39 +0000 +++ b/sql/item_timefunc.h 2011-03-16 10:59:01 +0000 @@ -349,6 +349,8 @@ public: Item_func_unix_timestamp(Item *a) :Item_int_func(a) {} longlong val_int(); const char *func_name() const { return "unix_timestamp"; } + enum_monotonicity_info get_monotonicity_info() const; + longlong val_int_endpoint(bool left_endp, bool *incl_endp); bool check_partition_func_processor(uchar *int_arg) {return FALSE;} /* UNIX_TIMESTAMP() depends on the current timezone --===============5113266381447832839== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/mattias.jonsson@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: mattias.jonsson@stripped\ # niyh6ewljvd94l6v # target_branch: file:///Users/mattiasj/mysql-bzr/b28928-51/ # testament_sha1: fe0092af167901cb33f46cb192fab34cdd9893ee # timestamp: 2011-03-16 11:59:12 +0100 # base_revision_id: dmitry.shulga@stripped\ # sakc2ctbjb9n7tqv # # Begin bundle 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 V0mhLh7IqSSkqClFSApURYX2Tvul1LUl7JR00Ij6VIpSSSwnqQstIEY43IH81FSSSKow9EkmK4kR 4vF7GxTFJJmgXJlTa6BJ9CaXmsw9FxnRJskkSNsQSkSFFxubtMEJNqJFEUiTyKIlBgxM5uKkSSFa 1pBZK1BLmZGZGE6MssWUSJ0skImRF7RkyIl+USQrNsvmyaBkXYhrC8ozhKSMKSki5KNC4uFzHNqt KPktekhI1UVJqmoj/EdLAzU2LNr2anR+/fyeLVurg/muz7jpmKiKInaJRJMI+BxOzl1S9XiqOnDF cjRRnnVnUJqCLLF/S1kiYJjy96SrwcbwbN57MwjNG2g7Oq+RIi5jUZUx6srS4oP/ePSHtdv7PZ1x qrUSSQ5nVxNsbe3sOhfX8K0buizkVAxMuC3XRfL7Z+51cEM2W/ovkux089Xjw31ns6XZ6szesm6l sS96DjfOtlZ2XLjJoRPHs234dXS4rZkxUdBtDop1Xl2SuhMqxur8Fm85aYnyruM3znzTb7m0kW0n gTOJvW3wvkiaJUUSopJKW2O70TmmoUzdbuTU9O+4mjZbSQ1MiL+pUuI/V58mBwYBGq6FhDdllcTU m9rIqEasNHexTkoUNiN2IbjTIEa20m0aYTW2khiZI0RpNpkI00mlsiNLCW2SGkNLCQS0NwZLB7fP x29nkgiQUSkIIkDZYNuBtzlXQ0dA8mgC5Ni51MGizqZa8ViQp0sl0Il0t0O1dc4PLbe1YZRJHWWQ p4XSEcWDbcGLVktkrZb0mE8iM8c0gXLl7Urg1spMWLZVRUlNY0iEJoy1T5ZxraZNpFStJqpKI8cf qGPUPh+8xcmqdD/ttZvNrauLvdPbGDr1tyETVIiPBhOhRqwOLayJO+14efPMamzc4MHaxm2uKzUv fqnIvWzWZHBiu7k+TM0evQ2NHTN7FvGCEyYLjn3calhJNsQMQMTSYmgdRSSVJKlVJLaERNNrTVYs SZFRLNrZ7Ayc2C9q7nudLm7X7nk+Le93CDk7uPRz8pL7uql+hGS94UYw3VPhSeLJvXLK25T1/gz8 JjKymjNam+7dMXmncyenWyxiJlXj5Q6XzLLnseant7n+Xo3/6bg3O1udW/K6Tx5ha/qYa3/DWyMm VI8ei7Xfy6Vb3fkx6uxrvdDyyl3dVplzEhvMwsJDcnXvZzufS0ei5r6GTm/2a2tqYdLvanzr03ik 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 --===============5113266381447832839==--