Loading include/thr_lock.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ enum thr_lock_type { TL_IGNORE=-1, TL_WRITE_CONCURRENT_INSERT, /* Write used by INSERT DELAYED. Allows READ locks */ TL_WRITE_DELAYED, /* parser only! Late bound low_priority flag. At open_tables() becomes thd->update_lock_default. */ TL_WRITE_DEFAULT, /* WRITE lock that has lower priority than TL_READ */ TL_WRITE_LOW_PRIORITY, /* Normal WRITE lock */ Loading mysql-test/r/trigger.result +24 −0 Original line number Diff line number Diff line Loading @@ -1449,4 +1449,28 @@ isave 1 2 drop table t1, t2, t3; CREATE TABLE t1 (id INTEGER); CREATE TABLE t2 (id INTEGER); INSERT INTO t2 VALUES (1),(2); CREATE TRIGGER t1_test AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES (new.id); SELECT GET_LOCK('B26162',20); GET_LOCK('B26162',20) 1 SELECT 'rl_acquirer', GET_LOCK('B26162',5), id FROM t2 WHERE id = 1; SET SESSION LOW_PRIORITY_UPDATES=1; SET GLOBAL LOW_PRIORITY_UPDATES=1; INSERT INTO t1 VALUES (5); SELECT 'rl_contender', id FROM t2 WHERE id > 1; SELECT RELEASE_LOCK('B26162'); RELEASE_LOCK('B26162') 0 rl_acquirer GET_LOCK('B26162',5) id rl_acquirer 0 1 rl_contender id rl_contender 2 DROP TRIGGER t1_test; DROP TABLE t1,t2; SET SESSION LOW_PRIORITY_UPDATES=DEFAULT; SET GLOBAL LOW_PRIORITY_UPDATES=DEFAULT; End of 5.0 tests mysql-test/t/trigger.test +55 −0 Original line number Diff line number Diff line Loading @@ -1763,4 +1763,59 @@ select * from t1; select * from t3; drop table t1, t2, t3; # # Bug #26162: Trigger DML ignores low_priority_updates setting # CREATE TABLE t1 (id INTEGER); CREATE TABLE t2 (id INTEGER); INSERT INTO t2 VALUES (1),(2); # trigger that produces the high priority insert, but should be low, adding # LOW_PRIORITY fixes this CREATE TRIGGER t1_test AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES (new.id); CONNECT (rl_acquirer, localhost, root,,); CONNECT (wl_acquirer, localhost, root,,); CONNECT (rl_contender, localhost, root,,); SELECT GET_LOCK('B26162',20); CONNECTION rl_acquirer; --send SELECT 'rl_acquirer', GET_LOCK('B26162',5), id FROM t2 WHERE id = 1; CONNECTION wl_acquirer; SET SESSION LOW_PRIORITY_UPDATES=1; SET GLOBAL LOW_PRIORITY_UPDATES=1; --send INSERT INTO t1 VALUES (5); CONNECTION rl_contender; # must not "see" the row inserted by the INSERT (as it must run before the # INSERT) --send SELECT 'rl_contender', id FROM t2 WHERE id > 1; CONNECTION default; SELECT RELEASE_LOCK('B26162'); CONNECTION wl_acquirer; --reap CONNECTION rl_acquirer; --reap CONNECTION rl_contender; --reap CONNECTION default; DISCONNECT rl_acquirer; DISCONNECT wl_acquirer; DISCONNECT rl_contender; DROP TRIGGER t1_test; DROP TABLE t1,t2; SET SESSION LOW_PRIORITY_UPDATES=DEFAULT; SET GLOBAL LOW_PRIORITY_UPDATES=DEFAULT; --echo End of 5.0 tests sql/set_var.cc +5 −1 Original line number Diff line number Diff line Loading @@ -1226,7 +1226,11 @@ static void sys_default_ftb_syntax(THD *thd, enum_var_type type) static void fix_low_priority_updates(THD *thd, enum_var_type type) { if (type != OPT_GLOBAL) if (type == OPT_GLOBAL) thr_upgraded_concurrent_insert_lock= (global_system_variables.low_priority_updates ? TL_WRITE_LOW_PRIORITY : TL_WRITE); else thd->update_lock_default= (thd->variables.low_priority_updates ? TL_WRITE_LOW_PRIORITY : TL_WRITE); } Loading sql/sql_base.cc +7 −0 Original line number Diff line number Diff line Loading @@ -1505,6 +1505,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, HASH_SEARCH_STATE state; DBUG_ENTER("open_table"); DBUG_ASSERT (table_list->lock_type != TL_WRITE_DEFAULT); /* find a unused table in the open table cache */ if (refresh) *refresh=0; Loading Loading @@ -2674,6 +2675,12 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags) for (tables= *start; tables ;tables= tables->next_global) { safe_to_ignore_table= FALSE; // 'FALSE', as per coding style if (tables->lock_type == TL_WRITE_DEFAULT) { tables->lock_type= thd->update_lock_default; DBUG_ASSERT (tables->lock_type >= TL_WRITE_ALLOW_WRITE); } /* Ignore placeholders for derived tables. After derived tables processing, link to created temporary table will be put here. Loading Loading
include/thr_lock.h +5 −0 Original line number Diff line number Diff line Loading @@ -54,6 +54,11 @@ enum thr_lock_type { TL_IGNORE=-1, TL_WRITE_CONCURRENT_INSERT, /* Write used by INSERT DELAYED. Allows READ locks */ TL_WRITE_DELAYED, /* parser only! Late bound low_priority flag. At open_tables() becomes thd->update_lock_default. */ TL_WRITE_DEFAULT, /* WRITE lock that has lower priority than TL_READ */ TL_WRITE_LOW_PRIORITY, /* Normal WRITE lock */ Loading
mysql-test/r/trigger.result +24 −0 Original line number Diff line number Diff line Loading @@ -1449,4 +1449,28 @@ isave 1 2 drop table t1, t2, t3; CREATE TABLE t1 (id INTEGER); CREATE TABLE t2 (id INTEGER); INSERT INTO t2 VALUES (1),(2); CREATE TRIGGER t1_test AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES (new.id); SELECT GET_LOCK('B26162',20); GET_LOCK('B26162',20) 1 SELECT 'rl_acquirer', GET_LOCK('B26162',5), id FROM t2 WHERE id = 1; SET SESSION LOW_PRIORITY_UPDATES=1; SET GLOBAL LOW_PRIORITY_UPDATES=1; INSERT INTO t1 VALUES (5); SELECT 'rl_contender', id FROM t2 WHERE id > 1; SELECT RELEASE_LOCK('B26162'); RELEASE_LOCK('B26162') 0 rl_acquirer GET_LOCK('B26162',5) id rl_acquirer 0 1 rl_contender id rl_contender 2 DROP TRIGGER t1_test; DROP TABLE t1,t2; SET SESSION LOW_PRIORITY_UPDATES=DEFAULT; SET GLOBAL LOW_PRIORITY_UPDATES=DEFAULT; End of 5.0 tests
mysql-test/t/trigger.test +55 −0 Original line number Diff line number Diff line Loading @@ -1763,4 +1763,59 @@ select * from t1; select * from t3; drop table t1, t2, t3; # # Bug #26162: Trigger DML ignores low_priority_updates setting # CREATE TABLE t1 (id INTEGER); CREATE TABLE t2 (id INTEGER); INSERT INTO t2 VALUES (1),(2); # trigger that produces the high priority insert, but should be low, adding # LOW_PRIORITY fixes this CREATE TRIGGER t1_test AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t2 VALUES (new.id); CONNECT (rl_acquirer, localhost, root,,); CONNECT (wl_acquirer, localhost, root,,); CONNECT (rl_contender, localhost, root,,); SELECT GET_LOCK('B26162',20); CONNECTION rl_acquirer; --send SELECT 'rl_acquirer', GET_LOCK('B26162',5), id FROM t2 WHERE id = 1; CONNECTION wl_acquirer; SET SESSION LOW_PRIORITY_UPDATES=1; SET GLOBAL LOW_PRIORITY_UPDATES=1; --send INSERT INTO t1 VALUES (5); CONNECTION rl_contender; # must not "see" the row inserted by the INSERT (as it must run before the # INSERT) --send SELECT 'rl_contender', id FROM t2 WHERE id > 1; CONNECTION default; SELECT RELEASE_LOCK('B26162'); CONNECTION wl_acquirer; --reap CONNECTION rl_acquirer; --reap CONNECTION rl_contender; --reap CONNECTION default; DISCONNECT rl_acquirer; DISCONNECT wl_acquirer; DISCONNECT rl_contender; DROP TRIGGER t1_test; DROP TABLE t1,t2; SET SESSION LOW_PRIORITY_UPDATES=DEFAULT; SET GLOBAL LOW_PRIORITY_UPDATES=DEFAULT; --echo End of 5.0 tests
sql/set_var.cc +5 −1 Original line number Diff line number Diff line Loading @@ -1226,7 +1226,11 @@ static void sys_default_ftb_syntax(THD *thd, enum_var_type type) static void fix_low_priority_updates(THD *thd, enum_var_type type) { if (type != OPT_GLOBAL) if (type == OPT_GLOBAL) thr_upgraded_concurrent_insert_lock= (global_system_variables.low_priority_updates ? TL_WRITE_LOW_PRIORITY : TL_WRITE); else thd->update_lock_default= (thd->variables.low_priority_updates ? TL_WRITE_LOW_PRIORITY : TL_WRITE); } Loading
sql/sql_base.cc +7 −0 Original line number Diff line number Diff line Loading @@ -1505,6 +1505,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, HASH_SEARCH_STATE state; DBUG_ENTER("open_table"); DBUG_ASSERT (table_list->lock_type != TL_WRITE_DEFAULT); /* find a unused table in the open table cache */ if (refresh) *refresh=0; Loading Loading @@ -2674,6 +2675,12 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags) for (tables= *start; tables ;tables= tables->next_global) { safe_to_ignore_table= FALSE; // 'FALSE', as per coding style if (tables->lock_type == TL_WRITE_DEFAULT) { tables->lock_type= thd->update_lock_default; DBUG_ASSERT (tables->lock_type >= TL_WRITE_ALLOW_WRITE); } /* Ignore placeholders for derived tables. After derived tables processing, link to created temporary table will be put here. Loading