mirror of
https://github.com/MariaDB/server.git
synced 2025-02-20 12:23:10 +01:00
Bug#24289 Status Variable "Questions" gets wrong values with Stored Routines(for 5.1)
This commit is contained in:
parent
d566770bf5
commit
aae00014e2
7 changed files with 174 additions and 12 deletions
|
@ -28,7 +28,7 @@ Table Op Msg_type Msg_text
|
||||||
test.t1 check status OK
|
test.t1 check status OK
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1(f1 int, f2 varchar(255));
|
create table t1(f1 int, f2 char(255));
|
||||||
insert into t1 values(1, 'foo'), (2, 'bar');
|
insert into t1 values(1, 'foo'), (2, 'bar');
|
||||||
insert into t1 select * from t1;
|
insert into t1 select * from t1;
|
||||||
insert into t1 select * from t1;
|
insert into t1 select * from t1;
|
||||||
|
|
73
mysql-test/r/status2.result
Normal file
73
mysql-test/r/status2.result
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
#
|
||||||
|
# Bug#24289 Status Variable "Questions" gets wrong values with Stored Routines
|
||||||
|
#
|
||||||
|
FLUSH STATUS;
|
||||||
|
CREATE FUNCTION testQuestion() RETURNS INTEGER
|
||||||
|
BEGIN
|
||||||
|
DECLARE foo INTEGER;
|
||||||
|
DECLARE bar INTEGER;
|
||||||
|
SET foo=1;
|
||||||
|
SET bar=2;
|
||||||
|
RETURN foo;
|
||||||
|
END $$
|
||||||
|
CREATE PROCEDURE testQuestion2()
|
||||||
|
BEGIN
|
||||||
|
SELECT 1;
|
||||||
|
END $$
|
||||||
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
|
CREATE TABLE t1 (c1 INT);
|
||||||
|
CREATE TABLE t2 (c1 INT);
|
||||||
|
CREATE EVENT ev1 ON SCHEDULE EVERY 1 SECOND
|
||||||
|
DO INSERT INTO t1 VALUES(1);
|
||||||
|
Assert Questions == 7
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
Variable_name Value
|
||||||
|
Questions 7
|
||||||
|
SELECT testQuestion();
|
||||||
|
testQuestion()
|
||||||
|
1
|
||||||
|
Assert Questions == 9
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
Variable_name Value
|
||||||
|
Questions 9
|
||||||
|
CALL testQuestion2();
|
||||||
|
1
|
||||||
|
1
|
||||||
|
Assert Questions == 11
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
Variable_name Value
|
||||||
|
Questions 11
|
||||||
|
SELECT 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
Assert Questions == 13
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
Variable_name Value
|
||||||
|
Questions 13
|
||||||
|
SELECT 1;
|
||||||
|
1
|
||||||
|
1
|
||||||
|
Assert Questions == 14
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
Variable_name Value
|
||||||
|
Questions 14
|
||||||
|
CREATE TRIGGER trigg1 AFTER INSERT ON t1
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
Assert Questions == 16
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
Variable_name Value
|
||||||
|
Questions 16
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
Assert Questions == 18
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
Variable_name Value
|
||||||
|
Questions 18
|
||||||
|
DROP PROCEDURE testQuestion2;
|
||||||
|
DROP TRIGGER trigg1;
|
||||||
|
DROP FUNCTION testQuestion;
|
||||||
|
DROP EVENT ev1;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
End of 6.0 tests
|
|
@ -38,7 +38,7 @@ DROP TABLE t1;
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
--enable_warnings
|
--enable_warnings
|
||||||
create table t1(f1 int, f2 varchar(255));
|
create table t1(f1 int, f2 char(255));
|
||||||
insert into t1 values(1, 'foo'), (2, 'bar');
|
insert into t1 values(1, 'foo'), (2, 'bar');
|
||||||
insert into t1 select * from t1;
|
insert into t1 select * from t1;
|
||||||
insert into t1 select * from t1;
|
insert into t1 select * from t1;
|
||||||
|
|
68
mysql-test/t/status2.test
Normal file
68
mysql-test/t/status2.test
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
--source include/not_embedded.inc
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#24289 Status Variable "Questions" gets wrong values with Stored Routines
|
||||||
|
--echo #
|
||||||
|
FLUSH STATUS;
|
||||||
|
DELIMITER $$;
|
||||||
|
CREATE FUNCTION testQuestion() RETURNS INTEGER
|
||||||
|
BEGIN
|
||||||
|
DECLARE foo INTEGER;
|
||||||
|
DECLARE bar INTEGER;
|
||||||
|
SET foo=1;
|
||||||
|
SET bar=2;
|
||||||
|
RETURN foo;
|
||||||
|
END $$
|
||||||
|
CREATE PROCEDURE testQuestion2()
|
||||||
|
BEGIN
|
||||||
|
SELECT 1;
|
||||||
|
END $$
|
||||||
|
DELIMITER ;$$
|
||||||
|
--disable_warnings
|
||||||
|
DROP TABLE IF EXISTS t1,t2;
|
||||||
|
--enable_warnings
|
||||||
|
CREATE TABLE t1 (c1 INT);
|
||||||
|
CREATE TABLE t2 (c1 INT);
|
||||||
|
CREATE EVENT ev1 ON SCHEDULE EVERY 1 SECOND
|
||||||
|
DO INSERT INTO t1 VALUES(1);
|
||||||
|
|
||||||
|
--echo Assert Questions == 7
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
SELECT testQuestion();
|
||||||
|
--echo Assert Questions == 9
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
CALL testQuestion2();
|
||||||
|
--echo Assert Questions == 11
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
SELECT 1;
|
||||||
|
--echo Assert Questions == 13
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
connect (con1,localhost,root,,);
|
||||||
|
connection con1;
|
||||||
|
SELECT 1;
|
||||||
|
connection default;
|
||||||
|
disconnect con1;
|
||||||
|
--echo Assert Questions == 14
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
DELIMITER $$;
|
||||||
|
CREATE TRIGGER trigg1 AFTER INSERT ON t1
|
||||||
|
FOR EACH ROW BEGIN
|
||||||
|
INSERT INTO t2 VALUES (1);
|
||||||
|
END;
|
||||||
|
$$
|
||||||
|
DELIMITER ;$$
|
||||||
|
--echo Assert Questions == 16
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
--echo Assert Questions == 18
|
||||||
|
SHOW STATUS LIKE 'Questions';
|
||||||
|
# TODO: Uncomment the lines below when FLUSH GLOBAL STATUS is implemented.
|
||||||
|
# FLUSH STATUS;
|
||||||
|
# SHOW GLOBAL STATUS LIKE 'Questions';
|
||||||
|
DROP PROCEDURE testQuestion2;
|
||||||
|
DROP TRIGGER trigg1;
|
||||||
|
DROP FUNCTION testQuestion;
|
||||||
|
DROP EVENT ev1;
|
||||||
|
DROP TABLE t1,t2;
|
||||||
|
--echo End of 6.0 tests
|
||||||
|
|
|
@ -6867,12 +6867,6 @@ The minimum value for this variable is 4096.",
|
||||||
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static int show_question(THD *thd, SHOW_VAR *var, char *buff)
|
|
||||||
{
|
|
||||||
var->type= SHOW_LONGLONG;
|
|
||||||
var->value= (char *)&thd->query_id;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int show_net_compression(THD *thd, SHOW_VAR *var, char *buff)
|
static int show_net_compression(THD *thd, SHOW_VAR *var, char *buff)
|
||||||
{
|
{
|
||||||
|
@ -7289,7 +7283,7 @@ SHOW_VAR status_vars[]= {
|
||||||
{"Qcache_queries_in_cache", (char*) &query_cache.queries_in_cache, SHOW_LONG_NOFLUSH},
|
{"Qcache_queries_in_cache", (char*) &query_cache.queries_in_cache, SHOW_LONG_NOFLUSH},
|
||||||
{"Qcache_total_blocks", (char*) &query_cache.total_blocks, SHOW_LONG_NOFLUSH},
|
{"Qcache_total_blocks", (char*) &query_cache.total_blocks, SHOW_LONG_NOFLUSH},
|
||||||
#endif /*HAVE_QUERY_CACHE*/
|
#endif /*HAVE_QUERY_CACHE*/
|
||||||
{"Questions", (char*) &show_question, SHOW_FUNC},
|
{"Questions", (char*) offsetof(STATUS_VAR, questions), SHOW_LONG_STATUS},
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
{"Rpl_status", (char*) &show_rpl_status, SHOW_FUNC},
|
{"Rpl_status", (char*) &show_rpl_status, SHOW_FUNC},
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -456,8 +456,15 @@ typedef struct system_status_var
|
||||||
ulong com_stmt_fetch;
|
ulong com_stmt_fetch;
|
||||||
ulong com_stmt_reset;
|
ulong com_stmt_reset;
|
||||||
ulong com_stmt_close;
|
ulong com_stmt_close;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Number of statements sent from the client
|
||||||
|
*/
|
||||||
|
ulong questions;
|
||||||
|
/*
|
||||||
|
IMPORTANT!
|
||||||
|
SEE last_system_status_var DEFINITION BELOW.
|
||||||
|
Below 'last_system_status_var' are all variables which doesn't make any
|
||||||
|
sense to add to the /global/ status variable counter.
|
||||||
Status variables which it does not make sense to add to
|
Status variables which it does not make sense to add to
|
||||||
global status variable counter
|
global status variable counter
|
||||||
*/
|
*/
|
||||||
|
@ -470,7 +477,7 @@ typedef struct system_status_var
|
||||||
counter
|
counter
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define last_system_status_var com_stmt_close
|
#define last_system_status_var questions
|
||||||
|
|
||||||
void mark_transaction_to_rollback(THD *thd, bool all);
|
void mark_transaction_to_rollback(THD *thd, bool all);
|
||||||
|
|
||||||
|
|
|
@ -971,8 +971,24 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||||
thd->set_time();
|
thd->set_time();
|
||||||
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
||||||
thd->query_id= global_query_id;
|
thd->query_id= global_query_id;
|
||||||
if (command != COM_STATISTICS && command != COM_PING)
|
|
||||||
|
switch( command ) {
|
||||||
|
/* Ignore these statements. */
|
||||||
|
case COM_STATISTICS:
|
||||||
|
case COM_PING:
|
||||||
|
break;
|
||||||
|
/* Only increase id on these statements but don't count them. */
|
||||||
|
case COM_STMT_PREPARE:
|
||||||
|
case COM_STMT_CLOSE:
|
||||||
|
case COM_STMT_RESET:
|
||||||
next_query_id();
|
next_query_id();
|
||||||
|
break;
|
||||||
|
/* Increase id and count all other statements. */
|
||||||
|
default:
|
||||||
|
statistic_increment(thd->status_var.questions, &LOCK_status);
|
||||||
|
next_query_id();
|
||||||
|
}
|
||||||
|
|
||||||
thread_running++;
|
thread_running++;
|
||||||
/* TODO: set thd->lex->sql_command to SQLCOM_END here */
|
/* TODO: set thd->lex->sql_command to SQLCOM_END here */
|
||||||
VOID(pthread_mutex_unlock(&LOCK_thread_count));
|
VOID(pthread_mutex_unlock(&LOCK_thread_count));
|
||||||
|
@ -1229,6 +1245,10 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
|
||||||
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
VOID(pthread_mutex_lock(&LOCK_thread_count));
|
||||||
thd->query_length= length;
|
thd->query_length= length;
|
||||||
thd->query= beginning_of_next_stmt;
|
thd->query= beginning_of_next_stmt;
|
||||||
|
/*
|
||||||
|
Count each statement from the client.
|
||||||
|
*/
|
||||||
|
statistic_increment(thd->status_var.questions, &LOCK_status);
|
||||||
thd->query_id= next_query_id();
|
thd->query_id= next_query_id();
|
||||||
thd->set_time(); /* Reset the query start time. */
|
thd->set_time(); /* Reset the query start time. */
|
||||||
/* TODO: set thd->lex->sql_command to SQLCOM_END here */
|
/* TODO: set thd->lex->sql_command to SQLCOM_END here */
|
||||||
|
|
Loading…
Add table
Reference in a new issue