mirror of
https://github.com/MariaDB/server.git
synced 2025-10-24 07:13:33 +03:00
Merged recent changes from mysql-5.5-bugteam into
mysql-5.5-runtime tree.
This commit is contained in:
@@ -600,3 +600,10 @@ NULL
|
||||
SELECT -9223372036854775808 MOD -1;
|
||||
-9223372036854775808 MOD -1
|
||||
0
|
||||
#
|
||||
# Bug #57209 valgrind + Assertion failed: dst > buf
|
||||
#
|
||||
SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821)))
|
||||
as foo;
|
||||
foo
|
||||
2
|
||||
|
||||
@@ -8,7 +8,7 @@ mysql.db OK
|
||||
mysql.event OK
|
||||
mysql.func OK
|
||||
mysql.general_log
|
||||
note : The storage engine for the table doesn't support optimize
|
||||
note : The storage engine for the table doesn't support analyze
|
||||
mysql.help_category OK
|
||||
mysql.help_keyword OK
|
||||
mysql.help_relation OK
|
||||
@@ -21,7 +21,7 @@ mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log
|
||||
note : The storage engine for the table doesn't support optimize
|
||||
note : The storage engine for the table doesn't support analyze
|
||||
mysql.tables_priv OK
|
||||
mysql.time_zone OK
|
||||
mysql.time_zone_leap_second OK
|
||||
@@ -29,6 +29,8 @@ mysql.time_zone_name OK
|
||||
mysql.time_zone_transition OK
|
||||
mysql.time_zone_transition_type OK
|
||||
mysql.user OK
|
||||
mtr.global_suppressions Table is already up to date
|
||||
mtr.test_suppressions Table is already up to date
|
||||
mysql.columns_priv OK
|
||||
mysql.db OK
|
||||
mysql.event OK
|
||||
@@ -55,10 +57,64 @@ mysql.time_zone_name OK
|
||||
mysql.time_zone_transition OK
|
||||
mysql.time_zone_transition_type OK
|
||||
mysql.user OK
|
||||
mysql.columns_priv OK
|
||||
mysql.db OK
|
||||
mysql.event OK
|
||||
mysql.func OK
|
||||
mysql.general_log
|
||||
note : The storage engine for the table doesn't support analyze
|
||||
mysql.help_category OK
|
||||
mysql.help_keyword OK
|
||||
mysql.help_relation OK
|
||||
mysql.help_topic OK
|
||||
mysql.host OK
|
||||
mysql.ndb_binlog_index OK
|
||||
mysql.plugin OK
|
||||
mysql.proc OK
|
||||
mysql.procs_priv OK
|
||||
mysql.proxy_priv OK
|
||||
mysql.servers OK
|
||||
mysql.slow_log
|
||||
note : The storage engine for the table doesn't support analyze
|
||||
mysql.tables_priv OK
|
||||
mysql.time_zone OK
|
||||
mysql.time_zone_leap_second OK
|
||||
mysql.time_zone_name OK
|
||||
mysql.time_zone_transition OK
|
||||
mysql.time_zone_transition_type OK
|
||||
mysql.user OK
|
||||
mysql.columns_priv Table is already up to date
|
||||
mysql.db Table is already up to date
|
||||
mysql.event Table is already up to date
|
||||
mysql.func Table is already up to date
|
||||
mysql.general_log
|
||||
note : The storage engine for the table doesn't support optimize
|
||||
mysql.help_category Table is already up to date
|
||||
mysql.help_keyword Table is already up to date
|
||||
mysql.help_relation Table is already up to date
|
||||
mysql.help_topic Table is already up to date
|
||||
mysql.host Table is already up to date
|
||||
mysql.ndb_binlog_index Table is already up to date
|
||||
mysql.plugin Table is already up to date
|
||||
mysql.proc Table is already up to date
|
||||
mysql.procs_priv Table is already up to date
|
||||
mysql.proxy_priv Table is already up to date
|
||||
mysql.servers Table is already up to date
|
||||
mysql.slow_log
|
||||
note : The storage engine for the table doesn't support optimize
|
||||
mysql.tables_priv Table is already up to date
|
||||
mysql.time_zone Table is already up to date
|
||||
mysql.time_zone_leap_second Table is already up to date
|
||||
mysql.time_zone_name Table is already up to date
|
||||
mysql.time_zone_transition Table is already up to date
|
||||
mysql.time_zone_transition_type Table is already up to date
|
||||
mysql.user Table is already up to date
|
||||
create table t1 (a int);
|
||||
create view v1 as select * from t1;
|
||||
test.t1 OK
|
||||
test.t1 Table is already up to date
|
||||
test.t1 OK
|
||||
test.t1 Table is already up to date
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create table `t``1`(a int);
|
||||
@@ -127,6 +183,7 @@ Tables_in_test
|
||||
t1
|
||||
#mysql50#v-1
|
||||
v1
|
||||
test.t1 OK
|
||||
show tables;
|
||||
Tables_in_test
|
||||
t1
|
||||
@@ -200,3 +257,6 @@ Tables_in_test (t1-1)
|
||||
t1-1
|
||||
drop table `t1-1`;
|
||||
End of 5.1 tests
|
||||
#
|
||||
# Bug #35269: mysqlcheck behaves different depending on order of parameters
|
||||
#
|
||||
|
||||
7
mysql-test/r/plugin_load_option.result
Normal file
7
mysql-test/r/plugin_load_option.result
Normal file
@@ -0,0 +1,7 @@
|
||||
UNINSTALL PLUGIN example;
|
||||
ERROR HY000: Plugin 'example' is force_plus_permanent and can not be unloaded
|
||||
SELECT PLUGIN_NAME, PLUGIN_STATUS, LOAD_OPTION FROM INFORMATION_SCHEMA.PLUGINS
|
||||
WHERE PLUGIN_NAME IN ('MyISAM', 'EXAMPLE');
|
||||
PLUGIN_NAME PLUGIN_STATUS LOAD_OPTION
|
||||
MyISAM ACTIVE FORCE
|
||||
EXAMPLE ACTIVE FORCE_PLUS_PERMANENT
|
||||
@@ -5,20 +5,24 @@ drop table if exists t1;
|
||||
create table t1 (a varchar(100));
|
||||
insert into t1 values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'),('bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb');
|
||||
Activate debug hook and attempt to retrieve the statement from the cache.
|
||||
set session debug='+d,wait_in_query_cache_insert';
|
||||
set debug_sync="wait_in_query_cache_insert SIGNAL parked WAIT_FOR go";
|
||||
select SQL_CACHE * from t1;;
|
||||
set debug_sync="now WAIT_FOR parked";
|
||||
On a second connection; clear the query cache.
|
||||
show status like 'Qcache_queries_in_cache';
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
set global query_cache_size= 0;
|
||||
Signal the debug hook to release the lock.
|
||||
select id from information_schema.processlist where state='wait_in_query_cache_insert' into @thread_id;
|
||||
kill query @thread_id;
|
||||
set debug_sync="now SIGNAL go";
|
||||
Show query cache status.
|
||||
show status like 'Qcache_queries_in_cache';
|
||||
Variable_name Value
|
||||
Qcache_queries_in_cache 0
|
||||
a
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||
set debug_sync= 'RESET';
|
||||
set global query_cache_size= 0;
|
||||
use test;
|
||||
drop table t1;
|
||||
@@ -32,11 +36,12 @@ SET GLOBAL concurrent_insert= 1;
|
||||
SET GLOBAL query_cache_size= 1024*512;
|
||||
SET GLOBAL query_cache_type= ON;
|
||||
# Switch to connection con1
|
||||
SET SESSION debug='+d,wait_after_query_cache_invalidate';
|
||||
SET DEBUG_SYNC = "wait_after_query_cache_invalidate SIGNAL parked WAIT_FOR go";
|
||||
# Send concurrent insert, will wait in the query cache table invalidate
|
||||
INSERT INTO t1 VALUES (4);
|
||||
# Switch to connection default
|
||||
# Wait for concurrent insert to reach the debug point
|
||||
SET DEBUG_SYNC = "now WAIT_FOR parked";
|
||||
# Switch to connection con2
|
||||
# Send SELECT that shouldn't be cached
|
||||
SELECT * FROM t1;
|
||||
@@ -46,9 +51,7 @@ a
|
||||
3
|
||||
# Switch to connection default
|
||||
# Notify the concurrent insert to proceed
|
||||
SELECT ID FROM INFORMATION_SCHEMA.PROCESSLIST
|
||||
WHERE STATE = 'wait_after_query_cache_invalidate' INTO @thread_id;
|
||||
KILL QUERY @thread_id;
|
||||
SET DEBUG_SYNC = "now SIGNAL go";
|
||||
# Switch to connection con1
|
||||
# Gather insert result
|
||||
SHOW STATUS LIKE "Qcache_queries_in_cache";
|
||||
@@ -66,6 +69,7 @@ Variable_name Value
|
||||
Qcache_queries_in_cache 1
|
||||
# Disconnect
|
||||
# Restore defaults
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
RESET QUERY CACHE;
|
||||
DROP TABLE t1,t2;
|
||||
SET GLOBAL concurrent_insert= DEFAULT;
|
||||
@@ -108,43 +112,48 @@ bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
|
||||
** before the mutex lock in invalidate_table_internal.
|
||||
** This will allow new result sets to be written into the QC.
|
||||
**
|
||||
SET SESSION debug='+d,wait_in_query_cache_invalidate1';
|
||||
SET SESSION debug='+d,wait_in_query_cache_invalidate2';
|
||||
SET DEBUG_SYNC="wait_in_query_cache_invalidate1 SIGNAL parked1_1 WAIT_FOR go1_1";
|
||||
SET DEBUG_SYNC="wait_in_query_cache_invalidate2 SIGNAL parked1_2 WAIT_FOR go1_2";
|
||||
DELETE FROM t1 WHERE a like '%a%';;
|
||||
=================================== Connection default
|
||||
** Assert that the expect process status is obtained.
|
||||
SET DEBUG_SYNC="now WAIT_FOR parked1_1";
|
||||
**
|
||||
=================================== Connection thd2
|
||||
** On THD2: Insert a result into the cache. This attempt will be blocked
|
||||
** because of a debug hook placed just before the mutex lock after which
|
||||
** the first part of the result set is written.
|
||||
SET SESSION debug='+d,wait_in_query_cache_insert';
|
||||
SET DEBUG_SYNC="wait_in_query_cache_insert SIGNAL parked2 WAIT_FOR go2 EXECUTE 1";
|
||||
SELECT SQL_CACHE * FROM t2 UNION SELECT * FROM t3;
|
||||
=================================== Connection default
|
||||
** Assert that the SELECT-stmt thread reaches the sync point.
|
||||
SET DEBUG_SYNC="now WAIT_FOR parked2";
|
||||
**
|
||||
**
|
||||
=================================== Connection thd3
|
||||
** On THD3: Insert another result into the cache and block on the same
|
||||
** debug hook.
|
||||
SET SESSION debug='+d,wait_in_query_cache_insert';
|
||||
SELECT SQL_CACHE * FROM t4 UNION SELECT * FROM t5;;
|
||||
SET DEBUG_SYNC="wait_in_query_cache_insert SIGNAL parked3 WAIT_FOR go3 EXECUTE 1";
|
||||
SELECT SQL_CACHE * FROM t4 UNION SELECT * FROM t5;
|
||||
=================================== Connection default
|
||||
** Assert that the two SELECT-stmt threads to reach the hook.
|
||||
** Assert that the SELECT-stmt thread reaches the sync point.
|
||||
SET DEBUG_SYNC="now WAIT_FOR parked3";
|
||||
**
|
||||
**
|
||||
** Signal the DELETE thread, THD1, to continue. It will enter the mutex
|
||||
** lock and set query cache status to TABLE_FLUSH_IN_PROGRESS and then
|
||||
** unlock the mutex before stopping on the next debug hook.
|
||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_invalidate1' LIMIT 1 INTO @flush_thread_id;
|
||||
KILL QUERY @flush_thread_id;
|
||||
SET DEBUG_SYNC="now SIGNAL go1_1";
|
||||
** Assert that we reach the next debug hook.
|
||||
SET DEBUG_SYNC="now WAIT_FOR parked1_2";
|
||||
**
|
||||
** Signal the remaining debug hooks blocking THD2 and THD3.
|
||||
** The threads will grab the guard mutex enter the wait condition and
|
||||
** and finally release the mutex. The threads will continue to wait
|
||||
** until a broadcast signal reaches them causing both threads to
|
||||
** come alive and check the condition.
|
||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_insert' ORDER BY id ASC LIMIT 1 INTO @thread_id;
|
||||
KILL QUERY @thread_id;
|
||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_insert' ORDER BY id DESC LIMIT 1 INTO @thread_id;
|
||||
KILL QUERY @thread_id;
|
||||
SET DEBUG_SYNC="now SIGNAL go2";
|
||||
SET DEBUG_SYNC="now SIGNAL go3";
|
||||
**
|
||||
** Finally signal the DELETE statement on THD1 one last time.
|
||||
** The stmt will complete the query cache invalidation and return
|
||||
@@ -152,8 +161,7 @@ KILL QUERY @thread_id;
|
||||
** One signal will be sent to the thread group waiting for executing
|
||||
** invalidations and a broadcast signal will be sent to the thread
|
||||
** group holding result set writers.
|
||||
SELECT SQL_NO_CACHE id FROM information_schema.processlist WHERE state='wait_in_query_cache_invalidate2' LIMIT 1 INTO @flush_thread_id;
|
||||
KILL QUERY @flush_thread_id;
|
||||
SET DEBUG_SYNC="now SIGNAL go1_2";
|
||||
**
|
||||
*************************************************************************
|
||||
** No tables should be locked
|
||||
@@ -172,6 +180,7 @@ DELETE FROM t4;
|
||||
DELETE FROM t5;
|
||||
=================================== Connection thd1
|
||||
** Done.
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
SET GLOBAL query_cache_size= 0;
|
||||
# Restore defaults
|
||||
RESET QUERY CACHE;
|
||||
@@ -179,3 +188,35 @@ FLUSH STATUS;
|
||||
DROP TABLE t1,t2,t3,t4,t5;
|
||||
SET GLOBAL query_cache_size= DEFAULT;
|
||||
SET GLOBAL query_cache_type= DEFAULT;
|
||||
#
|
||||
# Bug#56822: Add a thread state for sessions waiting on the query cache lock
|
||||
#
|
||||
SET @old_query_cache_size= @@GLOBAL.query_cache_size;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SET GLOBAL concurrent_insert= 1;
|
||||
SET GLOBAL query_cache_size= 1024*512;
|
||||
SET GLOBAL query_cache_type= ON;
|
||||
# Switch to connection con1
|
||||
SET DEBUG_SYNC = "wait_in_query_cache_invalidate2 SIGNAL parked WAIT_FOR go";
|
||||
# Send INSERT, will wait in the query cache table invalidation
|
||||
INSERT INTO t1 VALUES (4);;
|
||||
# Switch to connection default
|
||||
# Wait for insert to reach the debug point
|
||||
SET DEBUG_SYNC = "now WAIT_FOR parked";
|
||||
# Switch to connection con2
|
||||
# Send a query that should wait on the query cache lock
|
||||
RESET QUERY CACHE;
|
||||
# Switch to connection default
|
||||
# Wait for the state to be reflected in the processlist
|
||||
# Signal that the query cache can be unlocked
|
||||
SET DEBUG_SYNC="now SIGNAL go";
|
||||
# Reap con1 and disconnect
|
||||
# Reap con2 and disconnect
|
||||
# Restore defaults
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
RESET QUERY CACHE;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL query_cache_size= DEFAULT;
|
||||
SET GLOBAL query_cache_type= DEFAULT;
|
||||
|
||||
@@ -680,5 +680,17 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t2 const PRIMARY PRIMARY 8 const 1 Using index
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#57095: Wrongly chosen expression cache type led to a wrong
|
||||
# result.
|
||||
#
|
||||
CREATE TABLE t1 (`b` datetime );
|
||||
INSERT INTO t1 VALUES ('2010-01-01 00:00:00'), ('2010-01-01 00:00:00');
|
||||
SELECT * FROM t1 WHERE b <= coalesce(NULL, now());
|
||||
b
|
||||
2010-01-01 00:00:00
|
||||
2010-01-01 00:00:00
|
||||
DROP TABLE t1;
|
||||
#
|
||||
#
|
||||
# End of 5.5 tests
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user