Merge olga.mysql.com:/home/igor/mysql-5.0-opt
into olga.mysql.com:/home/igor/mysql-5.1-opt-merge
This commit is contained in:
commit
a5011de0a8
@ -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 () {
|
|||||||
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
|
|||||||
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
|
|||||||
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
|
|||||||
|
|
||||||
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;
|
|||||||
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)
|
|||||||
|
|
||||||
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,
|
|||||||
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)
|
|||||||
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()
|
|||||||
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 @@ loop_out:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
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:
|
|||||||
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:
|
|||||||
};
|
};
|
||||||
|
|
||||||
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:
|
|||||||
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:
|
|||||||
| 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:
|
|||||||
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:
|
|||||||
|
|
||||||
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;
|
|||||||
#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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user