• Jon Olav Hauglid's avatar
    Bug #55973 Assertion `thd->transaction.stmt.is_empty()' · 9bd8a62d
    Jon Olav Hauglid authored
               on CREATE TABLE .. SELECT I_S.PART
    
    This assert was triggered if an InnoDB table was created using
    CREATE TABLE ... AS SELECT where the query used an I_S table, and
    a view existed in the database. It would also be triggered for
    any statement changing an InnoDB table (e.g. INSERT, UPDATE, DELETE)
    which had a subquery referencing an I_S table.
    
    The assert was triggered if open_normal_and_derived_tables() failed
    and a statement transaction had been started. This will usually not
    happen as tables are opened before a statement transaction is started.
    However, e.g. CREATE TABLE ... AS SELECT starts a transaction in order
    to insert tuples into the new table. And if the subquery references
    an I_S table, all current tables and views can be opened in order to
    fill the I_S table on the fly. If a view is discovered, open will fail
    as it is instructed to open tables only (OPEN_TABLE_ONLY). This would
    cause the assert to be triggered.
    
    The assert was added in the patch for Bug#52044 and was therefore
    not in any released versions of the server.
    
    This patch fixes the problem by adjusting the assert to take into
    consideration the possibility of tables being opened as part of
    an I_S query. This is similar to what is already done for 
    close_tables_for_reopen().
    
    Test case added to information_schema_inno.test.
    9bd8a62d
information_schema_inno.test 3.6 KB