From 8026cd6202bd252dc9baac31d6c8bc39653bd637 Mon Sep 17 00:00:00 2001 From: Sergey Vojtovich Date: Tue, 7 Feb 2017 13:27:42 +0400 Subject: MDEV-11379, MDEV-11388 - [WAIT n|NOWAIT] Extended syntax so that it is now possible to set lock_wait_timeout for the following statements: SELECT ... FOR UPDATE [WAIT n|NOWAIT] SELECT ... LOCK IN SHARED MODE [WAIT n|NOWAIT] LOCK TABLE ... [WAIT n|NOWAIT] CREATE ... INDEX ON tbl_name (index_col_name, ...) [WAIT n|NOWAIT] ... ALTER TABLE tbl_name [WAIT n|NOWAIT] ... OPTIMIZE TABLE tbl_name [WAIT n|NOWAIT] DROP INDEX ... [WAIT n|NOWAIT] TRUNCATE TABLE tbl_name [WAIT n|NOWAIT] RENAME TABLE tbl_name [WAIT n|NOWAIT] ... DROP TABLE tbl_name [WAIT n|NOWAIT] ... Valid range of lock_wait_timeout and innodb_lock_wait_timeout was extended so that 0 is acceptable value (means no wait). This is amended AliSQL patch. We prefer Oracle syntax for [WAIT n|NOWAIT] instead of original [WAIT [n]|NO_WAIT]. --- sql/mdl.cc | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'sql/mdl.cc') diff --git a/sql/mdl.cc b/sql/mdl.cc index c05fdc0157b..e453ad956eb 100644 --- a/sql/mdl.cc +++ b/sql/mdl.cc @@ -2086,6 +2086,14 @@ MDL_context::acquire_lock(MDL_request *mdl_request, double lock_wait_timeout) */ lock= ticket->m_lock; + if (lock_wait_timeout == 0) + { + mysql_prlock_unlock(&lock->m_rwlock); + MDL_ticket::destroy(ticket); + my_error(ER_LOCK_WAIT_TIMEOUT, MYF(0)); + DBUG_RETURN(TRUE); + } + lock->m_waiting.add_ticket(ticket); /* -- cgit v1.2.1