• Konstantin Osipov's avatar
    Backport of: · 3104af49
    Konstantin Osipov authored
    ----------------------------------------------------------
    revno: 2630.10.1
    committer: Konstantin Osipov <konstantin@mysql.com>
    branch nick: mysql-6.0-lock-tables-tidyup
    timestamp: Wed 2008-06-11 15:49:58 +0400
    message:
      WL#3726, review fixes.
      Now that we have metadata locks, we don't need to keep a crippled
      TABLE instance in the table cache to indicate that a table is locked.
      Remove all code that used this technique. Instead, rely on metadata
      locks and use the standard open_table() and close_thread_table()
      to manipulate with the table cache tables.
      Removes a list of functions that have become unused (see the comment
      for sql_base.cc for details).
      Under LOCK TABLES, keep a TABLE_LIST instance for each table
      that may be temporarily closed. For that, implement an own class for
      LOCK TABLES mode, Locked_tables_list.
    
    This is a pre-requisite patch for WL#4144.
    This is not exactly a backport: there is no new 
    online ALTER table in Celosia, so the old alter table
    code was changed to work with the new table cache API.
    
    
    mysql-test/r/lock.result:
      Update results (WL#3726 post-review patch).
    mysql-test/r/trigger-compat.result:
      We take the table from the table cache now, thus no warning.
    mysql-test/suite/rpl/r/rpl_trigger.result:
      We take the table from the table cache now, thus no warning.
    mysql-test/t/lock.test:
      Additional tests for LOCK TABLES mode (previously not covered by
      the test suite (WL#3726).
    sql/field.h:
      Remove reopen_table().
    sql/lock.cc:
      Remove an obsolete parameter of mysql_lock_remove().
      It's not used anywhere now either.
    sql/mysql_priv.h:
      Add 4 new open_table() flags.
      Remove declarations of removed functions.
    sql/sp_head.cc:
      Rename thd->mdl_el_root to thd->locked_tables_root.
    sql/sql_acl.cc:
      Use the new implementation of unlock_locked_tables().
    sql/sql_base.cc:
      Implement class Locked_tables_list.
      Implement close_all_tables_for_name().
      Rewrite close_cached_tables() to use the new reopen_tables().
      Remove reopen_table(), reopen_tables(), reopen_table_entry() 
      (ex. open_unireg_entry()), close_data_files_and_leave_as_placeholders(),
      close_handle_and_leave_table_as_placeholder(), close_cached_table(),
      table_def_change_share(), reattach_merge(), reopen_name_locked_table(),
      unlink_open_table().
      
      Move acquisition of a metadata lock into an own function
      - open_table_get_mdl_lock().
    sql/sql_class.cc:
      Deploy class Locked_tables_list.
    sql/sql_class.h:
      Declare class Locked_tables_list.
      Keep one instance of this class in class THD.
      Rename mdl_el_root to locked_tables_root.
    sql/sql_db.cc:
      Update a comment.
    sql/sql_insert.cc:
      Use the plain open_table() to open a just created table in
      CREATE TABLE .. SELECT.
    sql/sql_parse.cc:
      Use thd->locked_tables_list to enter and leave LTM_LOCK_TABLES mode.
    sql/sql_partition.cc:
      Deploy the new method of working with partitioned table locks.
    sql/sql_servers.cc:
      Update to the new signature of unlock_locked_tables().
    sql/sql_table.cc:
      In mysql_rm_table_part2(), the branch that removes a table under
      LOCK TABLES, make sure that the table being dropped
      is also removed from THD::locked_tables_list.
      Update ALTER TABLE and CREATE TABLE LIKE implementation to use
      open_table() and close_all_tables_for_name() instead of 
      reopen_tables().
    sql/sql_trigger.cc:
      Use the new locking way.
    sql/table.h:
      Add TABLE::pos_in_locked_tables, which is used only under
      LOCK TABLES.
    3104af49
sql_base.cc 267 KB