• Marko Mäkelä's avatar
    MDEV-18518 Multi-table CREATE and DROP transactions for InnoDB · 52aac131
    Marko Mäkelä authored
    InnoDB used to support at most one CREATE TABLE or DROP TABLE
    per transaction. This caused complications for DDL operations on
    partitioned tables (where each partition is treated as a separate
    table by InnoDB) and FULLTEXT INDEX (where each index is maintained
    in a number of internal InnoDB tables).
    
    dict_drop_index_tree(): Extend the MDEV-24589 logic and treat
    the purge or rollback of SYS_INDEXES records of clustered indexes
    specially: by dropping the tablespace if it exists. This is the only
    form of recovery that we will need.
    
    trx_undo_ddl_type: Document the DDL undo log record types better.
    
    trx_t::dict_operation: Change the type to bool.
    
    trx_t::ddl: Remove.
    
    trx_t::table_id, trx_undo_t::table_id: Remove.
    
    dict_build_table_def_step(): Remove trx_t::table_id logging.
    
    dict_table_close_and_drop(), row_merge_drop_table(): Remove.
    
    row_merge_lock_table(): Merged to the only callers, which can
    call lock_table_for_trx() directly.
    
    fts_aux_table_t, fts_aux_id, fts_space_set_t: Remove.
    
    fts_drop_orphaned_tables(): Remove.
    
    row_merge_rename_index_to_drop(): Remove. Thanks to MDEV-24589,
    we can simply delete the to-be-dropped indexes from SYS_INDEXES,
    while still being able to roll back the operation.
    
    ha_innobase_inplace_ctx: Make a few data members const.
    Preallocate trx.
    
    prepare_inplace_alter_table_dict(): Simplify the logic. Let the
    normal rollback take care of some cleanup.
    
    row_undo_ins_remove_clust_rec(): Simplify the parsing of SYS_COLUMNS.
    
    trx_rollback_active(): Remove the special DROP TABLE logic.
    
    trx_undo_mem_create_at_db_start(), trx_undo_reuse_cached():
    Always write TRX_UNDO_TABLE_ID as 0.
    52aac131
row0undo.cc 16.2 KB