• unknown's avatar
    Fixed bug #34620: item_row.cc:50: Item_row::illegal_method_call(const char*): · d05c8d38
    unknown authored
                      Assertion `0' failed
    
    If ROW item is a part of an expression that also has
    aggregate function calls (COUNT/SUM/AVG...), a
    "splitting" with an Item::split_sum_func2 function
    is applied to that ROW item.
    Current implementation of Item::split_sum_func2
    replaces this Item_row with a newly created
    Item_aggregate_ref reference to it.
    Then the row cache tries to work with the
    Item_aggregate_ref object as with the Item_row object:
    row cache calls row-emulation methods such as cols and
    element_index. Item_aggregate_ref (like it's parent
    Item_ref) inherits dummy implementations of those
    methods from the hierarchy root Item, and call to
    them leads to failed assertions and wrong data
    output.
    
    Row-emulation virtual functions (cols, element_index, addr,
    check_cols, null_inside and bring_value) of Item_ref have
    been overloaded to forward calls to an underlying item
    reference.
    
    
    
    
    mysql-test/r/row.result:
      Added test case for bug #34620.
    mysql-test/t/row.test:
      Added test case for bug #34620.
    sql/item.h:
      Fixed bug #34620.
      Row-emulation virtual functions (cols, element_index, addr,
      check_cols, null_inside and bring_value) of Item_ref have
      been overloaded to forward calls to an underlying item
      reference.
    d05c8d38
row.test 7.63 KB