mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
A fix for new conditions being defined and upper condition not updated
mysql-test/r/type_datetime.result: result for datetime fix mysql-test/t/type_datetime.test: test for datetime fix sql/sql_select.cc: Fix for a bug caused implicitely by MySQL having to comply with ODBC standard on datetime comparisons. This failed to update used_tables() for OR condition, which is why query returned all rows on query as in .test above, while none of types contains NULL nor 0 datetime (last one from ODBC)
This commit is contained in:
@ -3009,6 +3009,7 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value)
|
||||
== Item_func::COND_AND_FUNC;
|
||||
List_iterator<Item> li(*((Item_cond*) cond)->argument_list());
|
||||
Item::cond_result tmp_cond_value;
|
||||
bool should_fix_fields=0;
|
||||
|
||||
*cond_value=Item::COND_UNDEF;
|
||||
Item *item;
|
||||
@ -3028,6 +3029,7 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value)
|
||||
delete item; // This may be shared
|
||||
#endif
|
||||
VOID(li.replace(new_item));
|
||||
should_fix_fields=1;
|
||||
}
|
||||
if (*cond_value == Item::COND_UNDEF)
|
||||
*cond_value=tmp_cond_value;
|
||||
@ -3054,6 +3056,9 @@ remove_eq_conds(COND *cond,Item::cond_result *cond_value)
|
||||
break; /* purecov: deadcode */
|
||||
}
|
||||
}
|
||||
if (should_fix_fields)
|
||||
cond->fix_fields(current_thd,0);
|
||||
|
||||
if (!((Item_cond*) cond)->argument_list()->elements ||
|
||||
*cond_value != Item::COND_OK)
|
||||
return (COND*) 0;
|
||||
|
Reference in New Issue
Block a user