WL#9570: Extend SHOW statements to list hidden columns and index information.
Affects: Server-8.0
—
Status: Complete
INFORMATION_SCHEMA tables are implemented as a views on the new data dictionary tables in 8.0. But view definition for COLUMNS, STATISTICS and KEY_COLUMN_USAGE do not check the hidden column value from the dictionary tables for columns, indexes and index elements. Hence hidden columns, indexes and index elements are displayed by these INFORMATION_SCHEMA tables. SHOW statements implementation uses the INFORMATION_SCHEMA tables. So even SHOW statements displays the hidden column, index and index elements. The main goal of this WL are to, i) show columns, indexes and index element's information which are not hidden from the tables of INFORMATION_SCHEMA and SHOW statements. ii) Extend SHOW statements to list hidden columns and indexes and index elements on demand. User Documentation ================== * https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-2.html * https://dev.mysql.com/doc/refman/8.0/en/show-columns.html * https://dev.mysql.com/doc/refman/8.0/en/show-index.html
F-1: INFORMATION_SCHEMA.COLUMNS should not show the hidden columns. INFORMATION_SCHEMA.COLUMNS lists all the columns of the table. View definition of the INFORMATION_SCHEMA.COLUMNS should be modified to check hidden column value from data dictionary table "columns" and display only columns of the tables which are not hidden. For example, the following hidden columns for the any table to the mysql.columns, DB_TRX_ID, DB_ROLL_PTR These and such hidden columns should not be listed by the INFORMATION_SCHEMA.COLUMNS. F-2: INFORMATION_SCHEMA.STATISTICS* should not display hidden indexes and index elements. INFORMATION_SCHEMA.STATISTICS* lists all the index and index elements defined on the table. View definition of INFORMATION_SCHEMA.STATISTICS* should me modified to check hidden column value from the data dictionary tables "indexes" and "index_column_usage" and display only index and index elements which are not hidden. For example, hidden indexes on the hidden columns (mentioned in F-1) in the mysql.indexes. Such hidden indexes should not be listed by the INFORMATION_SCHEMA.STATISTICS*. F-3: INFORMATION_SCHEMA.KEY_COLUMN_USAGE should not display hidden indexes and index elements. INFORMATION_SCHEMA.KEY_COLUMN_USAGE lists all the index and index elements defined on the table. View definition of INFORMATION_SCHEMA.KEY_COLUMN_USAGE should be modified to check hidden column value from the data dictionary tables "indexes" and "index_column_usage" and display only index and index elements which are not hidden. For example, creates hidden indexes on the hidden columns (mentioned in F-1) in the mysql.indexes. Such hidden indexes and its elements should not be listed by the INFORMATION_SCHEMA.KEY_COLUMN_USAGE. F-4: SHOW [ FULL ] COLUMNS should not list the hidden columns. SHOW [ FULL ] COLUMNS lists all the columns from the table. SHOW COLUMNS uses INFORMATION_SCHEMA table "COLUMNS" to list the COLUMNS of the table. With F-1 changes, SHOW COLUMNS by default lists only columns which are not hidden. F-5: SHOW INDEX should not list the hidden index and index elements. SHOW INDEX lists all the index and index elements information defined on the table. SHOW INDEX uses INFORMATION_SCHEMA table "STATISTICS" to list the index and index elements defined on the table. With F-2 changes, SHOW INDEX by default lists only index and index elements which are hidden. F-6: SHOW EXTENDED [ FULL ] COLUMNS should also list hidden columns of the table. By default SHOW COLUMNS should display only columns which are not hidden. To get hidden columns too, EXTENDED keyword should be introduced to SHOW COLUMNS statement. F-7: SHOW EXTENDED INDEX should also list hidden index and index elements. By default SHOW INDEX should display only index and index elements which are not hidden. To get hidden index and index elements too, EXTENDED keyword should be introduced to SHOW INDEX statement.
Columns, index and index elements are marked as hidden by storing value "true" in the column "hidden" of the data dictionary tables "columns", "indexes" and "index_column_usage". Using this, following modifications are done to list only columns, indexes and index elements which are not hidden in INFORMATION_SCHEMA queries, SHOW statements and list hidden columns, indexes and index elements too with SHOW EXTENDED. Display non-hidden columns, index and index elements: -------------------------------------------------------- Following modifications are done to display only columns, index and index elements which are not hidden by checking the hidden column values from the dictionary table(s). 1) Modification to Native methods: ---------------------------------- Native methods CAN_ACCESS_COLUMN() and CAN_ACCESS_TABLE() are modified to either skip or display rows. New parameter is introduced to these methods to skip rows for INFORMATION_SCHEMA query. Row is skipped if value of this parameter is true. New signature of these native methods are as below, 1.a) CAN_ACCESS_TABLE: Existing: int CAN_ACCCESS_TABLE(schema_name, table_name); New: int CAN_ACCCESS_TABLE(schema_name, table_name, skip_table); 1.b) CAN_ACCESS_COLUMN: Existing: int CAN_ACCCESS_COLUMN(schema_name, table_name, field_name); New: int CAN_ACCCESS_COLUMN(schema_name, table_name, field_name, skip_column); 2) Modification INFORMATION_SCHEMA tables: ------------------------------------------ View definition of INFORMATION_SCHEMA tables are modified to skip hidden columns, index and index elements by using the new parameter introduced for CAN_ACCCESS_TABLE and CAN_ACCESS_COLUMN method. View definition of INFORMATION_SCHEMA tables is modified as below, 2.a) INFORMATION_SCHEMA.COLUMNS: ================================ COLUMNS view definition is modified as below to invoke native function CAN_ACCESS_COLUMN() with columns.hidden column value as below, CREATE OR REPLACE DEFINER=`root`@`localhost` VIEW information_schema.COLUMNS AS ... WHERE INTERNAL_GET_VIEW_WARNING_OR_ERROR(sch.name, tbl.name, tbl.type, tbl.options) AND CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name, col.hidden) ... 2.b) INFORMATION_SCHMEA.STATISTICS*: ======================================= STATISTICS* view definition is modified as below to invoke native function CAN_ACCESS_TABLE() with index.hidden and index_column_usage.hidden column values as below, CREATE OR REPLACE DEFINER=`root`@`localhost` VIEW information_schema.STATISTICS_BASE ... WHERE CAN_ACCESS_TABLE(sch.name, tbl.name, idx.hidden OR icu.hidden) ... 2.c) INFORMATION_SCHEMA.KEY_COLUMN_USAGE: ========================================= KEY_COLUMN_USAGE view definition is modified as below to invoke native function CAN_ACCESS_COLUMN() with columns.hidden, indexes.hidden and index_column_usage.hidden column values as below, CREATE OR REPLACE DEFINER=`root`@`localhost` VIEW information_schema.KEY_COLUMN_USAGE ... WHERE CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name, col.hidden OR idx.hidden OR icu.hidden) AND ... UNION (SELECT cat.name ", @collate_tolower, " AS CONSTRAINT_CATALOG, ... WHERE CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name, col.hidden OR idx.hidden OR icu.hidden) ... 2.d) INFORMATION_SCHEMA.TABLE_CONSTRAINTS: =========================================== TABLE_CONSTRAINTS view definition is modified as below to invoke native function CAN_ACCESS_TABLE() with indexes.hidden column values as below, CREATE OR REPLACE DEFINER=`root`@`localhost` VIEW information_schema.TABLE_CONSTRAINTS ... WHERE CAN_ACCESS_TABLE(sch.name, tbl.name, idx.hidden) ... In other view definitions of INFORMATION_SCHEMA tables value FALSE is passed to the new parameter. With this change only non-hidden columns, indexes and index elements are displayed by the INFORMATION_SCHEMA tables and by SHOW operations (as it uses the modified INFORMATION_SCHEMA tables). Display hidden columns, index and index elements on Demand: ----------------------------------------------------------- By default INFORMATION_SCHEMA tables and SHOW statements does not list the hidden columns, index and index elements. But these information can be listed on demand from the SHOW statements. New optional keyword EXTENDED is introduced to the SHOW COLUMNS and INDEX to even list the hidden columns, index and index elements. 1 SHOW COLUMNS: =============== SHOW COLUMNS with EXTENDED option displays the hidden columns from the table. New Syntax of SHOW COLUMNS: SHOW [EXTENDED] [FULL] COLUMNS {FROM | IN} tbl_name [{FROM | IN} db_name] [LIKE 'pattern' | WHERE expr] 2 SHOW INDEX: =============== SHOW INDEX with EXTENDED option displays the hidden index and index elements of the table. New Syntax of SHOW INDEX: SHOW [EXTENDED] {INDEX | INDEXES | KEYS} {FROM | IN} tbl_name [{FROM | IN} db_name] [WHERE expr] New member m_extended_show of bool type in the LEX is set to true when EXTENDED is used with SHOW COLUMNS and SHOW INDEX. EXTENDED keyword(LEX::m_extended_show) overrides the skip_column and skip_table parameter value in Native methods CAN_ACCESS_COLUMN and CAN_ACCESS_TABLE respectively.
Copyright (c) 2000, 2024, Oracle Corporation and/or its affiliates. All rights reserved.