diff --git a/mysql-test/r/win.result b/mysql-test/r/win.result index 14628cd0d44..4e42658ccd1 100644 --- a/mysql-test/r/win.result +++ b/mysql-test/r/win.result @@ -3185,3 +3185,32 @@ fld 1 2 DROP TABLE t1; +# +# MDEV-13240 Wrong warning with MAX(datetime_field) OVER (...) +# +CREATE TABLE t1 (dt DATETIME); +INSERT INTO t1 VALUES ('2017-05-17'); +SELECT MAX(dt) OVER (ORDER BY dt ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) FROM t1; +MAX(dt) OVER (ORDER BY dt ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) +NULL +DROP TABLE t1; +# +# MDEV-13358 FIRST_VALUE throws SQL Error (1292): Incorrect datetime value +# +CREATE TABLE IF NOT EXISTS `fv_test` ( +`SOME_DATE` datetime NOT NULL +); +INSERT INTO `fv_test` (`SOME_DATE`) VALUES ('2017-07-20 12:47:56'); +CREATE TABLE fv_result +SELECT +FIRST_VALUE(SOME_DATE) OVER(ORDER BY SOME_DATE DESC) AS somedate +FROM fv_test; +SHOW CREATE TABLE fv_result; +Table Create Table +fv_result CREATE TABLE `fv_result` ( + `somedate` datetime DEFAULT NULL +) ENGINE=MyISAM DEFAULT CHARSET=latin1 +SELECT * FROM fv_result; +somedate +2017-07-20 12:47:56 +DROP TABLE fv_test, fv_result; diff --git a/mysql-test/r/win_insert_select.result b/mysql-test/r/win_insert_select.result index 93545e6de30..bb25d052840 100644 --- a/mysql-test/r/win_insert_select.result +++ b/mysql-test/r/win_insert_select.result @@ -1,16 +1,16 @@ CREATE TABLE t1 (c1 INT, c2 VARCHAR(30)); PREPARE populate_table FROM "INSERT into t1 values (1, 'manual_insert_1'), (4, 'manual_insert_2')"; -INSERT INTO t1 SELECT row_number() over(), "should_have_0" FROM t1; -INSERT INTO t1 SELECT 1 + row_number() over(), "should_have_2" FROM t1; +INSERT INTO t1 SELECT row_number() over(), "should_not_add_any_rows" FROM t1; +INSERT INTO t1 SELECT 1 + row_number() over(), "should_not_add_any_rows" FROM t1; EXECUTE populate_table; -INSERT INTO t1 SELECT 10 + row_number() over(), "should repeat 4 times [11-14]" FROM t1; +INSERT INTO t1 SELECT 10 + row_number() over(), "should repeat 2 times [11-12]" FROM t1; SELECT c1, c2 FROM t1 ORDER BY c2, c1; c1 c2 1 manual_insert_1 4 manual_insert_2 -11 should repeat 4 times [11-14] -12 should repeat 4 times [11-14] +11 should repeat 2 times [11-12] +12 should repeat 2 times [11-12] DELETE FROM t1; EXECUTE populate_table; INSERT INTO t1 diff --git a/mysql-test/t/win.test b/mysql-test/t/win.test index 3dedc1227fd..83427e4edf8 100644 --- a/mysql-test/t/win.test +++ b/mysql-test/t/win.test @@ -1965,3 +1965,31 @@ INSERT INTO t1 VALUES (1),(2); SELECT i AS fld FROM t1 UNION SELECT COUNT(*) AS fld FROM t1; DROP TABLE t1; +--echo # +--echo # MDEV-13240 Wrong warning with MAX(datetime_field) OVER (...) +--echo # + +CREATE TABLE t1 (dt DATETIME); +INSERT INTO t1 VALUES ('2017-05-17'); +SELECT MAX(dt) OVER (ORDER BY dt ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) FROM t1; +DROP TABLE t1; + +--echo # +--echo # MDEV-13358 FIRST_VALUE throws SQL Error (1292): Incorrect datetime value +--echo # +CREATE TABLE IF NOT EXISTS `fv_test` ( + `SOME_DATE` datetime NOT NULL + ); + +INSERT INTO `fv_test` (`SOME_DATE`) VALUES ('2017-07-20 12:47:56'); + +CREATE TABLE fv_result +SELECT +FIRST_VALUE(SOME_DATE) OVER(ORDER BY SOME_DATE DESC) AS somedate +FROM fv_test; + +SHOW CREATE TABLE fv_result; + +SELECT * FROM fv_result; + +DROP TABLE fv_test, fv_result; diff --git a/mysql-test/t/win_insert_select.test b/mysql-test/t/win_insert_select.test index 66df7324c4f..6b2e0da4175 100644 --- a/mysql-test/t/win_insert_select.test +++ b/mysql-test/t/win_insert_select.test @@ -3,12 +3,12 @@ CREATE TABLE t1 (c1 INT, c2 VARCHAR(30)); PREPARE populate_table FROM "INSERT into t1 values (1, 'manual_insert_1'), (4, 'manual_insert_2')"; -INSERT INTO t1 SELECT row_number() over(), "should_have_0" FROM t1; -INSERT INTO t1 SELECT 1 + row_number() over(), "should_have_2" FROM t1; +INSERT INTO t1 SELECT row_number() over(), "should_not_add_any_rows" FROM t1; +INSERT INTO t1 SELECT 1 + row_number() over(), "should_not_add_any_rows" FROM t1; EXECUTE populate_table; -INSERT INTO t1 SELECT 10 + row_number() over(), "should repeat 4 times [11-14]" FROM t1; +INSERT INTO t1 SELECT 10 + row_number() over(), "should repeat 2 times [11-12]" FROM t1; SELECT c1, c2 FROM t1 ORDER BY c2, c1; diff --git a/sql/item_windowfunc.h b/sql/item_windowfunc.h index 0dee60915f8..a1ef6854288 100644 --- a/sql/item_windowfunc.h +++ b/sql/item_windowfunc.h @@ -851,7 +851,7 @@ public: bool is_null() { if (force_return_blank) - return false; + return true; if (read_value_from_result_field) return result_field->is_null(); @@ -865,7 +865,7 @@ public: if (force_return_blank) { res= 0.0; - null_value= false; + null_value= true; } else if (read_value_from_result_field) { @@ -886,7 +886,7 @@ public: if (force_return_blank) { res= 0; - null_value= false; + null_value= true; } else if (read_value_from_result_field) { @@ -906,9 +906,8 @@ public: String *res; if (force_return_blank) { - null_value= false; - str->length(0); - res= str; + null_value= true; + res= NULL; } else if (read_value_from_result_field) { @@ -930,9 +929,8 @@ public: my_decimal *res; if (force_return_blank) { - my_decimal_set_zero(dec); - null_value= false; - res= dec; + null_value= true; + res= NULL; } else if (read_value_from_result_field) {