• Mattias Jonsson's avatar
    Bug#49907: ALTER TABLE ... TRUNCATE PARTITION does not wait for · 4b20ccaf
    Mattias Jonsson authored
               locks on the table
    
    Fixing the partitioning specifics after TRUNCATE TABLE in
    bug-42643 was fixed.
    
    Reorganize of code to decrease the size of the giant switch
    in mysql_execute_command, and to prepare for future parser
    reengineering. Moved code into Sql_statement objects.
    
    Updated patch according to davi's review comments.
    
    libmysqld/CMakeLists.txt:
      Added new files.
    libmysqld/Makefile.am:
      Added new files.
    mysql-test/r/not_partition.result:
      now returning error on partitioning commands
      if partitioning is not enabled.
    mysql-test/r/partition_disabled.result:
      There is no partition handlerton, so it cannot
      find the specified engine in the .frm file.
    mysql-test/r/partition_truncate.result:
      Updated test results.
    mysql-test/suite/parts/inc/partition_mgm.inc:
      Added check that TRUNCATE PARTITION does not delete on failure.
    mysql-test/suite/parts/r/partition_debug_sync_innodb.result:
      updated results.
    mysql-test/suite/parts/r/partition_mgm_lc0_archive.result:
      updated results.
    mysql-test/suite/parts/r/partition_mgm_lc1_archive.result:
      updated results.
    mysql-test/suite/parts/r/partition_mgm_lc2_archive.result:
      updated results.
    mysql-test/suite/parts/t/partition_debug_sync_innodb.test:
      Test case for this bug.
    mysql-test/t/not_partition.test:
      Added check for TRUNCATE PARTITION without partitioning.
    mysql-test/t/partition_truncate.test:
      Added test of TRUNCATE PARTITION on non partitioned table.
    sql/CMakeLists.txt:
      Added new files.
    sql/Makefile.am:
      Added new files.
    sql/datadict.cc:
      Moved out the storage engine check into an own
      function, including assert for lock.
    sql/datadict.h:
      added dd_frm_storage_engine.
    sql/sql_alter_table.cc:
      moved the code for SQLCOM_ALTER_TABLE in mysql_execute_command
      into its own file, and using the Sql_statement object to
      prepare for future parser reengineering.
    sql/sql_alter_table.h:
      Created Sql_statement object for ALTER TABLE.
    sql/sql_lex.cc:
      resetting m_stmt.
    sql/sql_lex.h:
      Temporary hack for forward declaration of enum_alter_table_change_level.
    sql/sql_parse.cc:
      Moved out ALTER/ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE
      from the giant switch into their own Sql_statement
      objects.
    sql/sql_parse.h:
      Exporting check_merge_table_access.
    sql/sql_partition_admin.cc:
      created Sql_statement for
      ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR/TRUNCATE
      PARTITION. To be able to reuse the TABLE equivalents.
    sql/sql_partition_admin.h:
      Added Sql_statement of partition admin statements.
    sql/sql_table.cc:
      Moved table maintenance code into sql_table_maintenance.cc
    sql/sql_table.h:
      Moved table maintenance code into sql_table_maintenance.h
      exporting functions used by sql_table_maintenance.
    sql/sql_table_maintenance.cc:
      Moved table maintenance code from sql_table.cc
    sql/sql_table_maintenance.h:
      Sql_statement objects for ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE.
      Also declaring the keycache functions.
    sql/sql_truncate.cc:
      Moved code from SQLCOM_TRUNCATE in mysql_execute_command into
      Truncate_statement::execute.
      Added check for partitioned table on TRUNCATE PARTITION.
      Moved locking fix for partitioned table into
      Alter_table_truncate_partition::execute.
    sql/sql_truncate.h:
      Truncate_statement declaration (sub class of Sql_statement).
    sql/sql_yacc.yy:
      Using the new Sql_statment objects.
    4b20ccaf
partition_truncate.test 809 Bytes