summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2006-06-20 13:20:32 +0300
committerunknown <monty@mysql.com>2006-06-20 13:20:32 +0300
commitf3a56a17daafb67599f667bc621abd336d04190a (patch)
treec7992132df0440e7a225104a6c67e1cbe6cd9133 /mysql-test
parentcd3fa2ee7108be73fdc81ae663fd655e41762437 (diff)
downloadmariadb-git-f3a56a17daafb67599f667bc621abd336d04190a.tar.gz
SHOW STATUS does not anymore change local status variables (except com_show_status). Global status variables are still updated.
SHOW STATUS are not anymore put in slow query log because of no index usage. Implemntation done by removing orig_sql_command and moving logic of SHOW STATUS to mysql_excute_command() This simplifies code and allows us to remove some if statements all over the code. Upgraded uc_update_queries[] to sql_command_flags and added more bitmaps to better categorize commands. This allowed some overall simplifaction when testing sql_command. Fixes bugs: Bug#10210: running SHOW STATUS increments counters it shouldn't Bug#19764: SHOW commands end up in the slow log as table scans mysql-test/r/grant_cache.result: Fixed results after SHOW STATUS doesn't anymore affect status variables mysql-test/r/information_schema.result: Added extra test to cover more code mysql-test/r/query_cache.result: Remove resuts from previous tests mysql-test/r/status.result: Added more tests for testing of last_query_cost and how SHOW STATUS affects status variables. (Bug#10210) mysql-test/r/temp_table.result: Fixed results after SHOW STATUS doesn't anymore affect status variables mysql-test/r/union.result: Fixed results after SHOW STATUS is not logged to slow query log (Bug#19764) mysql-test/t/events_microsec.test: Disable warnings at init mysql-test/t/information_schema.test: Added extra test to cover more code mysql-test/t/query_cache.test: Remove resuts from previous tests mysql-test/t/status.test: Added more tests for testing of last_query_cost and how SHOW STATUS affects status variables. (Bug #10210) sql/mysql_priv.h: Added 'sql_command_flags' sql/sql_class.cc: New function add_diff_to_status(), used to update global status variables when using SHOW STATUS sql/sql_class.h: New function 'fill_information_schema_tables()' (One could not anymore use fill_derived_tables() for this as only_view_structures() is not relevant for information schema tables) Added defines for bit flags in sql_command_flags[] sql/sql_lex.cc: Remove orig_sql_command sql/sql_lex.h: Remove orig_sql_command sql/sql_parse.cc: Rename uc_update_queries -> sql_command_flags. Enhanced 'sql_command_flags' to better classify SQL commands uc_update_queries[] != 0 is changed to (sql_command_flags[] & CF_CHANGES_DATA) lex->orig_sql_command == SQLCOM_END is changed to (sql_command_flags[lex->sql_command] & CF_STATUS_COMMAND) == 0) Simplify incrementing of thd->status_var.com_stat[] as we don't have to do special handling for SHOW commands. Split SQLCOM_SELECT handling in mysql_execute_command() to a separate function. Added special handling of SHOW STATUS commands in mysql_execute_command() and call common SQLCOM_SELECT handling. These changes allows us to easily fix that we save and restore status variables during execution of a SHOW STATUS command. Don't log SHOW STATUS commands to slow query log. This fixes Bug#10210 and Bug#19764 without adding additional 'if' code. (The new code is faster than the original as we now have fewer if's than before) sql/sql_prepare.cc: Clean up prepare-check handling of SQLCOM commands by using sql_command_flags[] This simplifes code and ensures that code works even if someone forgets to put a new status commands into the switch statement. sql/sql_select.cc: Remove special handling of SHOW STATUS. (This is now done in SQLCOM_SHOW_STATUS part in mysql_execute_command()) sql/sql_show.cc: Remove orig_sql_command Only change sql_command during 'open_normal_and_derived_tables()' (for views) and not for the full duration of generating data. Changed 'show status' to use thd->initial_status_var to ensure that the current statement is not affecting the to-be-used values. Use thd->fill_information_schema_tables() instead of 'thd->fill_derived_tables()' as the later wrongly checks the value of sql_command. sql/sql_yacc.yy: Remove usage of orig_sql_command. One side effect of this is that we need to test for cursors if the current command is a SELECT or a SHOW command. sql/structs.h: Updated comment
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/grant_cache.result16
-rw-r--r--mysql-test/r/information_schema.result2
-rw-r--r--mysql-test/r/query_cache.result1
-rw-r--r--mysql-test/r/status.result50
-rw-r--r--mysql-test/r/temp_table.result2
-rw-r--r--mysql-test/r/union.result8
-rw-r--r--mysql-test/t/events_microsec.test3
-rw-r--r--mysql-test/t/information_schema.test2
-rw-r--r--mysql-test/t/query_cache.test3
-rw-r--r--mysql-test/t/status.test34
10 files changed, 108 insertions, 13 deletions
diff --git a/mysql-test/r/grant_cache.result b/mysql-test/r/grant_cache.result
index 925a5918c1b..2c6840d77d0 100644
--- a/mysql-test/r/grant_cache.result
+++ b/mysql-test/r/grant_cache.result
@@ -60,7 +60,7 @@ Variable_name Value
Qcache_hits 0
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 5
+Qcache_not_cached 0
select "user1";
user1
user1
@@ -72,7 +72,7 @@ Variable_name Value
Qcache_hits 0
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 9
+Qcache_not_cached 1
select * from t1;
a b c
1 1 1
@@ -85,7 +85,7 @@ Variable_name Value
Qcache_hits 1
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 12
+Qcache_not_cached 1
select a from t1 ;
a
1
@@ -98,7 +98,7 @@ Variable_name Value
Qcache_hits 2
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 15
+Qcache_not_cached 1
select c from t1;
c
1
@@ -111,7 +111,7 @@ Variable_name Value
Qcache_hits 3
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 18
+Qcache_not_cached 1
show grants for current_user();
Grants for @localhost
GRANT USAGE ON *.* TO ''@'localhost'
@@ -144,7 +144,7 @@ Variable_name Value
Qcache_hits 7
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 22
+Qcache_not_cached 2
select "user3";
user3
user3
@@ -168,7 +168,7 @@ Variable_name Value
Qcache_hits 7
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 30
+Qcache_not_cached 7
select "user4";
user4
user4
@@ -198,7 +198,7 @@ Variable_name Value
Qcache_hits 8
show status like "Qcache_not_cached";
Variable_name Value
-Qcache_not_cached 34
+Qcache_not_cached 8
set names binary;
delete from mysql.user where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
delete from mysql.db where user in ("mysqltest_1","mysqltest_2","mysqltest_3");
diff --git a/mysql-test/r/information_schema.result b/mysql-test/r/information_schema.result
index 070049b303a..94e0a5ffd2a 100644
--- a/mysql-test/r/information_schema.result
+++ b/mysql-test/r/information_schema.result
@@ -199,6 +199,8 @@ select table_name, column_name, privileges from information_schema.columns
where table_schema = 'mysqltest' and table_name = 'v1';
table_name column_name privileges
v1 c select
+explain select * from v1;
+ERROR HY000: EXPLAIN/SHOW can not be issued; lacking privileges for underlying table
drop view v1, mysqltest.v1;
drop tables mysqltest.t4, mysqltest.t1, t2, t3, t5;
drop database mysqltest;
diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result
index 40aa88439b9..5f72b229ab5 100644
--- a/mysql-test/r/query_cache.result
+++ b/mysql-test/r/query_cache.result
@@ -1050,6 +1050,7 @@ Qcache_hits 1
drop table t1;
create table t1 (a int);
insert into t1 values (1),(2);
+drop procedure if exists p1;
CREATE PROCEDURE `p1`()
begin
Declare c1 cursor for select a from t1;
diff --git a/mysql-test/r/status.result b/mysql-test/r/status.result
index e83ade78cf6..83c6a6f5288 100644
--- a/mysql-test/r/status.result
+++ b/mysql-test/r/status.result
@@ -23,6 +23,32 @@ select 1;
show status like 'last_query_cost';
Variable_name Value
Last_query_cost 0.000000
+create table t1 (a int);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+select * from t1 where a=6;
+a
+6
+6
+6
+6
+6
+show status like 'last_query_cost';
+Variable_name Value
+Last_query_cost 12.084449
+show status like 'last_query_cost';
+Variable_name Value
+Last_query_cost 12.084449
+select 1;
+1
+1
+show status like 'last_query_cost';
+Variable_name Value
+Last_query_cost 0.000000
+drop table t1;
FLUSH STATUS;
SHOW STATUS LIKE 'max_used_connections';
Variable_name Value
@@ -43,3 +69,27 @@ SHOW STATUS LIKE 'max_used_connections';
Variable_name Value
Max_used_connections 5
SET GLOBAL thread_cache_size=@save_thread_cache_size;
+show status like 'com_show_status';
+Variable_name Value
+Com_show_status 3
+show status like 'hand%write%';
+Variable_name Value
+Handler_write 0
+show status like '%tmp%';
+Variable_name Value
+Created_tmp_disk_tables 0
+Created_tmp_files 0
+Created_tmp_tables 0
+show status like 'hand%write%';
+Variable_name Value
+Handler_write 0
+show status like '%tmp%';
+Variable_name Value
+Created_tmp_disk_tables 0
+Created_tmp_files 0
+Created_tmp_tables 0
+show status like 'com_show_status';
+Variable_name Value
+Com_show_status 8
+rnd_diff tmp_table_diff
+20 8
diff --git a/mysql-test/r/temp_table.result b/mysql-test/r/temp_table.result
index 2b3e9087cf7..637f74a1d50 100644
--- a/mysql-test/r/temp_table.result
+++ b/mysql-test/r/temp_table.result
@@ -98,7 +98,7 @@ d
show status like "created_tmp%tables";
Variable_name Value
Created_tmp_disk_tables 0
-Created_tmp_tables 2
+Created_tmp_tables 1
drop table t1;
create temporary table v1 as select 'This is temp. table' A;
create view v1 as select 'This is view' A;
diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result
index 4280ae28e3c..43598caa86f 100644
--- a/mysql-test/r/union.result
+++ b/mysql-test/r/union.result
@@ -836,27 +836,27 @@ count(*)
26
show status like 'Slow_queries';
Variable_name Value
-Slow_queries 1
+Slow_queries 0
select count(*) from t1 where b=13;
count(*)
10
show status like 'Slow_queries';
Variable_name Value
-Slow_queries 3
+Slow_queries 1
select count(*) from t1 where b=13 union select count(*) from t1 where a=7;
count(*)
10
26
show status like 'Slow_queries';
Variable_name Value
-Slow_queries 5
+Slow_queries 2
select count(*) from t1 where a=7 union select count(*) from t1 where b=13;
count(*)
26
10
show status like 'Slow_queries';
Variable_name Value
-Slow_queries 7
+Slow_queries 3
flush status;
select a from t1 where b not in (1,2,3) union select a from t1 where b not in (4,5,6);
a
diff --git a/mysql-test/t/events_microsec.test b/mysql-test/t/events_microsec.test
index e01120a0756..e4d57bf4ae1 100644
--- a/mysql-test/t/events_microsec.test
+++ b/mysql-test/t/events_microsec.test
@@ -1,4 +1,7 @@
+--disable_warnings
create database if not exists events_test;
+--enable_warnings
+
use events_test;
--error ER_NOT_SUPPORTED_YET
diff --git a/mysql-test/t/information_schema.test b/mysql-test/t/information_schema.test
index 19e3ef97f1e..73aea01dfa2 100644
--- a/mysql-test/t/information_schema.test
+++ b/mysql-test/t/information_schema.test
@@ -80,6 +80,8 @@ connect (user4,localhost,mysqltest_3,,mysqltest);
connection user4;
select table_name, column_name, privileges from information_schema.columns
where table_schema = 'mysqltest' and table_name = 'v1';
+--error 1345
+explain select * from v1;
connection default;
drop view v1, mysqltest.v1;
diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test
index e2ff20e6ecc..2c94fe63c04 100644
--- a/mysql-test/t/query_cache.test
+++ b/mysql-test/t/query_cache.test
@@ -765,6 +765,9 @@ drop table t1;
create table t1 (a int);
insert into t1 values (1),(2);
+--disable_warnings
+drop procedure if exists p1;
+--enable_warnings
delimiter //;
CREATE PROCEDURE `p1`()
begin
diff --git a/mysql-test/t/status.test b/mysql-test/t/status.test
index 1a71425d2a7..55f9d95adc5 100644
--- a/mysql-test/t/status.test
+++ b/mysql-test/t/status.test
@@ -48,6 +48,19 @@ connection default;
select 1;
show status like 'last_query_cost';
+create table t1 (a int);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
+select * from t1 where a=6;
+show status like 'last_query_cost';
+# Ensure value dosn't change by second status call
+show status like 'last_query_cost';
+select 1;
+show status like 'last_query_cost';
+drop table t1;
#
# Test for Bug #15933 max_used_connections is wrong after FLUSH STATUS
@@ -144,3 +157,24 @@ disconnect con2;
disconnect con1;
# End of 5.0 tests
+
+#
+# Ensure that SHOW STATUS only changes global status variables
+#
+
+connect (con1,localhost,root,,);
+let $rnd_next = `show global status like 'handler_read_rnd_next'`;
+let $tmp_table = `show global status like 'Created_tmp_tables'`;
+show status like 'com_show_status';
+show status like 'hand%write%';
+show status like '%tmp%';
+show status like 'hand%write%';
+show status like '%tmp%';
+show status like 'com_show_status';
+let $rnd_next2 = `show global status like 'handler_read_rnd_next'`;
+let $tmp_table2 = `show global status like 'Created_tmp_tables'`;
+--disable_query_log
+eval select substring_index('$rnd_next2',0x9,-1)-substring_index('$rnd_next',0x9,-1) as rnd_diff, substring_index('$tmp_table2',0x9,-1)-substring_index('$tmp_table',0x9,-1) as tmp_table_diff;
+--enable_query_log
+
+# End of 5.1 tests