mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fixed mdev-14911: zero_date is considered as NULL, depending on
optimizer_switch For DATE and DATETIME columns defined as NOT NULL, "date_notnull IS NULL" has to be modified to: "date_notnull IS NULL OR date_notnull == 0" if date_notnull is from an inner table of outer join); "date_notnull == 0" - otherwise. This must hold for such columns of mergeable views and derived tables as well. So far the code did the above re-writing only for columns of base tables and temporary tables.
This commit is contained in:
@ -13980,9 +13980,9 @@ bool cond_is_datetime_is_null(Item *cond)
|
||||
((Item_func*) cond)->functype() == Item_func::ISNULL_FUNC)
|
||||
{
|
||||
Item **args= ((Item_func_isnull*) cond)->arguments();
|
||||
if (args[0]->type() == Item::FIELD_ITEM)
|
||||
if (args[0]->real_item()->type() == Item::FIELD_ITEM)
|
||||
{
|
||||
Field *field=((Item_field*) args[0])->field;
|
||||
Field *field=((Item_field*) (args[0]->real_item()))->field;
|
||||
|
||||
if (((field->type() == MYSQL_TYPE_DATE) ||
|
||||
(field->type() == MYSQL_TYPE_DATETIME)) &&
|
||||
@ -14308,14 +14308,14 @@ internal_remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value)
|
||||
|
||||
*/
|
||||
Item **args= ((Item_func_isnull*) cond)->arguments();
|
||||
Field *field=((Item_field*) args[0])->field;
|
||||
Field *field=((Item_field*) (args[0]->real_item()))->field;
|
||||
|
||||
Item *item0= new(thd->mem_root) Item_int((longlong)0, 1);
|
||||
Item *eq_cond= new(thd->mem_root) Item_func_eq(args[0], item0);
|
||||
if (!eq_cond)
|
||||
return cond;
|
||||
|
||||
if (field->table->pos_in_table_list->is_inner_table_of_outer_join())
|
||||
if (field->table->pos_in_table_list->is_inner_table_of_outer_join())
|
||||
{
|
||||
// outer join: transform "col IS NULL" to "col IS NULL or col=0"
|
||||
Item *or_cond= new(thd->mem_root) Item_cond_or(eq_cond, cond);
|
||||
|
Reference in New Issue
Block a user