• Sergey Glukhov's avatar
    Bug#56814 Explain + subselect + fulltext crashes server · d0ac4e2c
    Sergey Glukhov authored
    create_sort_index() function overwrites original JOIN_TAB::type field.
    At re-execution of subquery overwritten JOIN_TAB::type(JT_ALL) is
    used instead of JT_FT. It misleads test_if_skip_sort_order() and
    the function tries to find suitable key for the order that should
    not be allowed for FULLTEXT(JT_FT) table.
    The fix is to restore JOIN_TAB strucures for subselect on re-execution
    for EXPLAIN.
    Additional fix:
    Update TABLE::maybe_null field which
    affects list_contains_unique_index() behaviour as it
    could have the value(maybe_null==TRUE) based on the
    assumption that this join is outer
    (see setup_table_map() func).
    
    
    mysql-test/r/explain.result:
      test case
    mysql-test/t/explain.test:
      test case
    sql/item_subselect.cc:
      Make subquery uncacheable in case of EXPLAIN. It allows to keep
      original JOIN_TAB::type(see JOIN::save_join_tab) and restore it
      on re-execution.
    sql/sql_select.cc:
      -restore JOIN_TAB strucures for subselect on re-execution for EXPLAIN
      -Update TABLE::maybe_null field as it could have
       the value(maybe_null==TRUE) based on the assumption
       that this join is outer(see setup_table_map() func).
       This change is not related to the crash problem but
       affects EXPLAIN results in the test case.
    d0ac4e2c
explain.result 13.3 KB