1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

Added support for a LOCK TABLES...WHERE ENGINE = InnoDB query which sets

transactional table locks to tables mentioned in the query. These locks
are released at the end of the transaction automatically.
This is fix for bugs #5655, #5998 and issue #3762.




innobase/include/lock0lock.h:
  Added a new lock type LOCK_TABLE_TRANSACTIONAL.
innobase/include/trx0trx.h:
  Added a varible to store the number of transactional table locks
  reserved by the transaction and stored in the trx_locks list.
innobase/lock/lock0lock.c:
  Added a lock type LOCK_TABLE_TRANSACTIONAL.
innobase/row/row0mysql.c:
  Added support for a transactional table lock.
innobase/trx/trx0roll.c:
  Make compiler happy and format function.
innobase/trx/trx0trx.c:
  Added information about number of explicit and transactional table locks in
  the innodb monitor.
sql/ha_innodb.cc:
  Added support for a LOCK_TABLE_TRANSACTIONAL table lock (SQLCOM_LOCK_TABLES_TRANSACTIONAL).
  Transactional table locks are taken in the function ::transactional_table_lock().
sql/ha_innodb.h:
  Added prototype for a function trandactional_table_lock().
sql/handler.h:
  Added prototype for a virtual function transactional_table_lock().
  Handler does not need to implement this function.
sql/lock.cc:
  Added a function transactional_lock_tables() to lock all tables in the list
  with transactional table lock. These locks can cause a deadlock and
  this error should be reported back to user.
sql/mysql_priv.h:
  Added prototype for a function transactional_lock_tables().
sql/sql_lex.h:
  Added SQLCOM_LOCK_TABLES_TRANSACTIONAL command.
sql/sql_parse.cc:
  Added SQLCOM_LOCK_TABLES_TRANSACTIONAL command.
sql/sql_yacc.yy:
  Added parsing rules for a LOCK TABLES...WHERE ENGINE = x;
This commit is contained in:
unknown
2004-12-09 11:10:45 +02:00
parent f88e0d9c07
commit 0f99fe728e
14 changed files with 248 additions and 20 deletions

View File

@@ -450,6 +450,7 @@ public:
{ return extra(operation); }
virtual int reset() { return extra(HA_EXTRA_RESET); }
virtual int external_lock(THD *thd, int lock_type)=0;
virtual int transactional_table_lock(THD *thd, int lock_type) {return 0;}
virtual void unlock_row() {}
virtual int start_stmt(THD *thd) {return 0;}
/*