• Monty's avatar
    MDEV-24576 Atomic CREATE TABLE · 6aa9a552
    Monty authored
    There are a few different cases to consider
    
    Logging of CREATE TABLE and CREATE TABLE ... LIKE
    - If REPLACE is used and there was an existing table, DDL log the drop of
      the table.
    - If discovery of table is to be done
        - DDL LOG create table
      else
        - DDL log create table (with engine type)
        - create the table
    - If table was created
      - Log entry to binary log with xid
      - Mark DDL log completed
    
    Crash recovery:
    - If query was in binary log do nothing and exit
    - If discoverted table
       - Delete the .frm file
    -else
       - Drop created table and frm file
    - If table was dropped, write a DROP TABLE statement in binary log
    
    CREATE TABLE ... SELECT required a little more work as when one is using
    statement logging the query is written to the binary log before commit is
    done.
    This was fixed by adding a DROP TABLE to the binary log during crash
    recovery if the ddl log entry was not closed. In this case the binary log
    will contain:
    CREATE TABLE xxx ... SELECT ....
    DROP TABLE xxx;
    
    Other things:
    - Added debug_crash_here() functionality to Aria to be able to test
      crash in create table between the creation of the .MAI and the .MAD files.
    6aa9a552
binlog_mysqlbinlog2.test 12.6 KB