Commit e8cca8c7 authored by unknown's avatar unknown

Merge olga.mysql.com:/home/igor/mysql-5.0-opt

into  olga.mysql.com:/home/igor/mysql-5.1-opt-merge


include/thr_lock.h:
  Auto merged
mysql-test/mysql-test-run.pl:
  Auto merged
mysql-test/r/sp.result:
  Auto merged
mysql-test/r/trigger.result:
  Auto merged
mysql-test/t/sp.test:
  Auto merged
mysql-test/t/strict.test:
  Auto merged
mysql-test/t/subselect3.test:
  Auto merged
mysql-test/t/trigger.test:
  Auto merged
sql/mysqld.cc:
  Auto merged
sql/set_var.cc:
  Auto merged
sql/sp_head.cc:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_class.h:
  Auto merged
sql/sql_select.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_update.cc:
  Auto merged
sql/sql_yacc.yy:
  Auto merged
sql/udf_example.c:
  Auto merged
mysql-test/r/subselect.result:
  Manual merge.
mysql-test/t/subselect.test:
  Manual merge.
sql/sql_view.cc:
  Manual merge.
parents 148da401 fa3f2e77
...@@ -54,6 +54,11 @@ enum thr_lock_type { TL_IGNORE=-1, ...@@ -54,6 +54,11 @@ enum thr_lock_type { TL_IGNORE=-1,
TL_WRITE_CONCURRENT_INSERT, TL_WRITE_CONCURRENT_INSERT,
/* Write used by INSERT DELAYED. Allows READ locks */ /* Write used by INSERT DELAYED. Allows READ locks */
TL_WRITE_DELAYED, 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 */ /* WRITE lock that has lower priority than TL_READ */
TL_WRITE_LOW_PRIORITY, TL_WRITE_LOW_PRIORITY,
/* Normal WRITE lock */ /* Normal WRITE lock */
......
...@@ -1796,6 +1796,17 @@ sub environment_setup () { ...@@ -1796,6 +1796,17 @@ sub environment_setup () {
split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ()); split(':', $ENV{'DYLD_LIBRARY_PATH'}) : ());
mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}"); mtr_debug("DYLD_LIBRARY_PATH: $ENV{'DYLD_LIBRARY_PATH'}");
# The environment variable used for shared libs on AIX
$ENV{'SHLIB_PATH'}= join(":", @ld_library_paths,
$ENV{'SHLIB_PATH'} ?
split(':', $ENV{'SHLIB_PATH'}) : ());
mtr_debug("SHLIB_PATH: $ENV{'SHLIB_PATH'}");
# The environment variable used for shared libs on hp-ux
$ENV{'LIBPATH'}= join(":", @ld_library_paths,
$ENV{'LIBPATH'} ?
split(':', $ENV{'LIBPATH'}) : ());
mtr_debug("LIBPATH: $ENV{'LIBPATH'}");
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Also command lines in .opt files may contain env vars # Also command lines in .opt files may contain env vars
......
...@@ -4071,6 +4071,16 @@ id st ...@@ -4071,6 +4071,16 @@ id st
2 GA 2 GA
4 FL 4 FL
DROP TABLE t1,t2; DROP TABLE t1,t2;
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2);
EXPLAIN EXTENDED
SELECT * FROM (SELECT count(*) FROM t1 GROUP BY a) as res;
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> ALL NULL NULL NULL NULL 2
2 DERIVED t1 ALL NULL NULL NULL NULL 2 Using temporary; Using filesort
Warnings:
Note 1003 select `res`.`count(*)` AS `count(*)` from (select count(0) AS `count(*)` from `test`.`t1` group by `test`.`t1`.`a`) `res`
DROP TABLE t1;
End of 5.0 tests. End of 5.0 tests.
CREATE TABLE t1 (a int, b int); CREATE TABLE t1 (a int, b int);
INSERT INTO t1 VALUES (2,22),(1,11),(2,22); INSERT INTO t1 VALUES (2,22),(1,11),(2,22);
......
...@@ -1449,4 +1449,28 @@ isave ...@@ -1449,4 +1449,28 @@ isave
1 1
2 2
drop table t1, t2, t3; 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 End of 5.0 tests
...@@ -2906,6 +2906,20 @@ SELECT id, st FROM t1 ...@@ -2906,6 +2906,20 @@ SELECT id, st FROM t1
DROP TABLE t1,t2; DROP TABLE t1,t2;
#
# Bug #28728: crash with EXPLAIN EXTENDED for a query with a derived table
# over a grouping subselect
#
CREATE TABLE t1 (a int);
INSERT INTO t1 VALUES (1), (2);
EXPLAIN EXTENDED
SELECT * FROM (SELECT count(*) FROM t1 GROUP BY a) as res;
DROP TABLE t1;
--echo End of 5.0 tests. --echo End of 5.0 tests.
# #
......
...@@ -1763,4 +1763,59 @@ select * from t1; ...@@ -1763,4 +1763,59 @@ select * from t1;
select * from t3; select * from t3;
drop table t1, t2, 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 --echo End of 5.0 tests
...@@ -824,7 +824,11 @@ static void sys_default_ftb_syntax(THD *thd, enum_var_type type) ...@@ -824,7 +824,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) 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 ? thd->update_lock_default= (thd->variables.low_priority_updates ?
TL_WRITE_LOW_PRIORITY : TL_WRITE); TL_WRITE_LOW_PRIORITY : TL_WRITE);
} }
......
...@@ -2226,6 +2226,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, ...@@ -2226,6 +2226,7 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
HASH_SEARCH_STATE state; HASH_SEARCH_STATE state;
DBUG_ENTER("open_table"); DBUG_ENTER("open_table");
DBUG_ASSERT (table_list->lock_type != TL_WRITE_DEFAULT);
/* find a unused table in the open table cache */ /* find a unused table in the open table cache */
if (refresh) if (refresh)
*refresh=0; *refresh=0;
...@@ -3531,6 +3532,12 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags) ...@@ -3531,6 +3532,12 @@ int open_tables(THD *thd, TABLE_LIST **start, uint *counter, uint flags)
for (tables= *start; tables ;tables= tables->next_global) for (tables= *start; tables ;tables= tables->next_global)
{ {
safe_to_ignore_table= FALSE; // 'FALSE', as per coding style 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 Ignore placeholders for derived tables. After derived tables
processing, link to created temporary table will be put here. processing, link to created temporary table will be put here.
......
...@@ -2104,6 +2104,17 @@ JOIN::exec() ...@@ -2104,6 +2104,17 @@ JOIN::exec()
thd->examined_row_count+= curr_join->examined_rows; thd->examined_row_count+= curr_join->examined_rows;
DBUG_PRINT("counts", ("thd->examined_row_count: %lu", DBUG_PRINT("counts", ("thd->examined_row_count: %lu",
(ulong) thd->examined_row_count)); (ulong) thd->examined_row_count));
/*
With EXPLAIN EXTENDED we have to restore original ref_array
for a derived table which is always materialized.
Otherwise we would not be able to print the query correctly.
*/
if (items0 &&
(thd->lex->describe & DESCRIBE_EXTENDED) &&
select_lex->linkage == DERIVED_TABLE_TYPE)
set_items_ref_array(items0);
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
......
...@@ -825,6 +825,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view, ...@@ -825,6 +825,7 @@ static int mysql_register_view(THD *thd, TABLE_LIST *view,
} }
} }
} }
/* /*
Check that table of main select do not used in subqueries. Check that table of main select do not used in subqueries.
......
...@@ -8295,7 +8295,7 @@ insert_lock_option: ...@@ -8295,7 +8295,7 @@ insert_lock_option:
insert visible only after the table unlocking but everyone can insert visible only after the table unlocking but everyone can
read table. read table.
*/ */
$$= (Lex->sphead ? TL_WRITE :TL_WRITE_CONCURRENT_INSERT); $$= (Lex->sphead ? TL_WRITE_DEFAULT : TL_WRITE_CONCURRENT_INSERT);
#else #else
$$= TL_WRITE_CONCURRENT_INSERT; $$= TL_WRITE_CONCURRENT_INSERT;
#endif #endif
...@@ -8473,7 +8473,7 @@ insert_update_elem: ...@@ -8473,7 +8473,7 @@ insert_update_elem:
}; };
opt_low_priority: opt_low_priority:
/* empty */ { $$= YYTHD->update_lock_default; } /* empty */ { $$= TL_WRITE_DEFAULT; }
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }; | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; };
/* Delete rows from a table */ /* Delete rows from a table */
...@@ -8484,7 +8484,7 @@ delete: ...@@ -8484,7 +8484,7 @@ delete:
LEX *lex= Lex; LEX *lex= Lex;
lex->sql_command= SQLCOM_DELETE; lex->sql_command= SQLCOM_DELETE;
mysql_init_select(lex); mysql_init_select(lex);
lex->lock_option= lex->thd->update_lock_default; lex->lock_option= TL_WRITE_DEFAULT;
lex->ignore= 0; lex->ignore= 0;
lex->select_lex.init_order(); lex->select_lex.init_order();
} }
...@@ -9176,7 +9176,7 @@ opt_local: ...@@ -9176,7 +9176,7 @@ opt_local:
| LOCAL_SYM { $$=1;}; | LOCAL_SYM { $$=1;};
load_data_lock: load_data_lock:
/* empty */ { $$= YYTHD->update_lock_default; } /* empty */ { $$= TL_WRITE_DEFAULT; }
| CONCURRENT | CONCURRENT
{ {
#ifdef HAVE_QUERY_CACHE #ifdef HAVE_QUERY_CACHE
...@@ -9184,7 +9184,7 @@ load_data_lock: ...@@ -9184,7 +9184,7 @@ load_data_lock:
Ignore this option in SP to avoid problem with query cache Ignore this option in SP to avoid problem with query cache
*/ */
if (Lex->sphead != 0) if (Lex->sphead != 0)
$$= YYTHD->update_lock_default; $$= TL_WRITE_DEFAULT;
else else
#endif #endif
$$= TL_WRITE_CONCURRENT_INSERT; $$= TL_WRITE_CONCURRENT_INSERT;
...@@ -10546,7 +10546,7 @@ table_lock: ...@@ -10546,7 +10546,7 @@ table_lock:
lock_option: lock_option:
READ_SYM { $$=TL_READ_NO_INSERT; } READ_SYM { $$=TL_READ_NO_INSERT; }
| WRITE_SYM { $$=YYTHD->update_lock_default; } | WRITE_SYM { $$=TL_WRITE_DEFAULT; }
| LOW_PRIORITY WRITE_SYM { $$=TL_WRITE_LOW_PRIORITY; } | LOW_PRIORITY WRITE_SYM { $$=TL_WRITE_LOW_PRIORITY; }
| READ_SYM LOCAL_SYM { $$= TL_READ; } | READ_SYM LOCAL_SYM { $$= TL_READ; }
; ;
......
...@@ -130,7 +130,8 @@ typedef long long longlong; ...@@ -130,7 +130,8 @@ typedef long long longlong;
#include <m_string.h> /* To get strmov() */ #include <m_string.h> /* To get strmov() */
#else #else
/* when compiled as standalone */ /* when compiled as standalone */
#define strmov(a,b) strcpy(a,b) #include <string.h>
#define strmov(a,b) stpcpy(a,b)
#define bzero(a,b) memset(a,0,b) #define bzero(a,b) memset(a,0,b)
#define memcpy_fixed(a,b,c) memcpy(a,b,c) #define memcpy_fixed(a,b,c) memcpy(a,b,c)
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment