diff options
author | Vicențiu Ciorbaru <vicentiu@mariadb.org> | 2017-09-11 12:03:16 +0300 |
---|---|---|
committer | Vicențiu Ciorbaru <vicentiu@mariadb.org> | 2017-09-19 15:14:10 +0300 |
commit | 02eda36e4e75170b2cf228f65faf3c32ede83626 (patch) | |
tree | bc61c87ecc6220aea125cbb482ac40fd7dd51cac /sql/item_windowfunc.h | |
parent | 5b9c32ede096e19d751537c6421563a7fb71c0db (diff) | |
download | mariadb-git-02eda36e4e75170b2cf228f65faf3c32ede83626.tar.gz |
MDEV-13358: FIRST_V throw SQL Fehler (1292): Incorrect datetime value
This is backport of 25ad623d64e for 10.2.
The issue is similar to the one from MDEV-13240. Item::save_in_field()
returns an error during tmp table population in a create table from select query
as we try to save an empty string as a date value when
force_return_blank is set to true for window functions.
MDEV-13240 Wrong warning with MAX(datetime_field) OVER (...)
The problem resided in Item_window_func implementation,
and it was revealed by bb-10.2-ext specific changes:
Item_window_func::save_in_field() works differently in bb-10.2-ext vs 10.2:
- 10.2 goes through val_str()
- bb-10.2-ext goes through get_date(), due to Type_handler related changes.
get_date() tries to convert empty string to DATETIME, hence the warning.
During a discussion with Vicentiu, it was decided to fix
Item_window_func::val_xxx() to return NULL
(instead of an "empty" value, such as 0 for numbers and '' for strings)
when force_return_blank is set.
Diffstat (limited to 'sql/item_windowfunc.h')
-rw-r--r-- | sql/item_windowfunc.h | 16 |
1 files changed, 7 insertions, 9 deletions
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) { |