📄 is_columns.test
字号:
# suite/funcs_1/t/is_columns.test## Check the layout of information_schema.columns and the impact of# CREATE/ALTER/DROP TABLE/VIEW/SCHEMA/COLUMN ... on its content.## Note:# This test is not intended# - to show information about the all time existing tables# within the databases information_schema and mysql# - for checking storage engine properties# Therefore please do not alter $engine_type and $other_engine_type.## Author:# 2008-01-23 mleich WL#4203 Reorganize and fix the data dictionary tests of# testsuite funcs_1# Create this script based on older scripts and new code.## This test cannot be used for the embedded server because we check here# privileges.--source include/not_embedded.inclet $engine_type = MEMORY;let $other_engine_type = MyISAM;let $is_table = COLUMNS;# The table INFORMATION_SCHEMA.COLUMNS must existeval SHOW TABLES FROM information_schema LIKE '$is_table';--echo #######################################################################--echo # Testcase 3.2.1.1: INFORMATION_SCHEMA tables can be queried via SELECT--echo ######################################################################## Ensure that every INFORMATION_SCHEMA table can be queried with a SELECT# statement, just as if it were an ordinary user-defined table.#--source suite/funcs_1/datadict/is_table_query.inc--echo #########################################################################--echo # Testcase 3.2.6.1: INFORMATION_SCHEMA.COLUMNS layout--echo ########################################################################## Ensure that the INFORMATION_SCHEMA.COLUMNS table has the following columns,# in the following order:## TABLE_CATALOG (always shows NULL),# TABLE_SCHEMA (shows the name of the database, or schema, in which an# accessible table resides),# TABLE_NAME (shows the name of an accessible table),# COLUMN_NAME (shows the name of a column within that table),# ORDINAL_POSITION (shows the ordinal position of that column in that table),# COLUMN_DEFAULT (shows the column's default value),# IS_NULLABLE (shows whether the column may accept NULL values),# DATA_TYPE (shows the column's defined data type; keyword only),# CHARACTER_MAXIMUM_LENGTH (shows, for a string column, the column's defined# maximum length in characters; otherwise NULL),# CHARACTER_OCTET_LENGTH (shows, for a string column, the column's defined# maximum length in octets; otherwise NULL),# NUMERIC_PRECISION (shows, for a numeric column, the column's or data type's# defined precision; otherwise NULL),# NUMERIC_SCALE (shows, for a numeric column, the column's or data type's# defined scale; otherwise NULL),# CHARACTER_SET_NAME (shows, for a character string column, the column's default# character set; otherwise NULL),# COLLATION_NAME (shows, for a character string column, the column's default# collation; otherwise NULL),# COLUMN_TYPE (shows the column's complete, defined data type),# COLUMN_KEY (shows whether the column is indexed; possible values are PRI if# the column is part of a PRIMARY KEY, UNI if the column is part of a# UNIQUE key, MUL if the column is part of an index key that allows# duplicates),# EXTRA (shows any additional column definition information, e.g. whether the# column was defined with the AUTO_INCREMENT attribute),# PRIVILEGES (shows the privileges available to the user on the column),# COLUMN_COMMENT (shows the comment, if any, defined for the comment;# otherwise NULL).#--source suite/funcs_1/datadict/datadict_bug_12777.inceval DESCRIBE information_schema.$is_table;--source suite/funcs_1/datadict/datadict_bug_12777.inceval SHOW CREATE TABLE information_schema.$is_table;--source suite/funcs_1/datadict/datadict_bug_12777.inceval SHOW COLUMNS FROM information_schema.$is_table;# Note: Retrieval of information within information_schema.columns about# information_schema.columns is in is_columns_is.test.# Show that TABLE_CATALOG is always NULL.SELECT table_catalog, table_schema, table_name, column_nameFROM information_schema.columns WHERE table_catalog IS NOT NULL;--echo ###############################################################################--echo # Testcase 3.2.6.2 + 3.2.6.3: INFORMATION_SCHEMA.COLUMNS accessible information--echo ################################################################################ 3.2.6.2: Ensure that the table shows the relevant information on the columns# of every table that is accessible to the current user or to PUBLIC.# 3.2.6.3: Ensure that the table does not show any information on the columns# of any table which is not accessible to the current user or PUBLIC.## Note: Check of content within information_schema.columns about# databases is in# mysql is_columns_mysql.test# information_schema is_columns_is.test# test% is_columns_<engine>.test#--disable_warningsDROP DATABASE IF EXISTS db_datadict;--enable_warningsCREATE DATABASE db_datadict;--error 0,ER_CANNOT_USERDROP USER 'testuser1'@'localhost';CREATE USER 'testuser1'@'localhost';--error 0,ER_CANNOT_USERDROP USER 'testuser2'@'localhost';CREATE USER 'testuser2'@'localhost';--replace_result $other_engine_type <other_engine_type>evalCREATE TABLE db_datadict.t1 (f1 CHAR(10), f2 TEXT, f3 DATE, f4 INT AUTO_INCREMENT, UNIQUE INDEX MUL_IDX(f1,f3), PRIMARY KEY (f4))ENGINE = $other_engine_type;CREATE VIEW db_datadict.v1 AS SELECT 1 AS f1, 1 AS f2;GRANT SELECT(f1, f2) ON db_datadict.t1 TO 'testuser1'@'localhost';GRANT SELECT(f2) ON db_datadict.v1 TO 'testuser1'@'localhost';--replace_result $other_engine_type <other_engine_type>evalCREATE TABLE db_datadict.t2(f1 CHAR(10), f2 TEXT, f3 DATE, f4 INT, PRIMARY KEY (f1,f4))ENGINE = $other_engine_type;GRANT INSERT(f1, f2) ON db_datadict.t2 TO 'testuser2'@'localhost';let $my_select= SELECT * FROM information_schema.columns WHERE table_schema = 'db_datadict'ORDER BY table_schema, table_name, ordinal_position;let $my_show1 = SHOW COLUMNS FROM db_datadict.t1;let $my_show2 = SHOW COLUMNS FROM db_datadict.t2;let $my_show3 = SHOW COLUMNS FROM db_datadict.v1;# Point of view of user root.--source suite/funcs_1/datadict/datadict_bug_12777.inceval $my_select;eval $my_show1;eval $my_show2;eval $my_show3;--echo # Establish connection testuser1 (user=testuser1)--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCKconnect (testuser1, localhost, testuser1, , db_datadict);--source suite/funcs_1/datadict/datadict_bug_12777.inceval $my_select;eval $my_show1;--error ER_TABLEACCESS_DENIED_ERROReval $my_show2;eval $my_show3;--echo # Establish connection testuser2 (user=testuser2)--replace_result $MASTER_MYPORT MYSQL_PORT $MASTER_MYSOCK MYSQL_SOCKconnect (testuser2, localhost, testuser2, , db_datadict);--source suite/funcs_1/datadict/datadict_bug_12777.inceval $my_select;--error ER_TABLEACCESS_DENIED_ERROReval $my_show1;eval $my_show2;--error ER_TABLEACCESS_DENIED_ERROReval $my_show3;--echo # Switch to connection default and close connections testuser1, testuser2connection default;disconnect testuser1;disconnect testuser2;# CleanupDROP USER 'testuser1'@'localhost';DROP USER 'testuser2'@'localhost';DROP DATABASE IF EXISTS db_datadict;--echo ###############################################################################--echo # Testcase 3.2.1.13+3.2.1.14+3.2.1.15: INFORMATION_SCHEMA.COLUMNS modifications--echo ################################################################################ 3.2.1.13: Ensure that the creation of any new database object (e.g. table or# column) automatically inserts all relevant information on that# object into every appropriate INFORMATION_SCHEMA table.# 3.2.1.14: Ensure that the alteration of any existing database object# automatically updates all relevant information on that object in# every appropriate INFORMATION_SCHEMA table.# 3.2.1.15: Ensure that the dropping of any existing database object# automatically deletes all relevant information on that object from# every appropriate INFORMATION_SCHEMA table.#--disable_warningsDROP TABLE IF EXISTS test.t1_my_table;DROP DATABASE IF EXISTS db_datadict;--enable_warningsCREATE DATABASE db_datadict;SELECT table_name FROM information_schema.columnsWHERE table_name LIKE 't1_my_table%';--replace_result $engine_type <engine_type>evalCREATE TABLE test.t1_my_table (f1 CHAR(12))DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ciENGINE = $engine_type;# Settings used in CREATE TABLE must be visible in information_schema.columns.--vertical_resultsSELECT * FROM information_schema.columnsWHERE table_name = 't1_my_table';--horizontal_results## Check modification of TABLE_NAMESELECT table_name FROM information_schema.columnsWHERE table_name LIKE 't1_my_table%';RENAME TABLE test.t1_my_table TO test.t1_my_tablex;SELECT table_name FROM information_schema.columnsWHERE table_name LIKE 't1_my_table%';## Check modification of TABLE_SCHEMASELECT table_schema,table_name FROM information_schema.columnsWHERE table_name = 't1_my_tablex';RENAME TABLE test.t1_my_tablex TO db_datadict.t1_my_tablex;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -