mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
Merge from 5.0-bugteam
This commit is contained in:
commit
e48c7178f7
6 changed files with 158 additions and 9 deletions
|
@ -67,10 +67,10 @@ a
|
||||||
2
|
2
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 3
|
Qcache_queries_in_cache 6
|
||||||
show status like "Qcache_hits";
|
show status like "Qcache_hits";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_hits 3
|
Qcache_hits 0
|
||||||
insert into t1 values (3);
|
insert into t1 values (3);
|
||||||
insert into t2 values (3);
|
insert into t2 values (3);
|
||||||
insert into t1 values (4);
|
insert into t1 values (4);
|
||||||
|
@ -91,14 +91,14 @@ a
|
||||||
2
|
2
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 1
|
Qcache_queries_in_cache 2
|
||||||
show status like "Qcache_hits";
|
show status like "Qcache_hits";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_hits 4
|
Qcache_hits 1
|
||||||
commit;
|
commit;
|
||||||
show status like "Qcache_queries_in_cache";
|
show status like "Qcache_queries_in_cache";
|
||||||
Variable_name Value
|
Variable_name Value
|
||||||
Qcache_queries_in_cache 1
|
Qcache_queries_in_cache 2
|
||||||
drop table t3,t2,t1;
|
drop table t3,t2,t1;
|
||||||
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id));
|
CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id));
|
||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
|
|
|
@ -1656,6 +1656,57 @@ Qcache_hits 1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
SET GLOBAL concurrent_insert= @save_concurrent_insert;
|
SET GLOBAL concurrent_insert= @save_concurrent_insert;
|
||||||
SET GLOBAL query_cache_size= default;
|
SET GLOBAL query_cache_size= default;
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
FLUSH STATUS;
|
||||||
|
SET GLOBAL query_cache_size=1048576;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
|
||||||
|
SHOW STATUS LIKE 'Qcache_queries_in_cache';
|
||||||
|
Variable_name Value
|
||||||
|
Qcache_queries_in_cache 0
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
COMMIT;
|
||||||
|
SHOW STATUS LIKE 'Qcache_queries_in_cache';
|
||||||
|
Variable_name Value
|
||||||
|
Qcache_queries_in_cache 2
|
||||||
|
SHOW STATUS LIKE "Qcache_hits";
|
||||||
|
Variable_name Value
|
||||||
|
Qcache_hits 0
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
COMMIT;
|
||||||
|
SHOW STATUS LIKE "Qcache_hits";
|
||||||
|
Variable_name Value
|
||||||
|
Qcache_hits 2
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL query_cache_size= default;
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
CREATE TABLE t1 (a ENUM('rainbow'));
|
CREATE TABLE t1 (a ENUM('rainbow'));
|
||||||
INSERT INTO t1 VALUES (),(),(),(),();
|
INSERT INTO t1 VALUES (),(),(),(),();
|
||||||
|
|
|
@ -1261,6 +1261,33 @@ DROP TABLE t1;
|
||||||
SET GLOBAL concurrent_insert= @save_concurrent_insert;
|
SET GLOBAL concurrent_insert= @save_concurrent_insert;
|
||||||
SET GLOBAL query_cache_size= default;
|
SET GLOBAL query_cache_size= default;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#36326: nested transaction and select
|
||||||
|
#
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
FLUSH STATUS;
|
||||||
|
SET GLOBAL query_cache_size=1048576;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1),(2),(3),(4),(5);
|
||||||
|
SHOW STATUS LIKE 'Qcache_queries_in_cache';
|
||||||
|
SELECT * FROM t1;
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
COMMIT;
|
||||||
|
SHOW STATUS LIKE 'Qcache_queries_in_cache';
|
||||||
|
SHOW STATUS LIKE "Qcache_hits";
|
||||||
|
SELECT * FROM t1;
|
||||||
|
BEGIN;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
COMMIT;
|
||||||
|
SHOW STATUS LIKE "Qcache_hits";
|
||||||
|
DROP TABLE t1;
|
||||||
|
SET GLOBAL query_cache_size= default;
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -862,6 +862,8 @@ struct Query_cache_query_flags
|
||||||
unsigned int client_protocol_41:1;
|
unsigned int client_protocol_41:1;
|
||||||
unsigned int result_in_binary_protocol:1;
|
unsigned int result_in_binary_protocol:1;
|
||||||
unsigned int more_results_exists:1;
|
unsigned int more_results_exists:1;
|
||||||
|
unsigned int in_trans:1;
|
||||||
|
unsigned int autocommit:1;
|
||||||
unsigned int pkt_nr;
|
unsigned int pkt_nr;
|
||||||
uint character_set_client_num;
|
uint character_set_client_num;
|
||||||
uint character_set_results_num;
|
uint character_set_results_num;
|
||||||
|
|
|
@ -1001,6 +1001,8 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
|
||||||
flags.result_in_binary_protocol= (unsigned int) thd->protocol->type();
|
flags.result_in_binary_protocol= (unsigned int) thd->protocol->type();
|
||||||
flags.more_results_exists= test(thd->server_status &
|
flags.more_results_exists= test(thd->server_status &
|
||||||
SERVER_MORE_RESULTS_EXISTS);
|
SERVER_MORE_RESULTS_EXISTS);
|
||||||
|
flags.in_trans= test(thd->server_status & SERVER_STATUS_IN_TRANS);
|
||||||
|
flags.autocommit= test(thd->server_status & SERVER_STATUS_AUTOCOMMIT);
|
||||||
flags.pkt_nr= net->pkt_nr;
|
flags.pkt_nr= net->pkt_nr;
|
||||||
flags.character_set_client_num=
|
flags.character_set_client_num=
|
||||||
thd->variables.character_set_client->number;
|
thd->variables.character_set_client->number;
|
||||||
|
@ -1022,7 +1024,7 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
|
||||||
long %d, 4.1: %d, bin_proto: %d, more results %d, pkt_nr: %d, \
|
long %d, 4.1: %d, bin_proto: %d, more results %d, pkt_nr: %d, \
|
||||||
CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
|
CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
|
||||||
sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \
|
sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \
|
||||||
def_week_frmt: %lu",
|
def_week_frmt: %lu, in_trans: %d, autocommit: %d",
|
||||||
(int)flags.client_long_flag,
|
(int)flags.client_long_flag,
|
||||||
(int)flags.client_protocol_41,
|
(int)flags.client_protocol_41,
|
||||||
(int)flags.result_in_binary_protocol,
|
(int)flags.result_in_binary_protocol,
|
||||||
|
@ -1037,7 +1039,10 @@ def_week_frmt: %lu",
|
||||||
flags.max_sort_length,
|
flags.max_sort_length,
|
||||||
flags.group_concat_max_len,
|
flags.group_concat_max_len,
|
||||||
flags.div_precision_increment,
|
flags.div_precision_increment,
|
||||||
flags.default_week_format));
|
flags.default_week_format,
|
||||||
|
(int)flags.in_trans,
|
||||||
|
(int)flags.autocommit));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Make InnoDB to release the adaptive hash index latch before
|
Make InnoDB to release the adaptive hash index latch before
|
||||||
acquiring the query cache mutex.
|
acquiring the query cache mutex.
|
||||||
|
@ -1269,6 +1274,8 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
|
||||||
flags.result_in_binary_protocol= (unsigned int)thd->protocol->type();
|
flags.result_in_binary_protocol= (unsigned int)thd->protocol->type();
|
||||||
flags.more_results_exists= test(thd->server_status &
|
flags.more_results_exists= test(thd->server_status &
|
||||||
SERVER_MORE_RESULTS_EXISTS);
|
SERVER_MORE_RESULTS_EXISTS);
|
||||||
|
flags.in_trans= test(thd->server_status & SERVER_STATUS_IN_TRANS);
|
||||||
|
flags.autocommit= test(thd->server_status & SERVER_STATUS_AUTOCOMMIT);
|
||||||
flags.pkt_nr= thd->net.pkt_nr;
|
flags.pkt_nr= thd->net.pkt_nr;
|
||||||
flags.character_set_client_num= thd->variables.character_set_client->number;
|
flags.character_set_client_num= thd->variables.character_set_client->number;
|
||||||
flags.character_set_results_num=
|
flags.character_set_results_num=
|
||||||
|
@ -1288,7 +1295,7 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
|
||||||
long %d, 4.1: %d, bin_proto: %d, more results %d, pkt_nr: %d, \
|
long %d, 4.1: %d, bin_proto: %d, more results %d, pkt_nr: %d, \
|
||||||
CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
|
CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
|
||||||
sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \
|
sql mode: 0x%lx, sort len: %lu, conncat len: %lu, div_precision: %lu, \
|
||||||
def_week_frmt: %lu",
|
def_week_frmt: %lu, in_trans: %d, autocommit: %d",
|
||||||
(int)flags.client_long_flag,
|
(int)flags.client_long_flag,
|
||||||
(int)flags.client_protocol_41,
|
(int)flags.client_protocol_41,
|
||||||
(int)flags.result_in_binary_protocol,
|
(int)flags.result_in_binary_protocol,
|
||||||
|
@ -1303,7 +1310,9 @@ def_week_frmt: %lu",
|
||||||
flags.max_sort_length,
|
flags.max_sort_length,
|
||||||
flags.group_concat_max_len,
|
flags.group_concat_max_len,
|
||||||
flags.div_precision_increment,
|
flags.div_precision_increment,
|
||||||
flags.default_week_format));
|
flags.default_week_format,
|
||||||
|
(int)flags.in_trans,
|
||||||
|
(int)flags.autocommit));
|
||||||
memcpy((uchar *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)),
|
memcpy((uchar *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)),
|
||||||
(uchar*) &flags, QUERY_CACHE_FLAGS_SIZE);
|
(uchar*) &flags, QUERY_CACHE_FLAGS_SIZE);
|
||||||
query_block = (Query_cache_block *) hash_search(&queries, (uchar*) sql,
|
query_block = (Query_cache_block *) hash_search(&queries, (uchar*) sql,
|
||||||
|
|
|
@ -17712,6 +17712,63 @@ static void test_bug40365(void)
|
||||||
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Bug#36326: nested transaction and select
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_QUERY_CACHE
|
||||||
|
|
||||||
|
static void test_bug36326()
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
DBUG_ENTER("test_bug36326");
|
||||||
|
myheader("test_bug36326");
|
||||||
|
|
||||||
|
rc= mysql_autocommit(mysql, TRUE);
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "DROP TABLE IF EXISTS t1");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "CREATE TABLE t1 (a INTEGER)");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "INSERT INTO t1 VALUES (1)");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "SET GLOBAL query_cache_type = 1");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "SET GLOBAL query_cache_size = 1048576");
|
||||||
|
myquery(rc);
|
||||||
|
DIE_UNLESS(!(mysql->server_status & SERVER_STATUS_IN_TRANS));
|
||||||
|
DIE_UNLESS(mysql->server_status & SERVER_STATUS_AUTOCOMMIT);
|
||||||
|
rc= mysql_query(mysql, "BEGIN");
|
||||||
|
myquery(rc);
|
||||||
|
DIE_UNLESS(mysql->server_status & SERVER_STATUS_IN_TRANS);
|
||||||
|
rc= mysql_query(mysql, "SELECT * FROM t1");
|
||||||
|
myquery(rc);
|
||||||
|
rc= my_process_result(mysql);
|
||||||
|
DIE_UNLESS(rc == 1);
|
||||||
|
rc= mysql_rollback(mysql);
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "ROLLBACK");
|
||||||
|
myquery(rc);
|
||||||
|
DIE_UNLESS(!(mysql->server_status & SERVER_STATUS_IN_TRANS));
|
||||||
|
rc= mysql_query(mysql, "SELECT * FROM t1");
|
||||||
|
myquery(rc);
|
||||||
|
DIE_UNLESS(!(mysql->server_status & SERVER_STATUS_IN_TRANS));
|
||||||
|
rc= my_process_result(mysql);
|
||||||
|
DIE_UNLESS(rc == 1);
|
||||||
|
rc= mysql_query(mysql, "DROP TABLE t1");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "SET GLOBAL query_cache_size = 0");
|
||||||
|
myquery(rc);
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read and parse arguments and MySQL options from my.cnf
|
Read and parse arguments and MySQL options from my.cnf
|
||||||
*/
|
*/
|
||||||
|
@ -18024,6 +18081,9 @@ static struct my_tests_st my_tests[]= {
|
||||||
{ "test_bug40365", test_bug40365 },
|
{ "test_bug40365", test_bug40365 },
|
||||||
#ifdef HAVE_SPATIAL
|
#ifdef HAVE_SPATIAL
|
||||||
{ "test_bug37956", test_bug37956 },
|
{ "test_bug37956", test_bug37956 },
|
||||||
|
#endif
|
||||||
|
#ifdef HAVE_QUERY_CACHE
|
||||||
|
{ "test_bug36326", test_bug36326 },
|
||||||
#endif
|
#endif
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue