Commit 7c7ea371 authored by unknown's avatar unknown
Browse files

Apply InnoDB snapshot ss923

Fixes:
- Bug #18077: InnoDB uses full explicit table locks in stored FUNCTION


sql/ha_innodb.cc:
  Apply InnoDB snapshot ss923
  
  Revision r922:
  ha_innobase::store_lock(): When downgrading table locks, do not
  check thd->in_lock_tables but test if
  thd->lex->sql_command == SQLCOM_LOCK_TABLES
  instead.  Otherwise, stored functions will use table locks.  (Bug #18077)
parent 665d1692
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -6563,7 +6563,8 @@ ha_innobase::store_lock(
	     && lock_type != TL_IGNORE)) {

		/* The OR cases above are in this order:
		1) MySQL is doing LOCK TABLES ... READ LOCAL, or
		1) MySQL is doing LOCK TABLES ... READ LOCAL, or we
		are processing a stored procedure or function, or
		2) (we do not know when TL_READ_HIGH_PRIORITY is used), or
		3) this is a SELECT ... IN SHARE MODE, or
		4) we are doing a complex SQL statement like
@@ -6625,7 +6626,8 @@ ha_innobase::store_lock(
		single transaction stored procedure call deterministic
		(if it does not use a consistent read). */

		if (lock_type == TL_READ && thd->in_lock_tables) {
		if (lock_type == TL_READ
		    && thd->lex->sql_command == SQLCOM_LOCK_TABLES) {
			/* We come here if MySQL is processing LOCK TABLES
			... READ LOCAL. MyISAM under that table lock type
			reads the table as it was at the time the lock was
@@ -6684,8 +6686,7 @@ ha_innobase::store_lock(
		(MySQL does have thd->in_lock_tables TRUE there). */

		if (lock_type == TL_READ_NO_INSERT
		    && (!thd->in_lock_tables
			|| thd->lex->sql_command == SQLCOM_CALL)) {
		    && thd->lex->sql_command != SQLCOM_LOCK_TABLES) {

			lock_type = TL_READ;
		}