diff options
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r-- | sql/item_func.cc | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/sql/item_func.cc b/sql/item_func.cc index 1f949a4445b..60216684c53 100644 --- a/sql/item_func.cc +++ b/sql/item_func.cc @@ -1615,13 +1615,9 @@ longlong Item_func_int_div::val_int() bool Item_func_int_div::fix_length_and_dec() { - Item_result argtype= args[0]->result_type(); - /* use precision ony for the data type it is applicable for and valid */ - uint32 char_length= args[0]->max_char_length() - - (argtype == DECIMAL_RESULT || argtype == INT_RESULT ? - args[0]->decimals : 0); - fix_char_length(char_length > MY_INT64_NUM_DECIMAL_DIGITS ? - MY_INT64_NUM_DECIMAL_DIGITS : char_length); + uint32 prec= args[0]->decimal_int_part(); + set_if_smaller(prec, MY_INT64_NUM_DECIMAL_DIGITS); + fix_char_length(prec); maybe_null=1; unsigned_flag=args[0]->unsigned_flag | args[1]->unsigned_flag; return false; @@ -3169,6 +3165,8 @@ udf_handler::fix_fields(THD *thd, Item_func_or_sum *func, func->maybe_null=1; if (with_sum_func_cache) with_sum_func_cache->join_with_sum_func(item); + func->with_window_func= func->with_window_func || + item->with_window_func; func->with_field= func->with_field || item->with_field; func->with_param= func->with_param || item->with_param; func->With_subquery_cache::join(item); |