summaryrefslogtreecommitdiff
path: root/sql/item_func.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/item_func.cc')
-rw-r--r--sql/item_func.cc12
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);