diff options
author | Alexander Barkov <bar@mariadb.org> | 2017-04-19 05:20:19 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mariadb.org> | 2017-04-19 05:20:19 +0400 |
commit | e2b03cd3b54f39e09bf20eef77effe1b53813f29 (patch) | |
tree | 4ac86a3a301c79b25ce497683d1416ecee822378 /mysql-test | |
parent | 634f9186922d0decb597178fda15928d2b22f062 (diff) | |
download | mariadb-git-e2b03cd3b54f39e09bf20eef77effe1b53813f29.tar.gz |
MDEV-12514 Split Item_temporal_func::fix_length_and_dec() + MDEV-12515
This patch implements MDEV-12514 according to the task descriptions.
It automatically fixes:
MDEV-12515 Wrong value when storing DATE_ADD() and ADDTIME() to a numeric field
Additionally:
a. Moves Item_func::set_attributes_temporal() to
Type_str_attributes::fix_attributes_temporal(),
which is a more proper place and name for it.
b. Continues replacing calls for:
set_handler_by_field_type(MYSQL_TYPE_XXX)
to corresponding:
set_handler(&type_handler_xxx)
which is faster.
Note, we should eventually get rid of almost all set_handler_by_field_type().
c. Makes type_handler_string, type_handler_time2, type_handler_newdate,
type_handler_datetime2 public.
(all built-in handlers will become public eventually)
d. Removing Item_temporal_func::sql_mode, as it was not used.
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/r/func_time.result | 45 | ||||
-rw-r--r-- | mysql-test/r/gis.result | 31 | ||||
-rw-r--r-- | mysql-test/t/func_time.test | 32 | ||||
-rw-r--r-- | mysql-test/t/gis.test | 34 |
4 files changed, 142 insertions, 0 deletions
diff --git a/mysql-test/r/func_time.result b/mysql-test/r/func_time.result index 54da823c439..a05c6a78cdb 100644 --- a/mysql-test/r/func_time.result +++ b/mysql-test/r/func_time.result @@ -3210,3 +3210,48 @@ DROP TABLE t1,t2; # # End of 10.1 tests # +# +# Start of 10.3 tests +# +# +# MDEV-12515 Wrong value when storing DATE_ADD() and ADDTIME() to a numeric field +# +SET sql_mode=''; +CREATE TABLE t1 AS SELECT +DATE_ADD('2001-01-01',INTERVAL 1 DAY) AS c1, +ADDTIME('10:20:30',1) AS c2; +SHOW CREATE TABLE t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `c1` varchar(19) DEFAULT NULL, + `c2` varchar(26) DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT * FROM t1; +c1 c2 +2001-01-02 10:20:31 +DROP TABLE t1; +CREATE TABLE t2 (c INT); +INSERT INTO t2 SELECT DATE_ADD('2001-01-01',INTERVAL 1 DAY); +Warnings: +Warning 1265 Data truncated for column 'c' at row 1 +INSERT INTO t2 VALUES ('2001-01-02'); +Warnings: +Warning 1265 Data truncated for column 'c' at row 1 +SELECT * FROM t2; +c +2001 +2001 +DROP TABLE t2; +CREATE TABLE t2 (a INT); +INSERT INTO t2 VALUES (ADDTIME('10:20:30',1)); +Warnings: +Warning 1265 Data truncated for column 'a' at row 1 +INSERT INTO t2 VALUES ('10:20:31'); +Warnings: +Warning 1265 Data truncated for column 'a' at row 1 +SELECT * FROM t2; +a +10 +10 +DROP TABLE t2; +SET sql_mode=DEFAULT; diff --git a/mysql-test/r/gis.result b/mysql-test/r/gis.result index e7132331806..6a7b7e7b8bf 100644 --- a/mysql-test/r/gis.result +++ b/mysql-test/r/gis.result @@ -3902,5 +3902,36 @@ SELECT 1 MOD COALESCE(a) FROM t1; ERROR HY000: Illegal parameter data types bigint and geometry for operation '%' DROP TABLE t1; # +# MDEV-12514 Split Item_temporal_func::fix_length_and_dec() +# +SELECT DATE_ADD(POINT(1,1), INTERVAL 10 DAY); +ERROR HY000: Illegal parameter data types geometry and interval for operation 'date_add_interval' +SELECT DATE_SUB(POINT(1,1), INTERVAL 10 DAY); +ERROR HY000: Illegal parameter data types geometry and interval for operation 'date_add_interval' +SELECT POINT(1,1) + INTERVAL 10 DAY; +ERROR HY000: Illegal parameter data types geometry and interval for operation 'date_add_interval' +SELECT POINT(1,1) - INTERVAL 10 DAY; +ERROR HY000: Illegal parameter data types geometry and interval for operation 'date_add_interval' +SELECT INTERVAL 10 DAY + POINT(1,1); +ERROR HY000: Illegal parameter data types geometry and interval for operation 'date_add_interval' +SELECT INTERVAL 10 DAY + POINT(1,1); +ERROR HY000: Illegal parameter data types geometry and interval for operation 'date_add_interval' +SELECT ADDTIME(POINT(1,1), '10:10:10'); +ERROR HY000: Illegal parameter data types geometry and varchar for operation 'add_time' +SELECT ADDTIME('10:10:10', POINT(1,1)); +ERROR HY000: Illegal parameter data types varchar and geometry for operation 'add_time' +SELECT ADDTIME(POINT(1,1), TIME'10:10:10'); +ERROR HY000: Illegal parameter data types geometry and time for operation 'add_time' +SELECT ADDTIME(TIME'10:10:10', POINT(1,1)); +ERROR HY000: Illegal parameter data types time and geometry for operation 'add_time' +SELECT ADDTIME(POINT(1,1), TIMESTAMP'2001-01-01 10:10:10'); +ERROR HY000: Illegal parameter data types geometry and datetime for operation 'add_time' +SELECT ADDTIME(TIMESTAMP'2001-01-01 10:10:10', POINT(1,1)); +ERROR HY000: Illegal parameter data types datetime and geometry for operation 'add_time' +SELECT STR_TO_DATE(POINT(1,1),'%M %d,%Y'); +ERROR HY000: Illegal parameter data types geometry and varchar for operation 'str_to_date' +SELECT STR_TO_DATE('2001-01-01', POINT(1,1)); +ERROR HY000: Illegal parameter data types varchar and geometry for operation 'str_to_date' +# # End of 10.3 tests # diff --git a/mysql-test/t/func_time.test b/mysql-test/t/func_time.test index 6e0169d97ca..e8d1d4e79e3 100644 --- a/mysql-test/t/func_time.test +++ b/mysql-test/t/func_time.test @@ -1817,3 +1817,35 @@ DROP TABLE t1,t2; --echo # --echo # End of 10.1 tests --echo # + + +--echo # +--echo # Start of 10.3 tests +--echo # + +--echo # +--echo # MDEV-12515 Wrong value when storing DATE_ADD() and ADDTIME() to a numeric field +--echo # + +SET sql_mode=''; + +CREATE TABLE t1 AS SELECT + DATE_ADD('2001-01-01',INTERVAL 1 DAY) AS c1, + ADDTIME('10:20:30',1) AS c2; +SHOW CREATE TABLE t1; +SELECT * FROM t1; +DROP TABLE t1; + +CREATE TABLE t2 (c INT); +INSERT INTO t2 SELECT DATE_ADD('2001-01-01',INTERVAL 1 DAY); +INSERT INTO t2 VALUES ('2001-01-02'); +SELECT * FROM t2; +DROP TABLE t2; + +CREATE TABLE t2 (a INT); +INSERT INTO t2 VALUES (ADDTIME('10:20:30',1)); +INSERT INTO t2 VALUES ('10:20:31'); +SELECT * FROM t2; +DROP TABLE t2; + +SET sql_mode=DEFAULT; diff --git a/mysql-test/t/gis.test b/mysql-test/t/gis.test index a19de83f046..1b355b70bc6 100644 --- a/mysql-test/t/gis.test +++ b/mysql-test/t/gis.test @@ -2090,6 +2090,40 @@ SELECT 1 MOD COALESCE(a) FROM t1; DROP TABLE t1; +--echo # +--echo # MDEV-12514 Split Item_temporal_func::fix_length_and_dec() +--echo # + +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT DATE_ADD(POINT(1,1), INTERVAL 10 DAY); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT DATE_SUB(POINT(1,1), INTERVAL 10 DAY); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT POINT(1,1) + INTERVAL 10 DAY; +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT POINT(1,1) - INTERVAL 10 DAY; +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT INTERVAL 10 DAY + POINT(1,1); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT INTERVAL 10 DAY + POINT(1,1); + +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT ADDTIME(POINT(1,1), '10:10:10'); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT ADDTIME('10:10:10', POINT(1,1)); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT ADDTIME(POINT(1,1), TIME'10:10:10'); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT ADDTIME(TIME'10:10:10', POINT(1,1)); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT ADDTIME(POINT(1,1), TIMESTAMP'2001-01-01 10:10:10'); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT ADDTIME(TIMESTAMP'2001-01-01 10:10:10', POINT(1,1)); + +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT STR_TO_DATE(POINT(1,1),'%M %d,%Y'); +--error ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION +SELECT STR_TO_DATE('2001-01-01', POINT(1,1)); --echo # --echo # End of 10.3 tests |