• Oleg Smirnov's avatar
    MDEV-33010 Crash when pushing condition with CHARSET()/COERCIBILITY() into derived table · 972879f4
    Oleg Smirnov authored
    Based on the current logic, objects of classes Item_func_charset and
    Item_func_coercibility (responsible for CHARSET() and COERCIBILITY()
    functions) are always considered constant.
    However, SQL syntax allows their use in a non-constant manner, such as
    CHARSET(t1.a), COERCIBILITY(t1.a).
    
    In these cases, the `used_tables()` parameter corresponds to table names
    in the function parameters, creating an inconsistency: the item is marked
    as constant but accesses tables. This leads to crashes when
    conditions with CHARSET()/COERCIBILITY() are pushed into derived tables.
    
    This commit addresses the issue by setting `used_tables()` to 0 for
    `Item_func_charset` and `Item_func_coercibility`. Additionally, the items
    now store the return values during the preparation phase and return
    them during the execution phase. This ensures that the items do not call
    its arguments methods during the execution and are truly constant.
    
    Reviewer: Alexander Barkov <bar@mariadb.com>
    972879f4
derived_cond_pushdown_innodb.result 1.92 KB