1478 lines
95 KiB
Plaintext
1478 lines
95 KiB
Plaintext
########################################################################
|
|
#
|
|
# Verify definitions of I_S system views.
|
|
# --------------------------------------
|
|
# This test has three parts:
|
|
#
|
|
# 1. Verify the existence of the expected I_S system views, neither less
|
|
# nor more.
|
|
# 2. Verify the I_S_VERSION and the CREATE VIEW statements of the
|
|
# I_S system views.
|
|
# 3. Verify the checksum of the generated meta data associated with the
|
|
# current I_S version number.
|
|
#
|
|
########################################################################
|
|
#
|
|
# A note regarding the checksum usage.
|
|
# ------------------------------------
|
|
# This is based on a test by Marc Alff (perfschema.dd_version_check).
|
|
# The idea is to keep a record of each I_S version released with the
|
|
# I_S version number and a checksum created based on the meta data for
|
|
# the I_S views. It is important not to change the expected checksum
|
|
# once a release has been published.
|
|
#
|
|
# If there was an intentional change, leading to a new checksum, then:
|
|
#
|
|
# 1. Uncomment the debug output showing the low level meta data and
|
|
# verify that the changes are intentional.
|
|
# 2. Create a new target I_S version (unless the existing target IS
|
|
# version is not publicly released yet).
|
|
# 3. Add a new row in test.I_S_published_schema with the new target
|
|
# I_S version and the new checksum (or update the expected
|
|
# checksum if the target I_S version is not publicly released yet).
|
|
#
|
|
# Note that a failure to do 2, when doing 3, will result in a broken
|
|
# upgrade where the server code is expecting a certain I_S system view
|
|
# definition, while the actual persisted I_S system view definition is
|
|
# different (because it was created by a previous server binary, and
|
|
# I_S upgrade handling was not triggered).
|
|
#
|
|
# Thus, this part of the test is designed to be a reminder to do 2.
|
|
# by detecting differences in 3.
|
|
#
|
|
########################################################################
|
|
#
|
|
# How to handle test failures.
|
|
# ----------------------------
|
|
# In general, if there is a change leading to a failure in this test,
|
|
# then we must first consider whether the change is intentional, i.e.,
|
|
# whether there is a change in a I_S system view definition that
|
|
# that we actually want to do, or whether the change is by mistake
|
|
# or not needed.
|
|
#
|
|
# Then, if the change is intentional, we must make sure the following
|
|
# scenarios are handled:
|
|
#
|
|
# 1. Plain initialization of the server. This is most likely handled,
|
|
# otherwise we wouldn't even get to the point where this test starts
|
|
# failing.
|
|
# 2. Plain server restart using a data directory initialized by this
|
|
# server.
|
|
# 3. Upgrade from any supported I_S version, or server restart using
|
|
# a data directory from a different server version using the same
|
|
# I_S version.
|
|
#
|
|
# Failures in the different parts of the test must be handled as
|
|
# follows:
|
|
#
|
|
# * A failure in part 1 means that a I_S system view is added or removed.
|
|
# In this case, please make sure the tables 'I_S_view_names'
|
|
# below are kept up to date. Also make sure that
|
|
# the list of SHOW CREATE VIEW statements is up to date.
|
|
# * A failure in part 2 or 3 means that there is a change in the I_S
|
|
# system view definitions, and that we have a new I_S version. So
|
|
# if the current target I_S version number is released publicly,
|
|
# then we must bump the target I_S version. If the I_S version is
|
|
# not yet released, and has already been bumped, then it should
|
|
# stay the same. This test must have its results re-recorded. A
|
|
# failure in part 1 or 2 will most likely also lead to a failure
|
|
# in part 3.
|
|
# * A failure in part 3 means that the generated meta data is
|
|
# different than it used to be. If there is a change in part 1 or
|
|
# 2, this is to be expected. In that case, the test results must
|
|
# be re-recorded, and we must either update the expected checksum
|
|
# (if the I_S version stays the same) or add the new I_S version
|
|
# along with the expected checksum. However, if there is not a
|
|
# change in part 1 or 2, then we have changes in the SQL DDL
|
|
# semantics. This should be handled by changing the I_S initialization
|
|
# procedure to either tweak the view statements before execution
|
|
# by tweaking the generated low level meta data. Either way, the
|
|
# result of the changes to the server code should be that
|
|
# this test stops failing.
|
|
########################################################################
|
|
########################################################################
|
|
# PART 1
|
|
# Verify the existence of the expected I_S system views, neither less
|
|
########################################################################
|
|
CREATE TABLE test.I_S_view_names (name VARCHAR(64) PRIMARY KEY);
|
|
########################################################################
|
|
# Verify the existence of the expected I_S system views, neither
|
|
# less nor more. Fill help table with the I_S system view names.
|
|
########################################################################
|
|
SET debug = '+d,skip_dd_table_access_check';
|
|
########################################################################
|
|
# The number of I_S system views must be as expected.
|
|
########################################################################
|
|
include/assert.inc [There are 32 system views.]
|
|
include/assert.inc [There are 32 I_S system views in total.]
|
|
########################################################################
|
|
# No unexpected I_S tables must be present.
|
|
########################################################################
|
|
include/assert.inc [No unexpected I_S system view are present.]
|
|
########################################################################
|
|
# All expected I_S system views should be present.
|
|
########################################################################
|
|
include/assert.inc [All expected I_S system views are present.]
|
|
SET debug = '-d,skip_dd_table_access_check';
|
|
########################################################################
|
|
# PART 2. Verify the I_S_VERSION and the CREATE VIEW statements of the
|
|
# I_S system views.
|
|
########################################################################
|
|
CREATE TABLE I_S_check_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
t TEXT NOT NULL,
|
|
row_hash VARCHAR(64) DEFAULT NULL);
|
|
########################################################################
|
|
# Verify the IS_VERSION and the CREATE VIEW statements of the
|
|
# I_S system view.
|
|
########################################################################
|
|
SET debug = '+d,skip_dd_table_access_check,fetch_system_view_definition';
|
|
########################################################################
|
|
# The actual I_S version stored on disk.
|
|
########################################################################
|
|
IS_VERSION=80018
|
|
########################################################################
|
|
# List the CREATE VIEW statements for the I_S system views.
|
|
# Mask collations that depend on the lower case table names setting.
|
|
########################################################################
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.CHARACTER_SETS AS SELECT
|
|
cs.name AS CHARACTER_SET_NAME,
|
|
col.name AS DEFAULT_COLLATE_NAME,
|
|
cs.comment AS DESCRIPTION,
|
|
cs.mb_max_length AS MAXLEN FROM
|
|
mysql.character_sets cs
|
|
JOIN mysql.collations col ON cs.default_collation_id=col.id
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.CHARACTER_SETS AS SELECT
|
|
cs.name AS CHARACTER_SET_NAME,
|
|
col.name AS DEFAULT_COLLATE_NAME,
|
|
cs.comment AS DESCRIPTION,
|
|
cs.mb_max_length AS MAXLEN FROM
|
|
mysql.character_sets cs
|
|
JOIN mysql.collations col ON cs.default_collation_id=col.id
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.CHECK_CONSTRAINTS AS SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
cc.name AS CONSTRAINT_NAME,
|
|
cc.check_clause_utf8 AS CHECK_CLAUSE FROM
|
|
mysql.check_constraints cc
|
|
JOIN mysql.tables tbl ON cc.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.CHECK_CONSTRAINTS AS SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
cc.name AS CONSTRAINT_NAME,
|
|
cc.check_clause_utf8 AS CHECK_CLAUSE FROM
|
|
mysql.check_constraints cc
|
|
JOIN mysql.tables tbl ON cc.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLLATIONS AS SELECT
|
|
col.name AS COLLATION_NAME,
|
|
cs.name AS CHARACTER_SET_NAME,
|
|
col.id AS ID,
|
|
IF(EXISTS(SELECT * FROM mysql.character_sets WHERE mysql.character_sets.default_collation_id= col.id), 'Yes','') AS IS_DEFAULT,
|
|
IF(col.is_compiled,'Yes','') AS IS_COMPILED,
|
|
col.sort_length AS SORTLEN,
|
|
col.pad_attribute AS PAD_ATTRIBUTE FROM
|
|
mysql.collations col
|
|
JOIN mysql.character_sets cs ON col.character_set_id=cs.id
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLLATIONS AS SELECT
|
|
col.name AS COLLATION_NAME,
|
|
cs.name AS CHARACTER_SET_NAME,
|
|
col.id AS ID,
|
|
IF(EXISTS(SELECT * FROM mysql.character_sets WHERE mysql.character_sets.default_collation_id= col.id), 'Yes','') AS IS_DEFAULT,
|
|
IF(col.is_compiled,'Yes','') AS IS_COMPILED,
|
|
col.sort_length AS SORTLEN,
|
|
col.pad_attribute AS PAD_ATTRIBUTE FROM
|
|
mysql.collations col
|
|
JOIN mysql.character_sets cs ON col.character_set_id=cs.id
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS SELECT
|
|
col.name AS COLLATION_NAME,
|
|
cs.name AS CHARACTER_SET_NAME FROM
|
|
mysql.character_sets cs
|
|
JOIN mysql.collations col ON cs.id = col.character_set_id
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLLATION_CHARACTER_SET_APPLICABILITY AS SELECT
|
|
col.name AS COLLATION_NAME,
|
|
cs.name AS CHARACTER_SET_NAME FROM
|
|
mysql.character_sets cs
|
|
JOIN mysql.collations col ON cs.id = col.character_set_id
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLUMNS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
col.name COLLATE utf8_tolower_ci AS COLUMN_NAME,
|
|
col.ordinal_position AS ORDINAL_POSITION,
|
|
col.default_value_utf8 AS COLUMN_DEFAULT,
|
|
IF (col.is_nullable = 1, 'YES','NO') AS IS_NULLABLE,
|
|
SUBSTRING_INDEX(SUBSTRING_INDEX(col.column_type_utf8, '(', 1),' ', 1) AS DATA_TYPE,
|
|
INTERNAL_DD_CHAR_LENGTH(col.type, col.char_length, coll.name, 0) AS CHARACTER_MAXIMUM_LENGTH,
|
|
INTERNAL_DD_CHAR_LENGTH(col.type, col.char_length, coll.name, 1) AS CHARACTER_OCTET_LENGTH,
|
|
IF (col.numeric_precision = 0, NULL, col.numeric_precision) AS NUMERIC_PRECISION,
|
|
IF (col.numeric_scale = 0 && col.numeric_precision = 0, NULL, col.numeric_scale) AS NUMERIC_SCALE,
|
|
col.datetime_precision AS DATETIME_PRECISION,
|
|
CASE col.type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, cs.name)) ELSE NULL END AS CHARACTER_SET_NAME,
|
|
CASE col.type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, coll.name)) ELSE NULL END AS COLLATION_NAME,
|
|
col.column_type_utf8 AS COLUMN_TYPE,
|
|
col.column_key AS COLUMN_KEY,
|
|
INTERNAL_GET_DD_COLUMN_EXTRA(ISNULL(col.generation_expression_utf8), col.is_virtual, col.is_auto_increment, col.update_option, IF(LENGTH(col.default_option), TRUE, FALSE), col.options) AS EXTRA,
|
|
GET_DD_COLUMN_PRIVILEGES(sch.name, tbl.name, col.name) AS PRIVILEGES,
|
|
IFNULL(col.comment, '') AS COLUMN_COMMENT,
|
|
IFNULL(col.generation_expression_utf8, '') AS GENERATION_EXPRESSION,
|
|
col.srs_id AS SRS_ID FROM
|
|
mysql.columns col
|
|
JOIN mysql.tables tbl ON col.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll ON col.collation_id=coll.id
|
|
JOIN mysql.character_sets cs ON coll.character_set_id= cs.id 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)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden <> 'Visible')
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLUMNS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
col.name COLLATE utf8_tolower_ci AS COLUMN_NAME,
|
|
col.ordinal_position AS ORDINAL_POSITION,
|
|
col.default_value_utf8 AS COLUMN_DEFAULT,
|
|
IF (col.is_nullable = 1, 'YES','NO') AS IS_NULLABLE,
|
|
SUBSTRING_INDEX(SUBSTRING_INDEX(col.column_type_utf8, '(', 1),' ', 1) AS DATA_TYPE,
|
|
INTERNAL_DD_CHAR_LENGTH(col.type, col.char_length, coll.name, 0) AS CHARACTER_MAXIMUM_LENGTH,
|
|
INTERNAL_DD_CHAR_LENGTH(col.type, col.char_length, coll.name, 1) AS CHARACTER_OCTET_LENGTH,
|
|
IF (col.numeric_precision = 0, NULL, col.numeric_precision) AS NUMERIC_PRECISION,
|
|
IF (col.numeric_scale = 0 && col.numeric_precision = 0, NULL, col.numeric_scale) AS NUMERIC_SCALE,
|
|
col.datetime_precision AS DATETIME_PRECISION,
|
|
CASE col.type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, cs.name)) ELSE NULL END AS CHARACTER_SET_NAME,
|
|
CASE col.type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, coll.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, coll.name)) ELSE NULL END AS COLLATION_NAME,
|
|
col.column_type_utf8 AS COLUMN_TYPE,
|
|
col.column_key AS COLUMN_KEY,
|
|
INTERNAL_GET_DD_COLUMN_EXTRA(ISNULL(col.generation_expression_utf8), col.is_virtual, col.is_auto_increment, col.update_option, IF(LENGTH(col.default_option), TRUE, FALSE), col.options) AS EXTRA,
|
|
GET_DD_COLUMN_PRIVILEGES(sch.name, tbl.name, col.name) AS PRIVILEGES,
|
|
IFNULL(col.comment, '') AS COLUMN_COMMENT,
|
|
IFNULL(col.generation_expression_utf8, '') AS GENERATION_EXPRESSION,
|
|
col.srs_id AS SRS_ID FROM
|
|
mysql.columns col
|
|
JOIN mysql.tables tbl ON col.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll ON col.collation_id=coll.id
|
|
JOIN mysql.character_sets cs ON coll.character_set_id= cs.id 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)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden <> 'Visible')
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLUMN_STATISTICS AS SELECT
|
|
SCHEMA_NAME AS SCHEMA_NAME,
|
|
TABLE_NAME AS TABLE_NAME,
|
|
COLUMN_NAME AS COLUMN_NAME,
|
|
HISTOGRAM AS HISTOGRAM FROM
|
|
mysql.column_statistics WHERE
|
|
CAN_ACCESS_TABLE(SCHEMA_NAME, TABLE_NAME)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLUMN_STATISTICS AS SELECT
|
|
SCHEMA_NAME AS SCHEMA_NAME,
|
|
TABLE_NAME AS TABLE_NAME,
|
|
COLUMN_NAME AS COLUMN_NAME,
|
|
HISTOGRAM AS HISTOGRAM FROM
|
|
mysql.column_statistics WHERE
|
|
CAN_ACCESS_TABLE(SCHEMA_NAME, TABLE_NAME)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.EVENTS AS SELECT
|
|
cat.name AS EVENT_CATALOG,
|
|
sch.name AS EVENT_SCHEMA,
|
|
evt.name AS EVENT_NAME,
|
|
evt.definer AS DEFINER,
|
|
evt.time_zone AS TIME_ZONE,
|
|
'SQL' AS EVENT_BODY,
|
|
evt.definition_utf8 AS EVENT_DEFINITION,
|
|
IF (ISNULL(evt.interval_value),'ONE TIME','RECURRING') AS EVENT_TYPE,
|
|
CONVERT_TZ(evt.execute_at,'+00:00', evt.time_zone) AS EXECUTE_AT,
|
|
CONVERT_INTERVAL_TO_USER_INTERVAL(evt.interval_value,evt.interval_field) AS INTERVAL_VALUE,
|
|
evt.interval_field AS INTERVAL_FIELD,
|
|
evt.sql_mode AS SQL_MODE,
|
|
CONVERT_TZ(evt.starts,'+00:00', evt.time_zone) AS STARTS,
|
|
CONVERT_TZ(evt.ends,'+00:00', evt.time_zone) AS ENDS,
|
|
evt.status AS STATUS,
|
|
IF (evt.on_completion='DROP', 'NOT PRESERVE', 'PRESERVE') AS ON_COMPLETION,
|
|
evt.created AS CREATED,
|
|
evt.last_altered AS LAST_ALTERED,
|
|
evt.last_executed AS LAST_EXECUTED,
|
|
evt.comment AS EVENT_COMMENT,
|
|
evt.originator AS ORIGINATOR,
|
|
cs_client.name AS CHARACTER_SET_CLIENT,
|
|
coll_conn.name AS COLLATION_CONNECTION,
|
|
coll_db.name AS DATABASE_COLLATION FROM
|
|
mysql.events evt
|
|
JOIN mysql.schemata sch ON evt.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll_client ON coll_client.id=evt.client_collation_id
|
|
JOIN mysql.character_sets cs_client ON cs_client.id=coll_client.character_set_id
|
|
JOIN mysql.collations coll_conn ON coll_conn.id=evt.connection_collation_id
|
|
JOIN mysql.collations coll_db ON coll_db.id=evt.schema_collation_id WHERE
|
|
CAN_ACCESS_EVENT(sch.name)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.EVENTS AS SELECT
|
|
cat.name AS EVENT_CATALOG,
|
|
sch.name AS EVENT_SCHEMA,
|
|
evt.name AS EVENT_NAME,
|
|
evt.definer AS DEFINER,
|
|
evt.time_zone AS TIME_ZONE,
|
|
'SQL' AS EVENT_BODY,
|
|
evt.definition_utf8 AS EVENT_DEFINITION,
|
|
IF (ISNULL(evt.interval_value),'ONE TIME','RECURRING') AS EVENT_TYPE,
|
|
CONVERT_TZ(evt.execute_at,'+00:00', evt.time_zone) AS EXECUTE_AT,
|
|
CONVERT_INTERVAL_TO_USER_INTERVAL(evt.interval_value,evt.interval_field) AS INTERVAL_VALUE,
|
|
evt.interval_field AS INTERVAL_FIELD,
|
|
evt.sql_mode AS SQL_MODE,
|
|
CONVERT_TZ(evt.starts,'+00:00', evt.time_zone) AS STARTS,
|
|
CONVERT_TZ(evt.ends,'+00:00', evt.time_zone) AS ENDS,
|
|
evt.status AS STATUS,
|
|
IF (evt.on_completion='DROP', 'NOT PRESERVE', 'PRESERVE') AS ON_COMPLETION,
|
|
evt.created AS CREATED,
|
|
evt.last_altered AS LAST_ALTERED,
|
|
evt.last_executed AS LAST_EXECUTED,
|
|
evt.comment AS EVENT_COMMENT,
|
|
evt.originator AS ORIGINATOR,
|
|
cs_client.name AS CHARACTER_SET_CLIENT,
|
|
coll_conn.name AS COLLATION_CONNECTION,
|
|
coll_db.name AS DATABASE_COLLATION FROM
|
|
mysql.events evt
|
|
JOIN mysql.schemata sch ON evt.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll_client ON coll_client.id=evt.client_collation_id
|
|
JOIN mysql.character_sets cs_client ON cs_client.id=coll_client.character_set_id
|
|
JOIN mysql.collations coll_conn ON coll_conn.id=evt.connection_collation_id
|
|
JOIN mysql.collations coll_db ON coll_db.id=evt.schema_collation_id WHERE
|
|
CAN_ACCESS_EVENT(sch.name)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.FILES AS SELECT
|
|
INTERNAL_TABLESPACE_ID(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS FILE_ID,
|
|
REPLACE(IF( INSTR('./', LEFT(tsf.file_name,1)) = 0 AND SUBSTRING(tsf.file_name,2,1) != ':', CONCAT('./', tsf.file_name), tsf.file_name), '\\', '/') AS FILE_NAME,
|
|
INTERNAL_TABLESPACE_TYPE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS FILE_TYPE,
|
|
ts.name AS TABLESPACE_NAME,
|
|
'' AS TABLE_CATALOG,
|
|
NULL AS TABLE_SCHEMA,
|
|
NULL AS TABLE_NAME,
|
|
INTERNAL_TABLESPACE_LOGFILE_GROUP_NAME(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS LOGFILE_GROUP_NAME,
|
|
INTERNAL_TABLESPACE_LOGFILE_GROUP_NUMBER(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS LOGFILE_GROUP_NUMBER,
|
|
ts.engine AS ENGINE,
|
|
NULL AS FULLTEXT_KEYS,
|
|
NULL AS DELETED_ROWS,
|
|
NULL AS UPDATE_COUNT,
|
|
INTERNAL_TABLESPACE_FREE_EXTENTS(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS FREE_EXTENTS,
|
|
INTERNAL_TABLESPACE_TOTAL_EXTENTS(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS TOTAL_EXTENTS,
|
|
INTERNAL_TABLESPACE_EXTENT_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS EXTENT_SIZE,
|
|
INTERNAL_TABLESPACE_INITIAL_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS INITIAL_SIZE,
|
|
INTERNAL_TABLESPACE_MAXIMUM_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS MAXIMUM_SIZE,
|
|
INTERNAL_TABLESPACE_AUTOEXTEND_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS AUTOEXTEND_SIZE,
|
|
NULL AS CREATION_TIME,
|
|
NULL AS LAST_UPDATE_TIME,
|
|
NULL AS LAST_ACCESS_TIME,
|
|
NULL AS RECOVER_TIME,
|
|
NULL AS TRANSACTION_COUNTER,
|
|
INTERNAL_TABLESPACE_VERSION(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS VERSION,
|
|
INTERNAL_TABLESPACE_ROW_FORMAT(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS ROW_FORMAT,
|
|
NULL AS TABLE_ROWS,
|
|
NULL AS AVG_ROW_LENGTH,
|
|
NULL AS DATA_LENGTH,
|
|
NULL AS MAX_DATA_LENGTH,
|
|
NULL AS INDEX_LENGTH,
|
|
INTERNAL_TABLESPACE_DATA_FREE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS DATA_FREE,
|
|
NULL AS CREATE_TIME,
|
|
NULL AS UPDATE_TIME,
|
|
NULL AS CHECK_TIME,
|
|
NULL AS CHECKSUM,
|
|
INTERNAL_TABLESPACE_STATUS(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS STATUS,
|
|
INTERNAL_TABLESPACE_EXTRA(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS EXTRA FROM
|
|
mysql.tablespaces ts
|
|
JOIN mysql.tablespace_files tsf ON ts.id=tsf.tablespace_id
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.FILES AS SELECT
|
|
INTERNAL_TABLESPACE_ID(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS FILE_ID,
|
|
REPLACE(IF( INSTR('./', LEFT(tsf.file_name,1)) = 0 AND SUBSTRING(tsf.file_name,2,1) != ':', CONCAT('./', tsf.file_name), tsf.file_name), '\\', '/') AS FILE_NAME,
|
|
INTERNAL_TABLESPACE_TYPE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS FILE_TYPE,
|
|
ts.name AS TABLESPACE_NAME,
|
|
'' AS TABLE_CATALOG,
|
|
NULL AS TABLE_SCHEMA,
|
|
NULL AS TABLE_NAME,
|
|
INTERNAL_TABLESPACE_LOGFILE_GROUP_NAME(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS LOGFILE_GROUP_NAME,
|
|
INTERNAL_TABLESPACE_LOGFILE_GROUP_NUMBER(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS LOGFILE_GROUP_NUMBER,
|
|
ts.engine AS ENGINE,
|
|
NULL AS FULLTEXT_KEYS,
|
|
NULL AS DELETED_ROWS,
|
|
NULL AS UPDATE_COUNT,
|
|
INTERNAL_TABLESPACE_FREE_EXTENTS(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS FREE_EXTENTS,
|
|
INTERNAL_TABLESPACE_TOTAL_EXTENTS(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS TOTAL_EXTENTS,
|
|
INTERNAL_TABLESPACE_EXTENT_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS EXTENT_SIZE,
|
|
INTERNAL_TABLESPACE_INITIAL_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS INITIAL_SIZE,
|
|
INTERNAL_TABLESPACE_MAXIMUM_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS MAXIMUM_SIZE,
|
|
INTERNAL_TABLESPACE_AUTOEXTEND_SIZE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS AUTOEXTEND_SIZE,
|
|
NULL AS CREATION_TIME,
|
|
NULL AS LAST_UPDATE_TIME,
|
|
NULL AS LAST_ACCESS_TIME,
|
|
NULL AS RECOVER_TIME,
|
|
NULL AS TRANSACTION_COUNTER,
|
|
INTERNAL_TABLESPACE_VERSION(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS VERSION,
|
|
INTERNAL_TABLESPACE_ROW_FORMAT(ts.name,tsf.file_name, ts.engine, ts.se_private_data) AS ROW_FORMAT,
|
|
NULL AS TABLE_ROWS,
|
|
NULL AS AVG_ROW_LENGTH,
|
|
NULL AS DATA_LENGTH,
|
|
NULL AS MAX_DATA_LENGTH,
|
|
NULL AS INDEX_LENGTH,
|
|
INTERNAL_TABLESPACE_DATA_FREE(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS DATA_FREE,
|
|
NULL AS CREATE_TIME,
|
|
NULL AS UPDATE_TIME,
|
|
NULL AS CHECK_TIME,
|
|
NULL AS CHECKSUM,
|
|
INTERNAL_TABLESPACE_STATUS(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS STATUS,
|
|
INTERNAL_TABLESPACE_EXTRA(ts.name, tsf.file_name, ts.engine, ts.se_private_data) AS EXTRA FROM
|
|
mysql.tablespaces ts
|
|
JOIN mysql.tablespace_files tsf ON ts.id=tsf.tablespace_id
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_DATAFILES AS SELECT
|
|
GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'id') AS SPACE,
|
|
ts_files.file_name AS PATH FROM
|
|
mysql.tablespace_files ts_files
|
|
JOIN mysql.tablespaces ts ON ts.id=ts_files.tablespace_id WHERE
|
|
ts.se_private_data IS NOT NULL
|
|
AND ts.engine='InnoDB'
|
|
AND ts.name<>'mysql'
|
|
AND ts.name<>'innodb_temporary'
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_DATAFILES AS SELECT
|
|
GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'id') AS SPACE,
|
|
ts_files.file_name AS PATH FROM
|
|
mysql.tablespace_files ts_files
|
|
JOIN mysql.tablespaces ts ON ts.id=ts_files.tablespace_id WHERE
|
|
ts.se_private_data IS NOT NULL
|
|
AND ts.engine='InnoDB'
|
|
AND ts.name<>'mysql'
|
|
AND ts.name<>'innodb_temporary'
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_FOREIGN AS SELECT
|
|
CONCAT(sch.name, '/', fk.name) AS ID,
|
|
CONCAT(sch.name, '/', tbl.name) AS FOR_NAME,
|
|
CONCAT(fk.referenced_table_schema, '/', fk.referenced_table_name) AS REF_NAME,
|
|
COUNT(*) AS N_COLS,
|
|
IF(fk.delete_rule='CASCADE',1,0)|IF(fk.delete_rule='SET NULL',2,0)|IF(fk.update_rule='CASCADE',4,0)|IF(fk.update_rule='SET NULL',8,0)|IF(fk.delete_rule='NO ACTION',16,0)|IF(fk.update_rule='NO ACTION',32,0) AS TYPE FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON fk.schema_id=sch.id
|
|
JOIN mysql.foreign_key_column_usage col ON fk.id=col.foreign_key_id WHERE
|
|
NOT tbl.type = 'VIEW'
|
|
AND tbl.hidden = 'Visible'
|
|
AND tbl.se_private_id IS NOT NULL
|
|
AND tbl.engine='INNODB'
|
|
GROUP BY fk.id
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_FOREIGN AS SELECT
|
|
CONCAT(sch.name, '/', fk.name) AS ID,
|
|
CONCAT(sch.name, '/', tbl.name) AS FOR_NAME,
|
|
CONCAT(fk.referenced_table_schema, '/', fk.referenced_table_name) AS REF_NAME,
|
|
COUNT(*) AS N_COLS,
|
|
IF(fk.delete_rule='CASCADE',1,0)|IF(fk.delete_rule='SET NULL',2,0)|IF(fk.update_rule='CASCADE',4,0)|IF(fk.update_rule='SET NULL',8,0)|IF(fk.delete_rule='NO ACTION',16,0)|IF(fk.update_rule='NO ACTION',32,0) AS TYPE FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON fk.schema_id=sch.id
|
|
JOIN mysql.foreign_key_column_usage col ON fk.id=col.foreign_key_id WHERE
|
|
NOT tbl.type = 'VIEW'
|
|
AND tbl.hidden = 'Visible'
|
|
AND tbl.se_private_id IS NOT NULL
|
|
AND tbl.engine='INNODB'
|
|
GROUP BY fk.id
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_FOREIGN_COLS AS SELECT
|
|
CONCAT(sch.name, '/', fk.name) AS ID,
|
|
col.name AS FOR_COL_NAME,
|
|
referenced_column_name AS REF_COL_NAME,
|
|
fk_col.ordinal_position AS POS FROM
|
|
mysql.foreign_key_column_usage fk_col
|
|
JOIN mysql.foreign_keys fk ON fk.id=fk_col.foreign_key_id
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON fk.schema_id=sch.id
|
|
JOIN mysql.columns col ON tbl.id=col.table_id AND fk_col.column_id=col.id WHERE
|
|
NOT tbl.type = 'VIEW'
|
|
AND tbl.hidden = 'Visible'
|
|
AND tbl.se_private_id IS NOT NULL
|
|
AND tbl.engine='INNODB'
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_FOREIGN_COLS AS SELECT
|
|
CONCAT(sch.name, '/', fk.name) AS ID,
|
|
col.name AS FOR_COL_NAME,
|
|
referenced_column_name AS REF_COL_NAME,
|
|
fk_col.ordinal_position AS POS FROM
|
|
mysql.foreign_key_column_usage fk_col
|
|
JOIN mysql.foreign_keys fk ON fk.id=fk_col.foreign_key_id
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON fk.schema_id=sch.id
|
|
JOIN mysql.columns col ON tbl.id=col.table_id AND fk_col.column_id=col.id WHERE
|
|
NOT tbl.type = 'VIEW'
|
|
AND tbl.hidden = 'Visible'
|
|
AND tbl.se_private_id IS NOT NULL
|
|
AND tbl.engine='INNODB'
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_FIELDS AS SELECT
|
|
GET_DD_INDEX_PRIVATE_DATA(idx.se_private_data, 'id') AS INDEX_ID,
|
|
col.name AS NAME,
|
|
fld.ordinal_position - 1 AS POS FROM
|
|
mysql.index_column_usage fld
|
|
JOIN mysql.columns col ON fld.column_id=col.id
|
|
JOIN mysql.indexes idx ON fld.index_id=idx.id
|
|
JOIN mysql.tables tbl ON tbl.id=idx.table_id WHERE
|
|
NOT tbl.type = 'VIEW'
|
|
AND tbl.hidden = 'Visible'
|
|
AND NOT fld.hidden
|
|
AND tbl.se_private_id IS NOT NULL
|
|
AND tbl.engine='INNODB'
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_FIELDS AS SELECT
|
|
GET_DD_INDEX_PRIVATE_DATA(idx.se_private_data, 'id') AS INDEX_ID,
|
|
col.name AS NAME,
|
|
fld.ordinal_position - 1 AS POS FROM
|
|
mysql.index_column_usage fld
|
|
JOIN mysql.columns col ON fld.column_id=col.id
|
|
JOIN mysql.indexes idx ON fld.index_id=idx.id
|
|
JOIN mysql.tables tbl ON tbl.id=idx.table_id WHERE
|
|
NOT tbl.type = 'VIEW'
|
|
AND tbl.hidden = 'Visible'
|
|
AND NOT fld.hidden
|
|
AND tbl.se_private_id IS NOT NULL
|
|
AND tbl.engine='INNODB'
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_TABLESPACES_BRIEF AS SELECT
|
|
GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'id') AS SPACE,
|
|
ts.name AS NAME,
|
|
ts_files.file_name AS PATH,
|
|
GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'flags') AS FLAG,
|
|
IF(GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'id')=0, 'System', IF((GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'flags')&2048)>>11 != 0, 'General', 'Single')) AS SPACE_TYPE FROM
|
|
mysql.tablespace_files ts_files
|
|
JOIN mysql.tablespaces ts ON ts.id=ts_files.tablespace_id WHERE
|
|
ts.se_private_data IS NOT NULL
|
|
AND ts.engine='InnoDB'
|
|
AND ts.name<>'mysql'
|
|
AND ts.name<>'innodb_temporary'
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.INNODB_TABLESPACES_BRIEF AS SELECT
|
|
GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'id') AS SPACE,
|
|
ts.name AS NAME,
|
|
ts_files.file_name AS PATH,
|
|
GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'flags') AS FLAG,
|
|
IF(GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'id')=0, 'System', IF((GET_DD_TABLESPACE_PRIVATE_DATA(ts.se_private_data, 'flags')&2048)>>11 != 0, 'General', 'Single')) AS SPACE_TYPE FROM
|
|
mysql.tablespace_files ts_files
|
|
JOIN mysql.tablespaces ts ON ts.id=ts_files.tablespace_id WHERE
|
|
ts.se_private_data IS NOT NULL
|
|
AND ts.engine='InnoDB'
|
|
AND ts.name<>'mysql'
|
|
AND ts.name<>'innodb_temporary'
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.KEY_COLUMN_USAGE AS (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
idx.name AS CONSTRAINT_NAME,
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
col.name COLLATE utf8_tolower_ci AS COLUMN_NAME,
|
|
icu.ordinal_position AS ORDINAL_POSITION,
|
|
NULL AS POSITION_IN_UNIQUE_CONSTRAINT,
|
|
NULL AS REFERENCED_TABLE_SCHEMA,
|
|
NULL AS REFERENCED_TABLE_NAME,
|
|
NULL AS REFERENCED_COLUMN_NAME FROM
|
|
mysql.indexes idx
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.index_column_usage icu ON icu.index_id=idx.id
|
|
JOIN mysql.columns col ON icu.column_id=col.id AND idx.type IN ('PRIMARY', 'UNIQUE') WHERE
|
|
CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden <> 'Visible' OR idx.hidden OR icu.hidden)
|
|
) UNION (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
fk.name COLLATE utf8_tolower_ci AS CONSTRAINT_NAME,
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
col.name COLLATE utf8_tolower_ci AS COLUMN_NAME,
|
|
fkcu.ordinal_position AS ORDINAL_POSITION,
|
|
fkcu.ordinal_position AS POSITION_IN_UNIQUE_CONSTRAINT,
|
|
fk.referenced_table_schema AS REFERENCED_TABLE_SCHEMA,
|
|
fk.referenced_table_name AS REFERENCED_TABLE_NAME,
|
|
fkcu.referenced_column_name AS REFERENCED_COLUMN_NAME FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.foreign_key_column_usage fkcu ON fkcu.foreign_key_id=fk.id
|
|
JOIN mysql.schemata sch ON fk.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.columns col ON fkcu.column_id=col.id WHERE
|
|
CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden <> 'Visible')
|
|
)
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.KEY_COLUMN_USAGE AS (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
idx.name AS CONSTRAINT_NAME,
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
col.name COLLATE utf8_tolower_ci AS COLUMN_NAME,
|
|
icu.ordinal_position AS ORDINAL_POSITION,
|
|
NULL AS POSITION_IN_UNIQUE_CONSTRAINT,
|
|
NULL AS REFERENCED_TABLE_SCHEMA,
|
|
NULL AS REFERENCED_TABLE_NAME,
|
|
NULL AS REFERENCED_COLUMN_NAME FROM
|
|
mysql.indexes idx
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.index_column_usage icu ON icu.index_id=idx.id
|
|
JOIN mysql.columns col ON icu.column_id=col.id AND idx.type IN ('PRIMARY', 'UNIQUE') WHERE
|
|
CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden <> 'Visible' OR idx.hidden OR icu.hidden)
|
|
) UNION (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
fk.name COLLATE utf8_tolower_ci AS CONSTRAINT_NAME,
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
col.name COLLATE utf8_tolower_ci AS COLUMN_NAME,
|
|
fkcu.ordinal_position AS ORDINAL_POSITION,
|
|
fkcu.ordinal_position AS POSITION_IN_UNIQUE_CONSTRAINT,
|
|
fk.referenced_table_schema AS REFERENCED_TABLE_SCHEMA,
|
|
fk.referenced_table_name AS REFERENCED_TABLE_NAME,
|
|
fkcu.referenced_column_name AS REFERENCED_COLUMN_NAME FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.foreign_key_column_usage fkcu ON fkcu.foreign_key_id=fk.id
|
|
JOIN mysql.schemata sch ON fk.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.columns col ON fkcu.column_id=col.id WHERE
|
|
CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden <> 'Visible')
|
|
)");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.KEYWORDS AS SELECT
|
|
j.word AS WORD,
|
|
j.reserved AS RESERVED FROM
|
|
JSON_TABLE(<elements masked>) AS j
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.KEYWORDS AS SELECT
|
|
j.word AS WORD,
|
|
j.reserved AS RESERVED FROM
|
|
JSON_TABLE(<elements masked>) AS j
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.PARAMETERS AS SELECT
|
|
cat.name AS SPECIFIC_CATALOG,
|
|
sch.name AS SPECIFIC_SCHEMA,
|
|
rtn.name AS SPECIFIC_NAME,
|
|
IF (rtn.type = 'FUNCTION', prm.ordinal_position-1, prm.ordinal_position) AS ORDINAL_POSITION,
|
|
IF (rtn.type = 'FUNCTION' AND prm.ordinal_position = 1, NULL, prm.mode) AS PARAMETER_MODE,
|
|
IF (rtn.type = 'FUNCTION' AND prm.ordinal_position = 1, NULL, prm.name) AS PARAMETER_NAME,
|
|
SUBSTRING_INDEX(SUBSTRING_INDEX(prm.data_type_utf8, '(', 1), ' ', 1) AS DATA_TYPE,
|
|
INTERNAL_DD_CHAR_LENGTH(prm.data_type, prm.char_length, col.name, 0) AS CHARACTER_MAXIMUM_LENGTH,
|
|
INTERNAL_DD_CHAR_LENGTH(prm.data_type, prm.char_length, col.name, 1) AS CHARACTER_OCTET_LENGTH,
|
|
prm.numeric_precision AS NUMERIC_PRECISION,
|
|
IF(ISNULL(prm.numeric_precision), NULL, IFNULL(prm.numeric_scale, 0)) AS NUMERIC_SCALE,
|
|
prm.datetime_precision AS DATETIME_PRECISION,
|
|
CASE prm.data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, cs.name)) ELSE NULL END AS CHARACTER_SET_NAME,
|
|
CASE prm.data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, col.name)) ELSE NULL END AS COLLATION_NAME,
|
|
prm.data_type_utf8 AS DTD_IDENTIFIER,
|
|
rtn.type AS ROUTINE_TYPE FROM
|
|
mysql.parameters prm JOIN mysql.routines rtn ON prm.routine_id=rtn.id
|
|
JOIN mysql.schemata sch ON rtn.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations col ON prm.collation_id=col.id
|
|
JOIN mysql.character_sets cs ON col.character_set_id=cs.id WHERE
|
|
CAN_ACCESS_ROUTINE(sch.name, rtn.name, rtn.type, rtn.definer, FALSE)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.PARAMETERS AS SELECT
|
|
cat.name AS SPECIFIC_CATALOG,
|
|
sch.name AS SPECIFIC_SCHEMA,
|
|
rtn.name AS SPECIFIC_NAME,
|
|
IF (rtn.type = 'FUNCTION', prm.ordinal_position-1, prm.ordinal_position) AS ORDINAL_POSITION,
|
|
IF (rtn.type = 'FUNCTION' AND prm.ordinal_position = 1, NULL, prm.mode) AS PARAMETER_MODE,
|
|
IF (rtn.type = 'FUNCTION' AND prm.ordinal_position = 1, NULL, prm.name) AS PARAMETER_NAME,
|
|
SUBSTRING_INDEX(SUBSTRING_INDEX(prm.data_type_utf8, '(', 1), ' ', 1) AS DATA_TYPE,
|
|
INTERNAL_DD_CHAR_LENGTH(prm.data_type, prm.char_length, col.name, 0) AS CHARACTER_MAXIMUM_LENGTH,
|
|
INTERNAL_DD_CHAR_LENGTH(prm.data_type, prm.char_length, col.name, 1) AS CHARACTER_OCTET_LENGTH,
|
|
prm.numeric_precision AS NUMERIC_PRECISION,
|
|
IF(ISNULL(prm.numeric_precision), NULL, IFNULL(prm.numeric_scale, 0)) AS NUMERIC_SCALE,
|
|
prm.datetime_precision AS DATETIME_PRECISION,
|
|
CASE prm.data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, cs.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, cs.name)) ELSE NULL END AS CHARACTER_SET_NAME,
|
|
CASE prm.data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs.name='binary',NULL, col.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs.name='binary',NULL, col.name)) ELSE NULL END AS COLLATION_NAME,
|
|
prm.data_type_utf8 AS DTD_IDENTIFIER,
|
|
rtn.type AS ROUTINE_TYPE FROM
|
|
mysql.parameters prm JOIN mysql.routines rtn ON prm.routine_id=rtn.id
|
|
JOIN mysql.schemata sch ON rtn.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations col ON prm.collation_id=col.id
|
|
JOIN mysql.character_sets cs ON col.character_set_id=cs.id WHERE
|
|
CAN_ACCESS_ROUTINE(sch.name, rtn.name, rtn.type, rtn.definer, FALSE)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.PARTITIONS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
part.name AS PARTITION_NAME,
|
|
sub_part.name AS SUBPARTITION_NAME,
|
|
part.number+1 AS PARTITION_ORDINAL_POSITION,
|
|
sub_part.number+1 AS SUBPARTITION_ORDINAL_POSITION,
|
|
CASE tbl.partition_type WHEN 'HASH' THEN 'HASH' WHEN 'RANGE' THEN 'RANGE' WHEN 'LIST' THEN 'LIST' WHEN 'AUTO' THEN 'AUTO' WHEN 'KEY_51' THEN 'KEY' WHEN 'KEY_55' THEN 'KEY' WHEN 'LINEAR_KEY_51' THEN 'LINEAR KEY' WHEN 'LINEAR_KEY_55' THEN 'LINEAR KEY' WHEN 'LINEAR_HASH' THEN 'LINEAR HASH' WHEN 'RANGE_COLUMNS' THEN 'RANGE COLUMNS' WHEN 'LIST_COLUMNS' THEN 'LIST COLUMNS' ELSE NULL END AS PARTITION_METHOD,
|
|
CASE tbl.subpartition_type WHEN 'HASH' THEN 'HASH' WHEN 'RANGE' THEN 'RANGE' WHEN 'LIST' THEN 'LIST' WHEN 'AUTO' THEN 'AUTO' WHEN 'KEY_51' THEN 'KEY' WHEN 'KEY_55' THEN 'KEY' WHEN 'LINEAR_KEY_51' THEN 'LINEAR KEY' WHEN 'LINEAR_KEY_55' THEN 'LINEAR KEY' WHEN 'LINEAR_HASH' THEN 'LINEAR HASH' WHEN 'RANGE_COLUMNS' THEN 'RANGE COLUMNS' WHEN 'LIST_COLUMNS' THEN 'LIST COLUMNS' ELSE NULL END AS SUBPARTITION_METHOD,
|
|
tbl.partition_expression_utf8 AS PARTITION_EXPRESSION,
|
|
tbl.subpartition_expression_utf8 AS SUBPARTITION_EXPRESSION,
|
|
part.description_utf8 AS PARTITION_DESCRIPTION,
|
|
INTERNAL_TABLE_ROWS(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS TABLE_ROWS,
|
|
INTERNAL_AVG_ROW_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS AVG_ROW_LENGTH,
|
|
INTERNAL_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS DATA_LENGTH,
|
|
INTERNAL_MAX_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS MAX_DATA_LENGTH,
|
|
INTERNAL_INDEX_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS INDEX_LENGTH,
|
|
INTERNAL_DATA_FREE(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS DATA_FREE,
|
|
tbl.created AS CREATE_TIME,
|
|
INTERNAL_UPDATE_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS UPDATE_TIME,
|
|
INTERNAL_CHECK_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS CHECK_TIME,
|
|
INTERNAL_CHECKSUM(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS CHECKSUM,
|
|
IF(sub_part.name IS NULL,IFNULL(part.comment,''), IFNULL(sub_part.comment,'')) AS PARTITION_COMMENT,
|
|
IF(part.name IS NULL, '', INTERNAL_GET_PARTITION_NODEGROUP( IF(sub_part.name IS NULL, part.options, sub_part.options))) AS NODEGROUP,
|
|
IFNULL(sub_part_ts.name, part_ts.name) AS TABLESPACE_NAME FROM
|
|
mysql.tables tbl
|
|
JOIN mysql.schemata sch ON sch.id=tbl.schema_id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
LEFT JOIN mysql.table_partitions part ON part.table_id=tbl.id
|
|
LEFT JOIN mysql.table_partitions sub_part ON sub_part.parent_partition_id=part.id
|
|
LEFT JOIN mysql.tablespaces part_ts ON part_ts.id=part.tablespace_id
|
|
LEFT JOIN mysql.tablespaces sub_part_ts ON sub_part.tablespace_id IS NOT NULL AND sub_part_ts.id=sub_part.tablespace_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
AND part.parent_partition_id IS NULL
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.PARTITIONS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
part.name AS PARTITION_NAME,
|
|
sub_part.name AS SUBPARTITION_NAME,
|
|
part.number+1 AS PARTITION_ORDINAL_POSITION,
|
|
sub_part.number+1 AS SUBPARTITION_ORDINAL_POSITION,
|
|
CASE tbl.partition_type WHEN 'HASH' THEN 'HASH' WHEN 'RANGE' THEN 'RANGE' WHEN 'LIST' THEN 'LIST' WHEN 'AUTO' THEN 'AUTO' WHEN 'KEY_51' THEN 'KEY' WHEN 'KEY_55' THEN 'KEY' WHEN 'LINEAR_KEY_51' THEN 'LINEAR KEY' WHEN 'LINEAR_KEY_55' THEN 'LINEAR KEY' WHEN 'LINEAR_HASH' THEN 'LINEAR HASH' WHEN 'RANGE_COLUMNS' THEN 'RANGE COLUMNS' WHEN 'LIST_COLUMNS' THEN 'LIST COLUMNS' ELSE NULL END AS PARTITION_METHOD,
|
|
CASE tbl.subpartition_type WHEN 'HASH' THEN 'HASH' WHEN 'RANGE' THEN 'RANGE' WHEN 'LIST' THEN 'LIST' WHEN 'AUTO' THEN 'AUTO' WHEN 'KEY_51' THEN 'KEY' WHEN 'KEY_55' THEN 'KEY' WHEN 'LINEAR_KEY_51' THEN 'LINEAR KEY' WHEN 'LINEAR_KEY_55' THEN 'LINEAR KEY' WHEN 'LINEAR_HASH' THEN 'LINEAR HASH' WHEN 'RANGE_COLUMNS' THEN 'RANGE COLUMNS' WHEN 'LIST_COLUMNS' THEN 'LIST COLUMNS' ELSE NULL END AS SUBPARTITION_METHOD,
|
|
tbl.partition_expression_utf8 AS PARTITION_EXPRESSION,
|
|
tbl.subpartition_expression_utf8 AS SUBPARTITION_EXPRESSION,
|
|
part.description_utf8 AS PARTITION_DESCRIPTION,
|
|
INTERNAL_TABLE_ROWS(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS TABLE_ROWS,
|
|
INTERNAL_AVG_ROW_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS AVG_ROW_LENGTH,
|
|
INTERNAL_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS DATA_LENGTH,
|
|
INTERNAL_MAX_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS MAX_DATA_LENGTH,
|
|
INTERNAL_INDEX_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS INDEX_LENGTH,
|
|
INTERNAL_DATA_FREE(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS DATA_FREE,
|
|
tbl.created AS CREATE_TIME,
|
|
INTERNAL_UPDATE_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS UPDATE_TIME,
|
|
INTERNAL_CHECK_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS CHECK_TIME,
|
|
INTERNAL_CHECKSUM(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', IF(sub_part.name IS NULL, IF(part.name IS NULL, tbl.se_private_data, part_ts.se_private_data), sub_part_ts.se_private_data), 0, 0, IFNULL(sub_part.name, part.name)) AS CHECKSUM,
|
|
IF(sub_part.name IS NULL,IFNULL(part.comment,''), IFNULL(sub_part.comment,'')) AS PARTITION_COMMENT,
|
|
IF(part.name IS NULL, '', INTERNAL_GET_PARTITION_NODEGROUP( IF(sub_part.name IS NULL, part.options, sub_part.options))) AS NODEGROUP,
|
|
IFNULL(sub_part_ts.name, part_ts.name) AS TABLESPACE_NAME FROM
|
|
mysql.tables tbl
|
|
JOIN mysql.schemata sch ON sch.id=tbl.schema_id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
LEFT JOIN mysql.table_partitions part ON part.table_id=tbl.id
|
|
LEFT JOIN mysql.table_partitions sub_part ON sub_part.parent_partition_id=part.id
|
|
LEFT JOIN mysql.tablespaces part_ts ON part_ts.id=part.tablespace_id
|
|
LEFT JOIN mysql.tablespaces sub_part_ts ON sub_part.tablespace_id IS NOT NULL AND sub_part_ts.id=sub_part.tablespace_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
AND part.parent_partition_id IS NULL
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.REFERENTIAL_CONSTRAINTS AS SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
fk.name COLLATE utf8_tolower_ci AS CONSTRAINT_NAME,
|
|
fk.referenced_table_catalog AS UNIQUE_CONSTRAINT_CATALOG,
|
|
fk.referenced_table_schema AS UNIQUE_CONSTRAINT_SCHEMA,
|
|
fk.unique_constraint_name AS UNIQUE_CONSTRAINT_NAME,
|
|
fk.match_option AS MATCH_OPTION,
|
|
fk.update_rule AS UPDATE_RULE,
|
|
fk.delete_rule AS DELETE_RULE,
|
|
tbl.name AS TABLE_NAME,
|
|
fk.referenced_table_name AS REFERENCED_TABLE_NAME FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id = tbl.id
|
|
JOIN mysql.schemata sch ON fk.schema_id= sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.REFERENTIAL_CONSTRAINTS AS SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
fk.name COLLATE utf8_tolower_ci AS CONSTRAINT_NAME,
|
|
fk.referenced_table_catalog AS UNIQUE_CONSTRAINT_CATALOG,
|
|
fk.referenced_table_schema AS UNIQUE_CONSTRAINT_SCHEMA,
|
|
fk.unique_constraint_name AS UNIQUE_CONSTRAINT_NAME,
|
|
fk.match_option AS MATCH_OPTION,
|
|
fk.update_rule AS UPDATE_RULE,
|
|
fk.delete_rule AS DELETE_RULE,
|
|
tbl.name AS TABLE_NAME,
|
|
fk.referenced_table_name AS REFERENCED_TABLE_NAME FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id = tbl.id
|
|
JOIN mysql.schemata sch ON fk.schema_id= sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.RESOURCE_GROUPS AS SELECT
|
|
res.resource_group_name AS RESOURCE_GROUP_NAME,
|
|
res.resource_group_type AS RESOURCE_GROUP_TYPE,
|
|
res.resource_group_enabled AS RESOURCE_GROUP_ENABLED,
|
|
CONVERT_CPU_ID_MASK(res.CPU_ID_MASK) AS VCPU_IDS,
|
|
res.THREAD_PRIORITY AS THREAD_PRIORITY FROM
|
|
mysql.resource_groups res WHERE
|
|
CAN_ACCESS_RESOURCE_GROUP(res.resource_group_name)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.RESOURCE_GROUPS AS SELECT
|
|
res.resource_group_name AS RESOURCE_GROUP_NAME,
|
|
res.resource_group_type AS RESOURCE_GROUP_TYPE,
|
|
res.resource_group_enabled AS RESOURCE_GROUP_ENABLED,
|
|
CONVERT_CPU_ID_MASK(res.CPU_ID_MASK) AS VCPU_IDS,
|
|
res.THREAD_PRIORITY AS THREAD_PRIORITY FROM
|
|
mysql.resource_groups res WHERE
|
|
CAN_ACCESS_RESOURCE_GROUP(res.resource_group_name)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROUTINES AS SELECT
|
|
rtn.name AS SPECIFIC_NAME,
|
|
cat.name AS ROUTINE_CATALOG,
|
|
sch.name AS ROUTINE_SCHEMA,
|
|
rtn.name AS ROUTINE_NAME,
|
|
rtn.type AS ROUTINE_TYPE,
|
|
IF(rtn.type = 'PROCEDURE', '', SUBSTRING_INDEX(SUBSTRING_INDEX( rtn.result_data_type_utf8, '(', 1), ' ', 1)) AS DATA_TYPE,
|
|
INTERNAL_DD_CHAR_LENGTH(rtn.result_data_type, rtn.result_char_length, coll_result.name, 0) AS CHARACTER_MAXIMUM_LENGTH,
|
|
INTERNAL_DD_CHAR_LENGTH(rtn.result_data_type, rtn.result_char_length, coll_result.name, 1) AS CHARACTER_OCTET_LENGTH,
|
|
rtn.result_numeric_precision AS NUMERIC_PRECISION,
|
|
rtn.result_numeric_scale AS NUMERIC_SCALE,
|
|
rtn.result_datetime_precision AS DATETIME_PRECISION,
|
|
CASE rtn.result_data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) ELSE NULL END AS CHARACTER_SET_NAME,
|
|
CASE rtn.result_data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) ELSE NULL END AS COLLATION_NAME,
|
|
IF(rtn.type = 'PROCEDURE', NULL, rtn.result_data_type_utf8) AS DTD_IDENTIFIER,
|
|
'SQL' AS ROUTINE_BODY,
|
|
IF (CAN_ACCESS_ROUTINE(sch.name, rtn.name, rtn.type, rtn.definer, TRUE), rtn.definition_utf8, NULL) AS ROUTINE_DEFINITION,
|
|
NULL AS EXTERNAL_NAME,
|
|
rtn.external_language AS EXTERNAL_LANGUAGE,
|
|
'SQL' AS PARAMETER_STYLE,
|
|
IF(rtn.is_deterministic=0, 'NO', 'YES') AS IS_DETERMINISTIC,
|
|
rtn.sql_data_access AS SQL_DATA_ACCESS,
|
|
NULL AS SQL_PATH,
|
|
rtn.security_type AS SECURITY_TYPE,
|
|
rtn.created AS CREATED,
|
|
rtn.last_altered AS LAST_ALTERED,
|
|
rtn.sql_mode AS SQL_MODE,
|
|
rtn.comment AS ROUTINE_COMMENT,
|
|
rtn.definer AS DEFINER,
|
|
cs_client.name AS CHARACTER_SET_CLIENT,
|
|
coll_conn.name AS COLLATION_CONNECTION,
|
|
coll_db.name AS DATABASE_COLLATION FROM
|
|
mysql.routines rtn
|
|
JOIN mysql.schemata sch ON rtn.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll_client ON coll_client.id=rtn.client_collation_id
|
|
JOIN mysql.character_sets cs_client ON cs_client.id=coll_client.character_set_id
|
|
JOIN mysql.collations coll_conn ON coll_conn.id=rtn.connection_collation_id
|
|
JOIN mysql.collations coll_db ON coll_db.id=rtn.schema_collation_id
|
|
LEFT JOIN mysql.collations coll_result ON coll_result.id=rtn.result_collation_id
|
|
LEFT JOIN mysql.character_sets cs_result ON cs_result.id=coll_result.character_set_id WHERE
|
|
CAN_ACCESS_ROUTINE(sch.name, rtn.name, rtn.type, rtn.definer, FALSE)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROUTINES AS SELECT
|
|
rtn.name AS SPECIFIC_NAME,
|
|
cat.name AS ROUTINE_CATALOG,
|
|
sch.name AS ROUTINE_SCHEMA,
|
|
rtn.name AS ROUTINE_NAME,
|
|
rtn.type AS ROUTINE_TYPE,
|
|
IF(rtn.type = 'PROCEDURE', '', SUBSTRING_INDEX(SUBSTRING_INDEX( rtn.result_data_type_utf8, '(', 1), ' ', 1)) AS DATA_TYPE,
|
|
INTERNAL_DD_CHAR_LENGTH(rtn.result_data_type, rtn.result_char_length, coll_result.name, 0) AS CHARACTER_MAXIMUM_LENGTH,
|
|
INTERNAL_DD_CHAR_LENGTH(rtn.result_data_type, rtn.result_char_length, coll_result.name, 1) AS CHARACTER_OCTET_LENGTH,
|
|
rtn.result_numeric_precision AS NUMERIC_PRECISION,
|
|
rtn.result_numeric_scale AS NUMERIC_SCALE,
|
|
rtn.result_datetime_precision AS DATETIME_PRECISION,
|
|
CASE rtn.result_data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs_result.name='binary',NULL, cs_result.name)) ELSE NULL END AS CHARACTER_SET_NAME,
|
|
CASE rtn.result_data_type WHEN 'MYSQL_TYPE_STRING' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_VAR_STRING' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_VARCHAR' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_TINY_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_MEDIUM_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_LONG_BLOB' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_ENUM' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) WHEN 'MYSQL_TYPE_SET' THEN (IF (cs_result.name='binary',NULL, coll_result.name)) ELSE NULL END AS COLLATION_NAME,
|
|
IF(rtn.type = 'PROCEDURE', NULL, rtn.result_data_type_utf8) AS DTD_IDENTIFIER,
|
|
'SQL' AS ROUTINE_BODY,
|
|
IF (CAN_ACCESS_ROUTINE(sch.name, rtn.name, rtn.type, rtn.definer, TRUE), rtn.definition_utf8, NULL) AS ROUTINE_DEFINITION,
|
|
NULL AS EXTERNAL_NAME,
|
|
rtn.external_language AS EXTERNAL_LANGUAGE,
|
|
'SQL' AS PARAMETER_STYLE,
|
|
IF(rtn.is_deterministic=0, 'NO', 'YES') AS IS_DETERMINISTIC,
|
|
rtn.sql_data_access AS SQL_DATA_ACCESS,
|
|
NULL AS SQL_PATH,
|
|
rtn.security_type AS SECURITY_TYPE,
|
|
rtn.created AS CREATED,
|
|
rtn.last_altered AS LAST_ALTERED,
|
|
rtn.sql_mode AS SQL_MODE,
|
|
rtn.comment AS ROUTINE_COMMENT,
|
|
rtn.definer AS DEFINER,
|
|
cs_client.name AS CHARACTER_SET_CLIENT,
|
|
coll_conn.name AS COLLATION_CONNECTION,
|
|
coll_db.name AS DATABASE_COLLATION FROM
|
|
mysql.routines rtn
|
|
JOIN mysql.schemata sch ON rtn.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll_client ON coll_client.id=rtn.client_collation_id
|
|
JOIN mysql.character_sets cs_client ON cs_client.id=coll_client.character_set_id
|
|
JOIN mysql.collations coll_conn ON coll_conn.id=rtn.connection_collation_id
|
|
JOIN mysql.collations coll_db ON coll_db.id=rtn.schema_collation_id
|
|
LEFT JOIN mysql.collations coll_result ON coll_result.id=rtn.result_collation_id
|
|
LEFT JOIN mysql.character_sets cs_result ON cs_result.id=coll_result.character_set_id WHERE
|
|
CAN_ACCESS_ROUTINE(sch.name, rtn.name, rtn.type, rtn.definer, FALSE)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.SHOW_STATISTICS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE',0,1) AS NON_UNIQUE,
|
|
sch.name AS INDEX_SCHEMA,
|
|
idx.name COLLATE utf8_tolower_ci AS INDEX_NAME,
|
|
icu.ordinal_position AS SEQ_IN_INDEX,
|
|
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8_tolower_ci) AS COLUMN_NAME,
|
|
CASE WHEN icu.order = 'DESC' THEN 'D' WHEN icu.order = 'ASC' THEN 'A' ELSE NULL END AS COLLATION,
|
|
INTERNAL_INDEX_COLUMN_CARDINALITY(sch.name, tbl.name, idx.name,col.name, idx.ordinal_position,icu.ordinal_position,IF(ISNULL(tbl.partition_type), tbl.engine, ''),tbl.se_private_id,tbl.hidden != 'Visible' OR idx.hidden OR icu.hidden,COALESCE(stat.cardinality, CAST(-1 AS UNSIGNED)),COALESCE(CAST(stat.cached_time as UNSIGNED), 0)) AS CARDINALITY,
|
|
GET_DD_INDEX_SUB_PART_LENGTH(icu.length,col.type, col.char_length, col.collation_id,idx.type) AS SUB_PART,
|
|
NULL AS PACKED,
|
|
IF (col.is_nullable = 1, 'YES','') AS NULLABLE,
|
|
CASE WHEN idx.type = 'SPATIAL' THEN 'SPATIAL' WHEN idx.algorithm = 'SE_PRIVATE' THEN '' ELSE idx.algorithm END AS INDEX_TYPE,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE', '',IF(INTERNAL_KEYS_DISABLED(tbl.options),'disabled', '')) AS COMMENT,
|
|
idx.comment AS INDEX_COMMENT,
|
|
IF (idx.is_visible, 'YES', 'NO') AS IS_VISIBLE,
|
|
idx.ordinal_position AS INDEX_ORDINAL_POSITION,
|
|
icu.ordinal_position AS COLUMN_ORDINAL_POSITION,
|
|
IF (col.hidden = 'SQL', col.generation_expression_utf8, NULL) AS EXPRESSION FROM
|
|
mysql.index_column_usage icu
|
|
JOIN mysql.indexes idx ON idx.id=icu.index_id
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.columns col ON icu.column_id=col.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll ON tbl.collation_id=coll.id
|
|
LEFT JOIN mysql.index_stats stat ON tbl.name=stat.table_name AND sch.name=stat.schema_name AND idx.name=stat.index_name AND col.name=stat.column_name WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden OR icu.hidden)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.SHOW_STATISTICS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE',0,1) AS NON_UNIQUE,
|
|
sch.name AS INDEX_SCHEMA,
|
|
idx.name COLLATE utf8_tolower_ci AS INDEX_NAME,
|
|
icu.ordinal_position AS SEQ_IN_INDEX,
|
|
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8_tolower_ci) AS COLUMN_NAME,
|
|
CASE WHEN icu.order = 'DESC' THEN 'D' WHEN icu.order = 'ASC' THEN 'A' ELSE NULL END AS COLLATION,
|
|
INTERNAL_INDEX_COLUMN_CARDINALITY(sch.name, tbl.name, idx.name,col.name, idx.ordinal_position,icu.ordinal_position,IF(ISNULL(tbl.partition_type), tbl.engine, ''),tbl.se_private_id,tbl.hidden != 'Visible' OR idx.hidden OR icu.hidden,COALESCE(stat.cardinality, CAST(-1 AS UNSIGNED)),COALESCE(CAST(stat.cached_time as UNSIGNED), 0)) AS CARDINALITY,
|
|
GET_DD_INDEX_SUB_PART_LENGTH(icu.length,col.type, col.char_length, col.collation_id,idx.type) AS SUB_PART,
|
|
NULL AS PACKED,
|
|
IF (col.is_nullable = 1, 'YES','') AS NULLABLE,
|
|
CASE WHEN idx.type = 'SPATIAL' THEN 'SPATIAL' WHEN idx.algorithm = 'SE_PRIVATE' THEN '' ELSE idx.algorithm END AS INDEX_TYPE,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE', '',IF(INTERNAL_KEYS_DISABLED(tbl.options),'disabled', '')) AS COMMENT,
|
|
idx.comment AS INDEX_COMMENT,
|
|
IF (idx.is_visible, 'YES', 'NO') AS IS_VISIBLE,
|
|
idx.ordinal_position AS INDEX_ORDINAL_POSITION,
|
|
icu.ordinal_position AS COLUMN_ORDINAL_POSITION,
|
|
IF (col.hidden = 'SQL', col.generation_expression_utf8, NULL) AS EXPRESSION FROM
|
|
mysql.index_column_usage icu
|
|
JOIN mysql.indexes idx ON idx.id=icu.index_id
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.columns col ON icu.column_id=col.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll ON tbl.collation_id=coll.id
|
|
LEFT JOIN mysql.index_stats stat ON tbl.name=stat.table_name AND sch.name=stat.schema_name AND idx.name=stat.index_name AND col.name=stat.column_name WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden OR icu.hidden)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.SCHEMATA AS SELECT
|
|
cat.name AS CATALOG_NAME,
|
|
sch.name AS SCHEMA_NAME,
|
|
cs.name AS DEFAULT_CHARACTER_SET_NAME,
|
|
col.name AS DEFAULT_COLLATION_NAME,
|
|
NULL AS SQL_PATH,
|
|
sch.default_encryption AS DEFAULT_ENCRYPTION FROM
|
|
mysql.schemata sch
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations col ON sch.default_collation_id = col.id
|
|
JOIN mysql.character_sets cs ON col.character_set_id= cs.id WHERE
|
|
CAN_ACCESS_DATABASE(sch.name)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.SCHEMATA AS SELECT
|
|
cat.name AS CATALOG_NAME,
|
|
sch.name AS SCHEMA_NAME,
|
|
cs.name AS DEFAULT_CHARACTER_SET_NAME,
|
|
col.name AS DEFAULT_COLLATION_NAME,
|
|
NULL AS SQL_PATH,
|
|
sch.default_encryption AS DEFAULT_ENCRYPTION FROM
|
|
mysql.schemata sch
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations col ON sch.default_collation_id = col.id
|
|
JOIN mysql.character_sets cs ON col.character_set_id= cs.id WHERE
|
|
CAN_ACCESS_DATABASE(sch.name)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ST_SPATIAL_REFERENCE_SYSTEMS AS SELECT
|
|
name AS SRS_NAME,
|
|
id AS SRS_ID,
|
|
organization AS ORGANIZATION,
|
|
organization_coordsys_id AS ORGANIZATION_COORDSYS_ID,
|
|
definition AS DEFINITION,
|
|
description AS DESCRIPTION FROM
|
|
mysql.st_spatial_reference_systems
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ST_SPATIAL_REFERENCE_SYSTEMS AS SELECT
|
|
name AS SRS_NAME,
|
|
id AS SRS_ID,
|
|
organization AS ORGANIZATION,
|
|
organization_coordsys_id AS ORGANIZATION_COORDSYS_ID,
|
|
definition AS DEFINITION,
|
|
description AS DESCRIPTION FROM
|
|
mysql.st_spatial_reference_systems
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ST_UNITS_OF_MEASURE AS SELECT
|
|
UNIT_NAME AS UNIT_NAME,
|
|
UNIT_TYPE AS UNIT_TYPE,
|
|
CONVERSION_FACTOR AS CONVERSION_FACTOR,
|
|
DESCRIPTION AS DESCRIPTION FROM
|
|
JSON_TABLE(<elements masked>) AS ST_UNITS_OF_MEASURE
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ST_UNITS_OF_MEASURE AS SELECT
|
|
UNIT_NAME AS UNIT_NAME,
|
|
UNIT_TYPE AS UNIT_TYPE,
|
|
CONVERSION_FACTOR AS CONVERSION_FACTOR,
|
|
DESCRIPTION AS DESCRIPTION FROM
|
|
JSON_TABLE(<elements masked>) AS ST_UNITS_OF_MEASURE
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ST_GEOMETRY_COLUMNS AS SELECT
|
|
cols.TABLE_CATALOG AS TABLE_CATALOG,
|
|
cols.TABLE_SCHEMA AS TABLE_SCHEMA,
|
|
cols.TABLE_NAME AS TABLE_NAME,
|
|
cols.COLUMN_NAME AS COLUMN_NAME,
|
|
srs.SRS_NAME AS SRS_NAME,
|
|
cols.SRS_ID AS SRS_ID,
|
|
cols.DATA_TYPE AS GEOMETRY_TYPE_NAME FROM
|
|
INFORMATION_SCHEMA.COLUMNS cols
|
|
LEFT JOIN INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS srs ON (cols.SRS_ID = srs.SRS_ID) WHERE
|
|
DATA_TYPE IN ('geometry','point','linestring','polygon', 'multipoint', 'multilinestring', 'multipolygon','geomcollection')
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ST_GEOMETRY_COLUMNS AS SELECT
|
|
cols.TABLE_CATALOG AS TABLE_CATALOG,
|
|
cols.TABLE_SCHEMA AS TABLE_SCHEMA,
|
|
cols.TABLE_NAME AS TABLE_NAME,
|
|
cols.COLUMN_NAME AS COLUMN_NAME,
|
|
srs.SRS_NAME AS SRS_NAME,
|
|
cols.SRS_ID AS SRS_ID,
|
|
cols.DATA_TYPE AS GEOMETRY_TYPE_NAME FROM
|
|
INFORMATION_SCHEMA.COLUMNS cols
|
|
LEFT JOIN INFORMATION_SCHEMA.ST_SPATIAL_REFERENCE_SYSTEMS srs ON (cols.SRS_ID = srs.SRS_ID) WHERE
|
|
DATA_TYPE IN ('geometry','point','linestring','polygon', 'multipoint', 'multilinestring', 'multipolygon','geomcollection')
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.STATISTICS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE',0,1) AS NON_UNIQUE,
|
|
sch.name AS INDEX_SCHEMA,
|
|
idx.name COLLATE utf8_tolower_ci AS INDEX_NAME,
|
|
icu.ordinal_position AS SEQ_IN_INDEX,
|
|
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8_tolower_ci) AS COLUMN_NAME,
|
|
CASE WHEN icu.order = 'DESC' THEN 'D' WHEN icu.order = 'ASC' THEN 'A' ELSE NULL END AS COLLATION,
|
|
INTERNAL_INDEX_COLUMN_CARDINALITY(sch.name, tbl.name, idx.name,col.name, idx.ordinal_position,icu.ordinal_position,IF(ISNULL(tbl.partition_type), tbl.engine, ''),tbl.se_private_id,tbl.hidden != 'Visible' OR idx.hidden OR icu.hidden,COALESCE(stat.cardinality, CAST(-1 AS UNSIGNED)),COALESCE(CAST(stat.cached_time as UNSIGNED), 0)) AS CARDINALITY,
|
|
GET_DD_INDEX_SUB_PART_LENGTH(icu.length,col.type, col.char_length, col.collation_id,idx.type) AS SUB_PART,
|
|
NULL AS PACKED,
|
|
IF (col.is_nullable = 1, 'YES','') AS NULLABLE,
|
|
CASE WHEN idx.type = 'SPATIAL' THEN 'SPATIAL' WHEN idx.algorithm = 'SE_PRIVATE' THEN '' ELSE idx.algorithm END AS INDEX_TYPE,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE', '',IF(INTERNAL_KEYS_DISABLED(tbl.options),'disabled', '')) AS COMMENT,
|
|
idx.comment AS INDEX_COMMENT,
|
|
IF (idx.is_visible, 'YES', 'NO') AS IS_VISIBLE,
|
|
IF (col.hidden = 'SQL', col.generation_expression_utf8, NULL) AS EXPRESSION FROM
|
|
mysql.index_column_usage icu
|
|
JOIN mysql.indexes idx ON idx.id=icu.index_id
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.columns col ON icu.column_id=col.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll ON tbl.collation_id=coll.id
|
|
LEFT JOIN mysql.index_stats stat ON tbl.name=stat.table_name AND sch.name=stat.schema_name AND idx.name=stat.index_name AND col.name=stat.column_name WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden OR icu.hidden)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.STATISTICS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE',0,1) AS NON_UNIQUE,
|
|
sch.name AS INDEX_SCHEMA,
|
|
idx.name COLLATE utf8_tolower_ci AS INDEX_NAME,
|
|
icu.ordinal_position AS SEQ_IN_INDEX,
|
|
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8_tolower_ci) AS COLUMN_NAME,
|
|
CASE WHEN icu.order = 'DESC' THEN 'D' WHEN icu.order = 'ASC' THEN 'A' ELSE NULL END AS COLLATION,
|
|
INTERNAL_INDEX_COLUMN_CARDINALITY(sch.name, tbl.name, idx.name,col.name, idx.ordinal_position,icu.ordinal_position,IF(ISNULL(tbl.partition_type), tbl.engine, ''),tbl.se_private_id,tbl.hidden != 'Visible' OR idx.hidden OR icu.hidden,COALESCE(stat.cardinality, CAST(-1 AS UNSIGNED)),COALESCE(CAST(stat.cached_time as UNSIGNED), 0)) AS CARDINALITY,
|
|
GET_DD_INDEX_SUB_PART_LENGTH(icu.length,col.type, col.char_length, col.collation_id,idx.type) AS SUB_PART,
|
|
NULL AS PACKED,
|
|
IF (col.is_nullable = 1, 'YES','') AS NULLABLE,
|
|
CASE WHEN idx.type = 'SPATIAL' THEN 'SPATIAL' WHEN idx.algorithm = 'SE_PRIVATE' THEN '' ELSE idx.algorithm END AS INDEX_TYPE,
|
|
IF (idx.type = 'PRIMARY' OR idx.type = 'UNIQUE', '',IF(INTERNAL_KEYS_DISABLED(tbl.options),'disabled', '')) AS COMMENT,
|
|
idx.comment AS INDEX_COMMENT,
|
|
IF (idx.is_visible, 'YES', 'NO') AS IS_VISIBLE,
|
|
IF (col.hidden = 'SQL', col.generation_expression_utf8, NULL) AS EXPRESSION FROM
|
|
mysql.index_column_usage icu
|
|
JOIN mysql.indexes idx ON idx.id=icu.index_id
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.columns col ON icu.column_id=col.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll ON tbl.collation_id=coll.id
|
|
LEFT JOIN mysql.index_stats stat ON tbl.name=stat.table_name AND sch.name=stat.schema_name AND idx.name=stat.index_name AND col.name=stat.column_name WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden OR icu.hidden)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TABLE_CONSTRAINTS AS (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
idx.name AS CONSTRAINT_NAME,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
IF (idx.type='PRIMARY', 'PRIMARY KEY', idx.type) AS CONSTRAINT_TYPE,
|
|
'YES' AS ENFORCED FROM
|
|
mysql.indexes idx
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id AND idx.type IN ('PRIMARY', 'UNIQUE') WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden)
|
|
) UNION (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
fk.name COLLATE utf8_tolower_ci AS CONSTRAINT_NAME,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
'FOREIGN KEY' AS CONSTRAINT_TYPE,
|
|
'YES' AS ENFORCED FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
) UNION (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
cc.name AS CONSTRAINT_NAME,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
'CHECK' AS CONSTRAINT_TYPE,
|
|
cc.enforced AS ENFORCED FROM
|
|
mysql.check_constraints cc
|
|
JOIN mysql.tables tbl ON cc.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
)
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TABLE_CONSTRAINTS AS (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
idx.name AS CONSTRAINT_NAME,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
IF (idx.type='PRIMARY', 'PRIMARY KEY', idx.type) AS CONSTRAINT_TYPE,
|
|
'YES' AS ENFORCED FROM
|
|
mysql.indexes idx
|
|
JOIN mysql.tables tbl ON idx.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id AND idx.type IN ('PRIMARY', 'UNIQUE') WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden)
|
|
) UNION (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
fk.name COLLATE utf8_tolower_ci AS CONSTRAINT_NAME,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
'FOREIGN KEY' AS CONSTRAINT_TYPE,
|
|
'YES' AS ENFORCED FROM
|
|
mysql.foreign_keys fk
|
|
JOIN mysql.tables tbl ON fk.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
) UNION (SELECT
|
|
cat.name AS CONSTRAINT_CATALOG,
|
|
sch.name AS CONSTRAINT_SCHEMA,
|
|
cc.name AS CONSTRAINT_NAME,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
'CHECK' AS CONSTRAINT_TYPE,
|
|
cc.enforced AS ENFORCED FROM
|
|
mysql.check_constraints cc
|
|
JOIN mysql.tables tbl ON cc.table_id=tbl.id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
)");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TABLES AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
tbl.type AS TABLE_TYPE,
|
|
IF(tbl.type = 'BASE TABLE', tbl.engine, NULL) AS ENGINE,
|
|
IF(tbl.type = 'VIEW', NULL, 10 /* FRM_VER_TRUE_VARCHAR */) AS VERSION,
|
|
tbl.row_format AS ROW_FORMAT,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_TABLE_ROWS(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.table_rows, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS TABLE_ROWS,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_AVG_ROW_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.avg_row_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS AVG_ROW_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.data_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS DATA_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_MAX_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.max_data_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS MAX_DATA_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_INDEX_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.index_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS INDEX_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_DATA_FREE(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.data_free, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS DATA_FREE,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_AUTO_INCREMENT(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.auto_increment, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0), tbl.se_private_data)) AS AUTO_INCREMENT,
|
|
tbl.created AS CREATE_TIME,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_UPDATE_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(CAST(stat.update_time as UNSIGNED), 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS UPDATE_TIME,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_CHECK_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(CAST(stat.check_time as UNSIGNED), 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS CHECK_TIME,
|
|
col.name AS TABLE_COLLATION,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_CHECKSUM(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.checksum, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS CHECKSUM,
|
|
IF (tbl.type = 'VIEW', NULL, GET_DD_CREATE_OPTIONS(tbl.options, IF(IFNULL(tbl.partition_expression, 'NOT_PART_TBL')='NOT_PART_TBL', 0, 1), IF(sch.default_encryption='YES',1,0))) AS CREATE_OPTIONS,
|
|
INTERNAL_GET_COMMENT_OR_ERROR(sch.name, tbl.name, tbl.type, tbl.options, tbl.comment) AS TABLE_COMMENT FROM
|
|
mysql.tables tbl
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
LEFT JOIN mysql.collations col ON tbl.collation_id=col.id
|
|
LEFT JOIN mysql.tablespaces ts ON tbl.tablespace_id=ts.id
|
|
LEFT JOIN mysql.table_stats stat ON tbl.name=stat.table_name AND sch.name=stat.schema_name WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TABLES AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
tbl.name AS TABLE_NAME,
|
|
tbl.type AS TABLE_TYPE,
|
|
IF(tbl.type = 'BASE TABLE', tbl.engine, NULL) AS ENGINE,
|
|
IF(tbl.type = 'VIEW', NULL, 10 /* FRM_VER_TRUE_VARCHAR */) AS VERSION,
|
|
tbl.row_format AS ROW_FORMAT,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_TABLE_ROWS(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.table_rows, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS TABLE_ROWS,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_AVG_ROW_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.avg_row_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS AVG_ROW_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.data_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS DATA_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_MAX_DATA_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.max_data_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS MAX_DATA_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_INDEX_LENGTH(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.index_length, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS INDEX_LENGTH,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_DATA_FREE(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.data_free, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS DATA_FREE,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_AUTO_INCREMENT(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.auto_increment, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0), tbl.se_private_data)) AS AUTO_INCREMENT,
|
|
tbl.created AS CREATE_TIME,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_UPDATE_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(CAST(stat.update_time as UNSIGNED), 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS UPDATE_TIME,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_CHECK_TIME(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(CAST(stat.check_time as UNSIGNED), 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS CHECK_TIME,
|
|
col.name AS TABLE_COLLATION,
|
|
IF (tbl.type = 'VIEW', NULL,INTERNAL_CHECKSUM(sch.name, tbl.name, IF(ISNULL(tbl.partition_type), tbl.engine, ''), tbl.se_private_id, tbl.hidden != 'Visible', ts.se_private_data, COALESCE(stat.checksum, 0), COALESCE(CAST(stat.cached_time as UNSIGNED), 0))) AS CHECKSUM,
|
|
IF (tbl.type = 'VIEW', NULL, GET_DD_CREATE_OPTIONS(tbl.options, IF(IFNULL(tbl.partition_expression, 'NOT_PART_TBL')='NOT_PART_TBL', 0, 1), IF(sch.default_encryption='YES',1,0))) AS CREATE_OPTIONS,
|
|
INTERNAL_GET_COMMENT_OR_ERROR(sch.name, tbl.name, tbl.type, tbl.options, tbl.comment) AS TABLE_COMMENT FROM
|
|
mysql.tables tbl
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
LEFT JOIN mysql.collations col ON tbl.collation_id=col.id
|
|
LEFT JOIN mysql.tablespaces ts ON tbl.tablespace_id=ts.id
|
|
LEFT JOIN mysql.table_stats stat ON tbl.name=stat.table_name AND sch.name=stat.schema_name WHERE
|
|
CAN_ACCESS_TABLE(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TRIGGERS AS SELECT
|
|
cat.name AS TRIGGER_CATALOG,
|
|
sch.name AS TRIGGER_SCHEMA,
|
|
trg.name AS TRIGGER_NAME,
|
|
trg.event_type AS EVENT_MANIPULATION,
|
|
cat.name AS EVENT_OBJECT_CATALOG,
|
|
sch.name AS EVENT_OBJECT_SCHEMA,
|
|
tbl.name AS EVENT_OBJECT_TABLE,
|
|
trg.action_order AS ACTION_ORDER,
|
|
NULL AS ACTION_CONDITION,
|
|
trg.action_statement_utf8 AS ACTION_STATEMENT,
|
|
'ROW' AS ACTION_ORIENTATION,
|
|
trg.action_timing AS ACTION_TIMING,
|
|
NULL AS ACTION_REFERENCE_OLD_TABLE,
|
|
NULL AS ACTION_REFERENCE_NEW_TABLE,
|
|
'OLD' AS ACTION_REFERENCE_OLD_ROW,
|
|
'NEW' AS ACTION_REFERENCE_NEW_ROW,
|
|
trg.created AS CREATED,
|
|
trg.sql_mode AS SQL_MODE,
|
|
trg.definer AS DEFINER,
|
|
cs_client.name AS CHARACTER_SET_CLIENT,
|
|
coll_conn.name AS COLLATION_CONNECTION,
|
|
coll_db.name AS DATABASE_COLLATION FROM
|
|
mysql.triggers trg JOIN mysql.tables tbl ON tbl.id=trg.table_id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll_client ON coll_client.id=trg.client_collation_id
|
|
JOIN mysql.character_sets cs_client ON cs_client.id=coll_client.character_set_id
|
|
JOIN mysql.collations coll_conn ON coll_conn.id=trg.connection_collation_id
|
|
JOIN mysql.collations coll_db ON coll_db.id=trg.schema_collation_id WHERE
|
|
tbl.type != 'VIEW'
|
|
AND CAN_ACCESS_TRIGGER(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TRIGGERS AS SELECT
|
|
cat.name AS TRIGGER_CATALOG,
|
|
sch.name AS TRIGGER_SCHEMA,
|
|
trg.name AS TRIGGER_NAME,
|
|
trg.event_type AS EVENT_MANIPULATION,
|
|
cat.name AS EVENT_OBJECT_CATALOG,
|
|
sch.name AS EVENT_OBJECT_SCHEMA,
|
|
tbl.name AS EVENT_OBJECT_TABLE,
|
|
trg.action_order AS ACTION_ORDER,
|
|
NULL AS ACTION_CONDITION,
|
|
trg.action_statement_utf8 AS ACTION_STATEMENT,
|
|
'ROW' AS ACTION_ORIENTATION,
|
|
trg.action_timing AS ACTION_TIMING,
|
|
NULL AS ACTION_REFERENCE_OLD_TABLE,
|
|
NULL AS ACTION_REFERENCE_NEW_TABLE,
|
|
'OLD' AS ACTION_REFERENCE_OLD_ROW,
|
|
'NEW' AS ACTION_REFERENCE_NEW_ROW,
|
|
trg.created AS CREATED,
|
|
trg.sql_mode AS SQL_MODE,
|
|
trg.definer AS DEFINER,
|
|
cs_client.name AS CHARACTER_SET_CLIENT,
|
|
coll_conn.name AS COLLATION_CONNECTION,
|
|
coll_db.name AS DATABASE_COLLATION FROM
|
|
mysql.triggers trg JOIN mysql.tables tbl ON tbl.id=trg.table_id
|
|
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations coll_client ON coll_client.id=trg.client_collation_id
|
|
JOIN mysql.character_sets cs_client ON cs_client.id=coll_client.character_set_id
|
|
JOIN mysql.collations coll_conn ON coll_conn.id=trg.connection_collation_id
|
|
JOIN mysql.collations coll_db ON coll_db.id=trg.schema_collation_id WHERE
|
|
tbl.type != 'VIEW'
|
|
AND CAN_ACCESS_TRIGGER(sch.name, tbl.name)
|
|
AND IS_VISIBLE_DD_OBJECT(tbl.hidden)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.VIEW_ROUTINE_USAGE AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
vw.name AS TABLE_NAME,
|
|
vru.routine_catalog AS SPECIFIC_CATALOG,
|
|
vru.routine_schema AS SPECIFIC_SCHEMA,
|
|
vru.routine_name AS SPECIFIC_NAME FROM
|
|
mysql.tables vw
|
|
JOIN mysql.schemata sch ON vw.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.view_routine_usage vru ON vru.view_id=vw.id
|
|
JOIN mysql.routines rtn ON vru.routine_catalog= cat.name AND vru.routine_schema= sch.name AND vru.routine_name= rtn.name WHERE
|
|
vw.type = 'VIEW'
|
|
AND CAN_ACCESS_ROUTINE(vru.routine_schema, vru.routine_name, rtn.type, rtn.definer, FALSE)
|
|
AND CAN_ACCESS_VIEW(sch.name, vw.name, vw.view_definer, vw.options)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.VIEW_ROUTINE_USAGE AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
vw.name AS TABLE_NAME,
|
|
vru.routine_catalog AS SPECIFIC_CATALOG,
|
|
vru.routine_schema AS SPECIFIC_SCHEMA,
|
|
vru.routine_name AS SPECIFIC_NAME FROM
|
|
mysql.tables vw
|
|
JOIN mysql.schemata sch ON vw.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.view_routine_usage vru ON vru.view_id=vw.id
|
|
JOIN mysql.routines rtn ON vru.routine_catalog= cat.name AND vru.routine_schema= sch.name AND vru.routine_name= rtn.name WHERE
|
|
vw.type = 'VIEW'
|
|
AND CAN_ACCESS_ROUTINE(vru.routine_schema, vru.routine_name, rtn.type, rtn.definer, FALSE)
|
|
AND CAN_ACCESS_VIEW(sch.name, vw.name, vw.view_definer, vw.options)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.VIEW_TABLE_USAGE AS SELECT
|
|
cat.name AS VIEW_CATALOG,
|
|
sch.name AS VIEW_SCHEMA,
|
|
vw.name AS VIEW_NAME,
|
|
vtu.table_catalog AS TABLE_CATALOG,
|
|
vtu.table_schema AS TABLE_SCHEMA,
|
|
vtu.table_name AS TABLE_NAME FROM
|
|
mysql.tables vw
|
|
JOIN mysql.schemata sch ON vw.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.view_table_usage vtu ON vtu.view_id=vw.id WHERE
|
|
CAN_ACCESS_TABLE(vtu.table_schema, vtu.table_name)
|
|
AND vw.type = 'VIEW'
|
|
AND CAN_ACCESS_VIEW(sch.name, vw.name, vw.view_definer, vw.options)
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.VIEW_TABLE_USAGE AS SELECT
|
|
cat.name AS VIEW_CATALOG,
|
|
sch.name AS VIEW_SCHEMA,
|
|
vw.name AS VIEW_NAME,
|
|
vtu.table_catalog AS TABLE_CATALOG,
|
|
vtu.table_schema AS TABLE_SCHEMA,
|
|
vtu.table_name AS TABLE_NAME FROM
|
|
mysql.tables vw
|
|
JOIN mysql.schemata sch ON vw.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.view_table_usage vtu ON vtu.view_id=vw.id WHERE
|
|
CAN_ACCESS_TABLE(vtu.table_schema, vtu.table_name)
|
|
AND vw.type = 'VIEW'
|
|
AND CAN_ACCESS_VIEW(sch.name, vw.name, vw.view_definer, vw.options)
|
|
");
|
|
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.VIEWS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
vw.name AS TABLE_NAME,
|
|
IF(CAN_ACCESS_VIEW(sch.name, vw.name, vw.view_definer, vw.options)=TRUE, vw.view_definition_utf8, '') AS VIEW_DEFINITION,
|
|
vw.view_check_option AS CHECK_OPTION,
|
|
vw.view_is_updatable AS IS_UPDATABLE,
|
|
vw.view_definer AS DEFINER,
|
|
IF (vw.view_security_type='DEFAULT', 'DEFINER', vw.view_security_type) AS SECURITY_TYPE,
|
|
cs.name AS CHARACTER_SET_CLIENT,
|
|
conn_coll.name AS COLLATION_CONNECTION FROM
|
|
mysql.tables vw
|
|
JOIN mysql.schemata sch ON vw.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations conn_coll ON conn_coll.id= vw.view_connection_collation_id
|
|
JOIN mysql.collations client_coll ON client_coll.id= vw.view_client_collation_id
|
|
JOIN mysql.character_sets cs ON cs.id= client_coll.character_set_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, vw.name)
|
|
AND vw.type = 'VIEW'
|
|
|
|
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.VIEWS AS SELECT
|
|
cat.name AS TABLE_CATALOG,
|
|
sch.name AS TABLE_SCHEMA,
|
|
vw.name AS TABLE_NAME,
|
|
IF(CAN_ACCESS_VIEW(sch.name, vw.name, vw.view_definer, vw.options)=TRUE, vw.view_definition_utf8, '') AS VIEW_DEFINITION,
|
|
vw.view_check_option AS CHECK_OPTION,
|
|
vw.view_is_updatable AS IS_UPDATABLE,
|
|
vw.view_definer AS DEFINER,
|
|
IF (vw.view_security_type='DEFAULT', 'DEFINER', vw.view_security_type) AS SECURITY_TYPE,
|
|
cs.name AS CHARACTER_SET_CLIENT,
|
|
conn_coll.name AS COLLATION_CONNECTION FROM
|
|
mysql.tables vw
|
|
JOIN mysql.schemata sch ON vw.schema_id=sch.id
|
|
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
|
|
JOIN mysql.collations conn_coll ON conn_coll.id= vw.view_connection_collation_id
|
|
JOIN mysql.collations client_coll ON client_coll.id= vw.view_client_collation_id
|
|
JOIN mysql.character_sets cs ON cs.id= client_coll.character_set_id WHERE
|
|
CAN_ACCESS_TABLE(sch.name, vw.name)
|
|
AND vw.type = 'VIEW'
|
|
");
|
|
SET debug = '-d,skip_dd_table_access_check';
|
|
SET debug = '-d,fetch_system_view_definition';
|
|
########################################################################
|
|
# PART 3. Verify the checksum of the generated meta data associated with
|
|
# the current I_S version number.
|
|
########################################################################
|
|
SET debug = '+d,skip_dd_table_access_check';
|
|
include/assert.inc [Found expected number of system views in DD.]
|
|
include/assert.inc [Found expected number of system views in I_S_check_table.]
|
|
include/assert.inc [The group concat max length is sufficient.]
|
|
CHECK_STATUS
|
|
The schema checksum corresponds to I_S version 80018.
|
|
include/assert.inc [The schema checksum corresponds to a known I_S version.]
|