• Alexander Barkov's avatar
    MDEV-8918 Wrong result for CAST(AVG(bigint_column) AS SIGNED) · 7091b785
    Alexander Barkov authored
    - Moving Item_xxx_field declarations after Item_sum_xxx declarations,
      so Item_xxx_field constructors can be defined directly in item_sum.h
      rather than item_sum.cc. This removes some duplicate code, e.g.
      initialization of the following members at constructor time:
      name, decimals, max_length, unsigned_flag, field, maybe_null.
    - Adding Item_sum_field as a common parent for Item_avg_field and
      Item_variance_field
    - Deriving Item_sum_field directly from Item rather that Item_result_field,
      as Item_sum_field descendants do not need anything from Item_result_field.
    - Removing hybrid infrastructure from Item_avg_field,
      adding Item_avg_field_decimal and Item_avg_field_double instead,
      as desired result type is already known at constructor time
      (not only at fix_fields time). This simplifies the code.
    - Changing Item_avg_field_decimal::val_int() to call val_int_from_decimal()
      instead of doing { return (longlong) rint(val_real()); }
      This is the fix itself.
    7091b785
item_sum.h 50.2 KB