polardbxengine/mysql-test/suite/xengine_stress/t/runtime/information_schema.yy

335 lines
8.3 KiB
Plaintext

# Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA
# Last Modification to Grammar : Sandeep D (Bug #11766276)
# The joins on information schema tables resulted in high usage of temp space (> 350G) . The space consumtion is basically due to sorting temp table created during order by on
# joins involving tables like INNODB_BUFFER_PAGE . The current modification eliminates the order by on Joins and preserves sorting on projection queries with single table
query_init:
SELECT _field FROM _table ; # Populate the RQG metadata caches from the start of the start of the test
thread1:
modify ; # Issue DDL that are reflected in INFORMATION_SCHEMA
query:
{ @nonaggregates = () ; @table_names = () ; @database_names = () ; $tables = 0 ; $fields = 0 ; "" } select |
{ @nonaggregates = () ; @table_names = () ; @database_names = () ; $tables = 0 ; $fields = 0 ; "" } select |
{ @nonaggregates = () ; @table_names = () ; @database_names = () ; $tables = 0 ; $fields = 0 ; "" } select |
{ @nonaggregates = () ; @table_names = () ; @database_names = () ; $tables = 0 ; $fields = 0 ; "" } select_join |
{ @nonaggregates = () ; @table_names = () ; @database_names = () ; $tables = 0 ; $fields = 0 ; "" } select_join |
{ @nonaggregates = () ; @table_names = () ; @database_names = () ; $tables = 0 ; $fields = 0 ; "" } select_join |
show ;
show:
# SHOW BINARY LOGS |
SHOW BINLOG EVENTS |
SHOW CHARACTER SET |
SHOW COLLATION |
SHOW COLUMNS FROM _table |
SHOW CREATE DATABASE _letter |
SHOW CREATE FUNCTION _letter |
SHOW CREATE PROCEDURE _letter |
SHOW CREATE TABLE _letter |
SHOW CREATE VIEW _letter |
SHOW DATABASES |
# SHOW ENGINE |
SHOW ENGINES |
SHOW ERRORS |
SHOW FUNCTION CODE _letter |
SHOW FUNCTION STATUS |
SHOW GRANTS |
SHOW INDEX FROM _table |
# SHOW INNODB STATUS |
# SHOW LOGS |
SHOW MASTER STATUS |
# SHOW MUTEX STATUS |
SHOW OPEN TABLES |
SHOW PRIVILEGES |
SHOW PROCEDURE CODE _letter |
SHOW PROCEDURE STATUS |
SHOW PROCESSLIST |
SHOW PROFILE |
SHOW PROFILES |
SHOW SLAVE HOSTS |
SHOW SLAVE STATUS |
SHOW STATUS |
SHOW TABLE STATUS |
SHOW TABLES |
SHOW TRIGGERS |
SHOW VARIABLES |
SHOW WARNINGS ;
modify:
# character_sets |
# collations |
# collation_character_set_applicability |
columns |
column_privileges |
# engines |
events |
# files |
# global_status |
# global_variables |
key_column_usage |
parameters |
partitions |
# plugins |
# processlist |
# profiling |
# referential_constraints |
# routines | # same as parameters
schemata |
schema_privileges |
# session_status |
# session_variables |
# statistics |
tables |
# tablespaces |
table_constraints |
table_privileges |
triggers |
user_privileges |
views ;
columns:
ALTER TABLE _table ADD COLUMN _letter INTEGER |
ALTER TABLE _table DROP COLUMN _letter ;
column_privileges:
GRANT privilege_list ON _table TO 'someuser'@'somehost';
events:
CREATE EVENT _letter ON SCHEDULE AT NOW() DO SET @a=@a |
DROP EVENT _letter ;
key_column_usage:
ALTER TABLE _table ADD KEY ( _letter ) |
ALTER TABLE _table DROP KEY _letter ;
parameters:
CREATE PROCEDURE _letter ( procedure_parameter_list ) BEGIN SELECT COUNT(*) INTO @a FROM _table; END ; |
DROP PROCEDURE IF EXISTS _letter |
CREATE FUNCTION _letter ( function_parameter_list ) RETURNS INTEGER RETURN 1 |
DROP FUNCTION IF EXISTS _letter ;
partitions:
ALTER TABLE _table PARTITION BY KEY() PARTITIONS _digit |
ALTER TABLE _table REMOVE PARTITIONING ;
schemata:
CREATE DATABASE IF NOT EXISTS _letter |
DROP DATABASE IF EXISTS _letter ;
schema_privileges:
GRANT ALL PRIVILEGES ON _letter . * TO 'someuser'@'somehost' |
REVOKE ALL PRIVILEGES ON _letter . * FROM 'someuser'@'somehost' ;
tables:
CREATE TABLE _letter LIKE _table |
DROP TABLE _letter ;
table_constraints:
ALTER TABLE _table DROP PRIMARY KEY |
ALTER TABLE _table ADD PRIMARY KEY (`pk`) ;
table_privileges:
GRANT ALL PRIVILEGES ON test . _letter TO 'someuser'@'somehost' |
REVOKE ALL PRIVILEGES ON test . _letter FROM 'someuser'@'somehost' ;
triggers:
CREATE TRIGGER _letter BEFORE INSERT ON _table FOR EACH ROW BEGIN INSERT INTO _table SELECT * FROM _table LIMIT 0 ; END ; |
DROP TRIGGER IF EXISTS _letter;
user_privileges:
GRANT admin_privilege_list ON * . * to 'someuser'@'somehost' |
REVOKE admin_privilege_list ON * . * FROM 'someuser'@'somehost' ;
admin_privilege_list:
admin_privilege |
admin_privilege , admin_privilege_list ;
admin_privilege:
CREATE USER |
PROCESS |
RELOAD |
REPLICATION CLIENT |
REPLICATION SLAVE |
SHOW DATABASES |
SHUTDOWN |
SUPER |
# ALL PRIVILEGES |
USAGE ;
views:
CREATE OR REPLACE VIEW _letter AS SELECT * FROM _table |
DROP VIEW IF EXISTS _letter ;
function_parameter_list:
_letter INTEGER , _letter INTEGER ;
procedure_parameter_list:
parameter |
parameter , procedure_parameter_list ;
parameter:
in_out _letter INT ;
in_out:
IN | OUT ;
privilege_list:
privilege_item |
privilege_item , privilege_list ;
privilege_item:
privilege ( field_list );
privilege:
INSERT | SELECT | UPDATE ;
field_list:
_field |
_field , field_list ;
select:
SELECT *
FROM new_table_item
where
group_by
having
order_by_limit
;
select_join :
SELECT *
FROM join_list
where
group_by
having
LIMIT _digit
;
select_list:
new_select_item |
new_select_item , select_list ;
join_list:
new_table_item |
(new_table_item join_type new_table_item ON ( current_table_item . _field = previous_table_item . _field ) ) ;
join_type:
INNER JOIN | left_right outer JOIN | STRAIGHT_JOIN ;
left_right:
LEFT | RIGHT ;
outer:
| OUTER ;
where:
WHERE where_list ;
where_list:
not where_item |
not (where_list AND where_item) |
not (where_list OR where_item) ;
not:
| | | NOT;
where_item:
existing_table_item . _field sign value |
existing_table_item . _field sign existing_table_item . _field ;
group_by:
{ scalar(@nonaggregates) > 0 ? " GROUP BY ".join (', ' , @nonaggregates ) : "" };
having:
| HAVING having_list;
having_list:
not having_item |
not (having_list AND having_item) |
not (having_list OR having_item) |
having_item IS not NULL ;
having_item:
existing_table_item . _field sign value ;
order_by_limit:
|
ORDER BY order_by_list |
ORDER BY order_by_list LIMIT _digit ;
total_order_by:
{ join(', ', map { "field".$_ } (1..$fields) ) };
order_by_list:
order_by_item |
order_by_item , order_by_list ;
order_by_item:
existing_table_item . _field ;
limit:
| LIMIT _digit | LIMIT _digit OFFSET _digit;
new_select_item:
nonaggregate_select_item |
nonaggregate_select_item |
aggregate_select_item;
nonaggregate_select_item:
table_one_two . _field AS { my $f = "field".++$fields ; push @nonaggregates , $f ; $f} ;
aggregate_select_item:
aggregate table_one_two . _field ) AS { "field".++$fields };
# Only 20% table2, since sometimes table2 is not present at all
table_one_two:
table1 { $last_table = $tables[1] } |
table2 { $last_table = $tables[2] } ;
aggregate:
COUNT( | SUM( | MIN( | MAX( ;
new_table_item:
database . _table AS { $database_names[++$tables] = $last_database ; $table_names[$tables] = $last_table ; "table".$tables };
database:
{ $last_database = $prng->arrayElement(['mysql','INFORMATION_SCHEMA','test']); return $last_database };
current_table_item:
{ $last_database = $database_names[$tables] ; $last_table = $table_names[$tables] ; "table".$tables };
previous_table_item:
{ $last_database = $database_names[$tables-1] ; $last_table = $table_names[$tables-1] ; "table".($tables - 1) };
existing_table_item:
{ my $i = $prng->int(1,$tables) ; $last_database = $database_names[$i]; $last_table = $table_names[$i] ; "table".$i };
existing_select_item:
{ "field".$prng->int(1,$fields) };
sign:
= | > | < | != | <> | <= | >= ;
value:
_digit | _char(2) | _datetime ;