1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656
|
########################################################################
#
# 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.
########################################################################
SET debug = '+d,skip_dd_table_access_check';
########################################################################
# 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.
########################################################################
########################################################################
# The number of I_S system views must be as expected.
########################################################################
include/assert.inc [There are 44 system views.]
include/assert.inc [There are 44 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.]
########################################################################
# PART 2. Verify the I_S_VERSION and the CREATE VIEW statements of the
# I_S system views.
########################################################################
# Print the actual I_S version stored on disk.
Current I_S_VERSION=80030
CREATE TABLE I_S_check_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
t TEXT NOT NULL,
row_hash VARCHAR(64) DEFAULT NULL);
SET debug = '+d,fetch_system_view_definition';
########################################################################
# Verify all the CREATE VIEW statements of the I_S system view.
# 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 utf8mb3_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, col.hidden, tbl.type) 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 NOT IN ('Visible', 'User'), col.options)
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 utf8mb3_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, col.hidden, tbl.type) 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 NOT IN ('Visible', 'User'), col.options)
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLUMNS_EXTENSIONS AS SELECT
cat.name AS TABLE_CATALOG,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
col.name COLLATE utf8mb3_tolower_ci AS COLUMN_NAME,
col.engine_attribute AS ENGINE_ATTRIBUTE,
col.secondary_engine_attribute AS SECONDARY_ENGINE_ATTRIBUTE 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 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 NOT IN ('Visible', 'User'), col.options)
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.COLUMNS_EXTENSIONS AS SELECT
cat.name AS TABLE_CATALOG,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
col.name COLLATE utf8mb3_tolower_ci AS COLUMN_NAME,
col.engine_attribute AS ENGINE_ATTRIBUTE,
col.secondary_engine_attribute AS SECONDARY_ENGINE_ATTRIBUTE 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 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 NOT IN ('Visible', 'User'), col.options)
");
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,
CONVERT_TZ(evt.last_executed,'+00:00', evt.time_zone) 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,
CONVERT_TZ(evt.last_executed,'+00:00', evt.time_zone) 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,
constraints.CONSTRAINT_NAME AS CONSTRAINT_NAME,
cat.name AS TABLE_CATALOG,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
col.name COLLATE utf8mb3_tolower_ci AS COLUMN_NAME,
constraints.ordinal_position AS ORDINAL_POSITION,
constraints.POSITION_IN_UNIQUE_CONSTRAINT AS POSITION_IN_UNIQUE_CONSTRAINT,
constraints.REFERENCED_TABLE_SCHEMA AS REFERENCED_TABLE_SCHEMA,
constraints.REFERENCED_TABLE_NAME AS REFERENCED_TABLE_NAME,
constraints.REFERENCED_COLUMN_NAME AS REFERENCED_COLUMN_NAME FROM
mysql.tables tbl
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
, LATERAL (SELECT idx.name AS CONSTRAINT_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, icu.column_id, idx.hidden OR icu.hidden AS HIDDEN FROM mysql.indexes idx JOIN mysql.index_column_usage icu ON icu.index_id = idx.id WHERE idx.table_id = tbl.id AND idx.type IN ('PRIMARY', 'UNIQUE') UNION ALL SELECT fk.name COLLATE utf8mb3_tolower_ci AS CONSTRAINT_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, fkcu.column_id, FALSE AS HIDDEN FROM mysql.foreign_keys fk JOIN mysql.foreign_key_column_usage fkcu ON fkcu.foreign_key_id = fk.id WHERE fk.table_id = tbl.id) constraints
JOIN mysql.columns col ON constraints.COLUMN_ID=col.id WHERE
CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name)
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden NOT IN ('Visible', 'User') OR constraints.HIDDEN, col.options)
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,
constraints.CONSTRAINT_NAME AS CONSTRAINT_NAME,
cat.name AS TABLE_CATALOG,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
col.name COLLATE utf8mb3_tolower_ci AS COLUMN_NAME,
constraints.ordinal_position AS ORDINAL_POSITION,
constraints.POSITION_IN_UNIQUE_CONSTRAINT AS POSITION_IN_UNIQUE_CONSTRAINT,
constraints.REFERENCED_TABLE_SCHEMA AS REFERENCED_TABLE_SCHEMA,
constraints.REFERENCED_TABLE_NAME AS REFERENCED_TABLE_NAME,
constraints.REFERENCED_COLUMN_NAME AS REFERENCED_COLUMN_NAME FROM
mysql.tables tbl
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
JOIN mysql.catalogs cat ON cat.id=sch.catalog_id
, LATERAL (SELECT idx.name AS CONSTRAINT_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, icu.column_id, idx.hidden OR icu.hidden AS HIDDEN FROM mysql.indexes idx JOIN mysql.index_column_usage icu ON icu.index_id = idx.id WHERE idx.table_id = tbl.id AND idx.type IN ('PRIMARY', 'UNIQUE') UNION ALL SELECT fk.name COLLATE utf8mb3_tolower_ci AS CONSTRAINT_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, fkcu.column_id, FALSE AS HIDDEN FROM mysql.foreign_keys fk JOIN mysql.foreign_key_column_usage fkcu ON fkcu.foreign_key_id = fk.id WHERE fk.table_id = tbl.id) constraints
JOIN mysql.columns col ON constraints.COLUMN_ID=col.id WHERE
CAN_ACCESS_COLUMN(sch.name, tbl.name, col.name)
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, col.hidden NOT IN ('Visible', 'User') OR constraints.HIDDEN, col.options)
");
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 utf8mb3_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 utf8mb3_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 utf8mb3_tolower_ci AS INDEX_NAME,
icu.ordinal_position AS SEQ_IN_INDEX,
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8mb3_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, idx.options)
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 utf8mb3_tolower_ci AS INDEX_NAME,
icu.ordinal_position AS SEQ_IN_INDEX,
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8mb3_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, idx.options)
");
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.SCHEMATA_EXTENSIONS AS SELECT
cat.name AS CATALOG_NAME,
sch.name AS SCHEMA_NAME,
GET_DD_SCHEMA_OPTIONS(sch.options) AS OPTIONS FROM
mysql.schemata sch
JOIN mysql.catalogs cat ON cat.id=sch.catalog_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_EXTENSIONS AS SELECT
cat.name AS CATALOG_NAME,
sch.name AS SCHEMA_NAME,
GET_DD_SCHEMA_OPTIONS(sch.options) AS OPTIONS FROM
mysql.schemata sch
JOIN mysql.catalogs cat ON cat.id=sch.catalog_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 utf8mb3_tolower_ci AS INDEX_NAME,
icu.ordinal_position AS SEQ_IN_INDEX,
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8mb3_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, idx.options)
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 utf8mb3_tolower_ci AS INDEX_NAME,
icu.ordinal_position AS SEQ_IN_INDEX,
IF (col.hidden = 'SQL', NULL, col.name COLLATE utf8mb3_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, idx.options)
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TABLE_CONSTRAINTS AS SELECT
cat.name AS CONSTRAINT_CATALOG,
sch.name AS CONSTRAINT_SCHEMA,
constraints.CONSTRAINT_NAME AS CONSTRAINT_NAME,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
constraints.CONSTRAINT_TYPE AS CONSTRAINT_TYPE,
constraints.ENFORCED AS ENFORCED FROM
mysql.tables tbl
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
JOIN mysql.catalogs cat ON cat.id = sch.catalog_id
, LATERAL ( SELECT idx.name AS CONSTRAINT_NAME, IF (idx.type='PRIMARY', 'PRIMARY KEY', idx.type) as CONSTRAINT_TYPE, 'YES' as ENFORCED FROM mysql.indexes idx WHERE idx.table_id=tbl.id AND idx.type IN ('PRIMARY', 'UNIQUE') AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden, idx.options) UNION ALL SELECT fk.name COLLATE utf8mb3_tolower_ci AS CONSTRAINT_NAME, 'FOREIGN KEY' as CONSTRAINT_TYPE, 'YES' as ENFORCED FROM mysql.foreign_keys fk WHERE fk.table_id=tbl.id UNION ALL SELECT cc.name AS CONSTRAINT_NAME, 'CHECK' as CONSTRAINT_TYPE, cc.enforced as ENFORCED FROM mysql.check_constraints cc WHERE cc.table_id=tbl.id) constraints 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,
constraints.CONSTRAINT_NAME AS CONSTRAINT_NAME,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
constraints.CONSTRAINT_TYPE AS CONSTRAINT_TYPE,
constraints.ENFORCED AS ENFORCED FROM
mysql.tables tbl
JOIN mysql.schemata sch ON tbl.schema_id=sch.id
JOIN mysql.catalogs cat ON cat.id = sch.catalog_id
, LATERAL ( SELECT idx.name AS CONSTRAINT_NAME, IF (idx.type='PRIMARY', 'PRIMARY KEY', idx.type) as CONSTRAINT_TYPE, 'YES' as ENFORCED FROM mysql.indexes idx WHERE idx.table_id=tbl.id AND idx.type IN ('PRIMARY', 'UNIQUE') AND IS_VISIBLE_DD_OBJECT(tbl.hidden, idx.hidden, idx.options) UNION ALL SELECT fk.name COLLATE utf8mb3_tolower_ci AS CONSTRAINT_NAME, 'FOREIGN KEY' as CONSTRAINT_TYPE, 'YES' as ENFORCED FROM mysql.foreign_keys fk WHERE fk.table_id=tbl.id UNION ALL SELECT cc.name AS CONSTRAINT_NAME, 'CHECK' as CONSTRAINT_TYPE, cc.enforced as ENFORCED FROM mysql.check_constraints cc WHERE cc.table_id=tbl.id) constraints 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.TABLE_CONSTRAINTS_EXTENSIONS AS SELECT
cat.name AS CONSTRAINT_CATALOG,
sch.name AS CONSTRAINT_SCHEMA,
idx.name AS CONSTRAINT_NAME,
tbl.name AS TABLE_NAME,
idx.engine_attribute AS ENGINE_ATTRIBUTE,
idx.secondary_engine_attribute AS SECONDARY_ENGINE_ATTRIBUTE 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 WHERE
CAN_ACCESS_TABLE(sch.name, tbl.name)
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, FALSE, idx.options)
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TABLE_CONSTRAINTS_EXTENSIONS AS SELECT
cat.name AS CONSTRAINT_CATALOG,
sch.name AS CONSTRAINT_SCHEMA,
idx.name AS CONSTRAINT_NAME,
tbl.name AS TABLE_NAME,
idx.engine_attribute AS ENGINE_ATTRIBUTE,
idx.secondary_engine_attribute AS SECONDARY_ENGINE_ATTRIBUTE 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 WHERE
CAN_ACCESS_TABLE(sch.name, tbl.name)
AND IS_VISIBLE_DD_OBJECT(tbl.hidden, FALSE, idx.options)
");
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, IS_VISIBLE_DD_OBJECT(tbl.hidden, FALSE, tbl.options) IS FALSE, 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, IS_VISIBLE_DD_OBJECT(tbl.hidden, FALSE, tbl.options) IS FALSE, 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.TABLES_EXTENSIONS AS SELECT
cat.name AS TABLE_CATALOG,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
tbl.engine_attribute AS ENGINE_ATTRIBUTE,
tbl.secondary_engine_attribute AS SECONDARY_ENGINE_ATTRIBUTE FROM
mysql.tables tbl
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.TABLES_EXTENSIONS AS SELECT
cat.name AS TABLE_CATALOG,
sch.name AS TABLE_SCHEMA,
tbl.name AS TABLE_NAME,
tbl.engine_attribute AS ENGINE_ATTRIBUTE,
tbl.secondary_engine_attribute AS SECONDARY_ENGINE_ATTRIBUTE FROM
mysql.tables tbl
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.TABLESPACES_EXTENSIONS AS SELECT
tsps.name AS TABLESPACE_NAME,
tsps.engine_attribute AS ENGINE_ATTRIBUTE FROM
mysql.tablespaces tsps
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.TABLESPACES_EXTENSIONS AS SELECT
tsps.name AS TABLESPACE_NAME,
tsps.engine_attribute AS ENGINE_ATTRIBUTE FROM
mysql.tablespaces tsps
");
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'
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.APPLICABLE_ROLES AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
c_parent_user AS USER,
c_parent_host AS HOST,
c_to_user AS GRANTEE,
c_to_host AS GRANTEE_HOST,
c_from_user AS ROLE_NAME,
c_from_host AS ROLE_HOST,
IF(c_with_admin = 'N', 'NO', 'YES') AS IS_GRANTABLE,
(SELECT IF(COUNT(*), 'YES', 'NO') FROM mysql.default_roles WHERE DEFAULT_ROLE_USER = c_from_user AND CONVERT(DEFAULT_ROLE_HOST using utf8mb4)= c_from_host AND USER = c_parent_user AND CONVERT(HOST using utf8mb4) = c_parent_host) AS IS_DEFAULT,
IF(INTERNAL_IS_MANDATORY_ROLE(c_from_user, c_from_host), 'YES', 'NO') AS IS_MANDATORY FROM
role_graph WHERE
c_to_user != ''
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.APPLICABLE_ROLES AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
c_parent_user AS USER,
c_parent_host AS HOST,
c_to_user AS GRANTEE,
c_to_host AS GRANTEE_HOST,
c_from_user AS ROLE_NAME,
c_from_host AS ROLE_HOST,
IF(c_with_admin = 'N', 'NO', 'YES') AS IS_GRANTABLE,
(SELECT IF(COUNT(*), 'YES', 'NO') FROM mysql.default_roles WHERE DEFAULT_ROLE_USER = c_from_user AND CONVERT(DEFAULT_ROLE_HOST using utf8mb4)= c_from_host AND USER = c_parent_user AND CONVERT(HOST using utf8mb4) = c_parent_host) AS IS_DEFAULT,
IF(INTERNAL_IS_MANDATORY_ROLE(c_from_user, c_from_host), 'YES', 'NO') AS IS_MANDATORY FROM
role_graph WHERE
c_to_user != ''
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ADMINISTRABLE_ROLE_AUTHORIZATIONS AS SELECT
* FROM
INFORMATION_SCHEMA.APPLICABLE_ROLES WHERE
IS_GRANTABLE='YES'
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ADMINISTRABLE_ROLE_AUTHORIZATIONS AS SELECT
* FROM
INFORMATION_SCHEMA.APPLICABLE_ROLES WHERE
IS_GRANTABLE='YES'
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ENABLED_ROLES AS SELECT
ROLE_NAME AS ROLE_NAME,
ROLE_HOST AS ROLE_HOST,
(SELECT IF(COUNT(*), 'YES', 'NO') FROM mysql.default_roles WHERE DEFAULT_ROLE_USER = ROLE_NAME AND CONVERT(DEFAULT_ROLE_HOST using utf8mb4) = ROLE_HOST AND USER = INTERNAL_GET_USERNAME() AND CONVERT(HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) AS IS_DEFAULT,
IF(INTERNAL_IS_MANDATORY_ROLE(ROLE_NAME, ROLE_HOST), 'YES', 'NO') AS IS_MANDATORY FROM
JSON_TABLE(INTERNAL_GET_ENABLED_ROLE_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) current_user_enabled_roles
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ENABLED_ROLES AS SELECT
ROLE_NAME AS ROLE_NAME,
ROLE_HOST AS ROLE_HOST,
(SELECT IF(COUNT(*), 'YES', 'NO') FROM mysql.default_roles WHERE DEFAULT_ROLE_USER = ROLE_NAME AND CONVERT(DEFAULT_ROLE_HOST using utf8mb4) = ROLE_HOST AND USER = INTERNAL_GET_USERNAME() AND CONVERT(HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) AS IS_DEFAULT,
IF(INTERNAL_IS_MANDATORY_ROLE(ROLE_NAME, ROLE_HOST), 'YES', 'NO') AS IS_MANDATORY FROM
JSON_TABLE(INTERNAL_GET_ENABLED_ROLE_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) current_user_enabled_roles
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROLE_TABLE_GRANTS AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
INTERNAL_GET_USERNAME(Grantor) AS GRANTOR,
INTERNAL_GET_HOSTNAME(Grantor) AS GRANTOR_HOST,
tp.User AS GRANTEE,
tp.Host AS GRANTEE_HOST,
'def' AS TABLE_CATALOG,
Db AS TABLE_SCHEMA,
Table_name AS TABLE_NAME,
Table_priv AS PRIVILEGE_TYPE,
IF(FIND_IN_SET('Grant',Table_priv)>0, 'YES', 'NO') AS IS_GRANTABLE FROM
mysql.tables_priv tp
JOIN role_graph rg ON tp.User = rg.c_from_user AND CONVERT(tp.Host using utf8mb4) = rg.c_from_host WHERE
Table_priv > 0
AND c_to_user != ''
AND c_enabled = TRUE
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROLE_TABLE_GRANTS AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
INTERNAL_GET_USERNAME(Grantor) AS GRANTOR,
INTERNAL_GET_HOSTNAME(Grantor) AS GRANTOR_HOST,
tp.User AS GRANTEE,
tp.Host AS GRANTEE_HOST,
'def' AS TABLE_CATALOG,
Db AS TABLE_SCHEMA,
Table_name AS TABLE_NAME,
Table_priv AS PRIVILEGE_TYPE,
IF(FIND_IN_SET('Grant',Table_priv)>0, 'YES', 'NO') AS IS_GRANTABLE FROM
mysql.tables_priv tp
JOIN role_graph rg ON tp.User = rg.c_from_user AND CONVERT(tp.Host using utf8mb4) = rg.c_from_host WHERE
Table_priv > 0
AND c_to_user != ''
AND c_enabled = TRUE
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROLE_COLUMN_GRANTS AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
INTERNAL_GET_USERNAME(Grantor) AS GRANTOR,
INTERNAL_GET_HOSTNAME(Grantor) AS GRANTOR_HOST,
cp.User AS GRANTEE,
cp.Host AS GRANTEE_HOST,
'def' AS TABLE_CATALOG,
cp.Db AS TABLE_SCHEMA,
cp.Table_name AS TABLE_NAME,
cp.Column_name AS COLUMN_NAME,
cp.Column_priv AS PRIVILEGE_TYPE,
IF(FIND_IN_SET('Grant',tp.Table_priv)>0, 'YES', 'NO') AS IS_GRANTABLE FROM
mysql.tables_priv tp
JOIN role_graph rg ON tp.User = rg.c_from_user AND CONVERT(tp.Host using utf8mb4) = rg.c_from_host
JOIN mysql.columns_priv cp ON CONVERT(tp.Host using utf8mb4) = cp.Host AND cp.Db=tp.Db AND cp.User=tp.User AND cp.Table_name=tp.Table_name WHERE
cp.Column_priv > 0
AND c_to_user != ''
AND c_enabled = TRUE
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROLE_COLUMN_GRANTS AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
INTERNAL_GET_USERNAME(Grantor) AS GRANTOR,
INTERNAL_GET_HOSTNAME(Grantor) AS GRANTOR_HOST,
cp.User AS GRANTEE,
cp.Host AS GRANTEE_HOST,
'def' AS TABLE_CATALOG,
cp.Db AS TABLE_SCHEMA,
cp.Table_name AS TABLE_NAME,
cp.Column_name AS COLUMN_NAME,
cp.Column_priv AS PRIVILEGE_TYPE,
IF(FIND_IN_SET('Grant',tp.Table_priv)>0, 'YES', 'NO') AS IS_GRANTABLE FROM
mysql.tables_priv tp
JOIN role_graph rg ON tp.User = rg.c_from_user AND CONVERT(tp.Host using utf8mb4) = rg.c_from_host
JOIN mysql.columns_priv cp ON CONVERT(tp.Host using utf8mb4) = cp.Host AND cp.Db=tp.Db AND cp.User=tp.User AND cp.Table_name=tp.Table_name WHERE
cp.Column_priv > 0
AND c_to_user != ''
AND c_enabled = TRUE
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROLE_ROUTINE_GRANTS AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
INTERNAL_GET_USERNAME(Grantor) AS GRANTOR,
INTERNAL_GET_HOSTNAME(Grantor) AS GRANTOR_HOST,
pp.User AS GRANTEE,
pp.Host AS GRANTEE_HOST,
'def' AS SPECIFIC_CATALOG,
Db AS SPECIFIC_SCHEMA,
Routine_name AS SPECIFIC_NAME,
'def' AS ROUTINE_CATALOG,
Db AS ROUTINE_SCHEMA,
Routine_name AS ROUTINE_NAME,
Proc_priv AS PRIVILEGE_TYPE,
IF(FIND_IN_SET('Grant',Proc_priv)>0, 'YES', 'NO') AS IS_GRANTABLE FROM
mysql.procs_priv pp
JOIN role_graph rg ON pp.User = rg.c_from_user AND CONVERT(pp.Host using utf8mb4) = rg.c_from_host WHERE
pp.Proc_priv > 0
AND c_to_user != ''
AND c_enabled = TRUE
INSERT INTO I_S_check_table(t) VALUES ("CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.ROLE_ROUTINE_GRANTS AS WITH RECURSIVE role_graph (c_parent_user, c_parent_host, c_from_user, c_from_host, c_to_user, c_to_host, role_path, c_with_admin, c_enabled) AS ((SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST('' as CHAR(64) CHARSET utf8mb4), CAST('' as CHAR(255) CHARSET utf8mb4), CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE UNION SELECT INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), ROLE_NAME, ROLE_HOST, INTERNAL_GET_USERNAME(), INTERNAL_GET_HOSTNAME(), CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4), CAST('N' as CHAR(1) CHARSET utf8mb4), FALSE FROM JSON_TABLE(INTERNAL_GET_MANDATORY_ROLES_JSON(), '$[*]' COLUMNS ( ROLE_NAME VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_NAME', ROLE_HOST VARCHAR(255) CHARSET utf8mb4 PATH '$.ROLE_HOST') ) mandatory_roles WHERE CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)) NOT IN (SELECT CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)) FROM mysql.role_edges WHERE TO_USER = INTERNAL_GET_USERNAME() AND CONVERT(TO_HOST using utf8mb4) = INTERNAL_GET_HOSTNAME()) ) UNION SELECT c_parent_user, c_parent_host, FROM_USER, FROM_HOST, TO_USER, TO_HOST, IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256)), NULL), WITH_ADMIN_OPTION, IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE) FROM mysql.role_edges, role_graph WHERE TO_USER = c_from_user AND CONVERT(TO_HOST using utf8mb4)= c_from_host AND role_path IS NOT NULL)
SELECT DISTINCT
INTERNAL_GET_USERNAME(Grantor) AS GRANTOR,
INTERNAL_GET_HOSTNAME(Grantor) AS GRANTOR_HOST,
pp.User AS GRANTEE,
pp.Host AS GRANTEE_HOST,
'def' AS SPECIFIC_CATALOG,
Db AS SPECIFIC_SCHEMA,
Routine_name AS SPECIFIC_NAME,
'def' AS ROUTINE_CATALOG,
Db AS ROUTINE_SCHEMA,
Routine_name AS ROUTINE_NAME,
Proc_priv AS PRIVILEGE_TYPE,
IF(FIND_IN_SET('Grant',Proc_priv)>0, 'YES', 'NO') AS IS_GRANTABLE FROM
mysql.procs_priv pp
JOIN role_graph rg ON pp.User = rg.c_from_user AND CONVERT(pp.Host using utf8mb4) = rg.c_from_host WHERE
pp.Proc_priv > 0
AND c_to_user != ''
AND c_enabled = TRUE
");
CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.USER_ATTRIBUTES AS SELECT
user AS USER,
host AS HOST,
user_attributes->>"$.metadata" AS `ATTRIBUTE` FROM
mysql.user WHERE
CAN_ACCESS_USER(mysql.user.user,mysql.user.host)
INSERT INTO I_S_check_table(t) VALUES ('CREATE OR REPLACE DEFINER=`mysql.infoschema`@`localhost` VIEW information_schema.USER_ATTRIBUTES AS SELECT
user AS USER,
host AS HOST,
user_attributes->>"$.metadata" AS `ATTRIBUTE` FROM
mysql.user WHERE
CAN_ACCESS_USER(mysql.user.user,mysql.user.host)
');
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.
########################################################################
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.]
The schema checksum corresponds to I_S version 80030.
include/assert.inc [The schema checksum corresponds to a known I_S version.]
include/assert.inc [The schema checksum corresponds to
IS_VERSION 80030 stored on on disk.]
include/assert.inc [The stored I_S version is the latest published I_S version.]
|