1
# name : innodb_show_sys_tables.patch
2
# introduced : 11 or before
3
# maintainer : Yasufumi
6
# Any small change to this file in the main branch
7
# should be done or reviewed by the maintainer!
8
--- a/storage/innodb_plugin/handler/ha_innodb.cc
9
+++ b/storage/innodb_plugin/handler/ha_innodb.cc
10
@@ -11874,6 +11874,9 @@
11
i_s_innodb_table_stats,
12
i_s_innodb_index_stats,
13
i_s_innodb_admin_command,
14
+i_s_innodb_sys_tables,
15
+i_s_innodb_sys_indexes,
16
+i_s_innodb_sys_stats,
18
mysql_declare_plugin_end;
20
--- a/storage/innodb_plugin/handler/i_s.cc
21
+++ b/storage/innodb_plugin/handler/i_s.cc
23
#include "trx0rseg.h" /* for trx_rseg_struct */
24
#include "trx0sys.h" /* for trx_sys */
25
#include "dict0dict.h" /* for dict_sys */
26
+#include "btr0pcur.h"
27
#include "buf0lru.h" /* for XTRA_LRU_[DUMP/RESTORE] */
30
@@ -3114,3 +3115,671 @@
31
STRUCT_FLD(system_vars, NULL),
32
STRUCT_FLD(__reserved1, NULL)
35
+static ST_FIELD_INFO i_s_innodb_sys_tables_info[] =
37
+ {STRUCT_FLD(field_name, "SCHEMA"),
38
+ STRUCT_FLD(field_length, NAME_LEN),
39
+ STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
40
+ STRUCT_FLD(value, 0),
41
+ STRUCT_FLD(field_flags, 0),
42
+ STRUCT_FLD(old_name, ""),
43
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
45
+ {STRUCT_FLD(field_name, "NAME"),
46
+ STRUCT_FLD(field_length, NAME_LEN),
47
+ STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
48
+ STRUCT_FLD(value, 0),
49
+ STRUCT_FLD(field_flags, 0),
50
+ STRUCT_FLD(old_name, ""),
51
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
53
+ {STRUCT_FLD(field_name, "ID"),
54
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
55
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
56
+ STRUCT_FLD(value, 0),
57
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
58
+ STRUCT_FLD(old_name, ""),
59
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
61
+ {STRUCT_FLD(field_name, "N_COLS"),
62
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
63
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
64
+ STRUCT_FLD(value, 0),
65
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
66
+ STRUCT_FLD(old_name, ""),
67
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
69
+ {STRUCT_FLD(field_name, "TYPE"),
70
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
71
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
72
+ STRUCT_FLD(value, 0),
73
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
74
+ STRUCT_FLD(old_name, ""),
75
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
77
+ {STRUCT_FLD(field_name, "MIX_ID"),
78
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
79
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
80
+ STRUCT_FLD(value, 0),
81
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
82
+ STRUCT_FLD(old_name, ""),
83
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
85
+ {STRUCT_FLD(field_name, "MIX_LEN"),
86
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
87
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
88
+ STRUCT_FLD(value, 0),
89
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
90
+ STRUCT_FLD(old_name, ""),
91
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
93
+ {STRUCT_FLD(field_name, "CLUSTER_NAME"),
94
+ STRUCT_FLD(field_length, NAME_LEN),
95
+ STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
96
+ STRUCT_FLD(value, 0),
97
+ STRUCT_FLD(field_flags, 0),
98
+ STRUCT_FLD(old_name, ""),
99
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
101
+ {STRUCT_FLD(field_name, "SPACE"),
102
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
103
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
104
+ STRUCT_FLD(value, 0),
105
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
106
+ STRUCT_FLD(old_name, ""),
107
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
109
+ END_OF_ST_FIELD_INFO
112
+static ST_FIELD_INFO i_s_innodb_sys_indexes_info[] =
114
+ {STRUCT_FLD(field_name, "TABLE_ID"),
115
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
116
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
117
+ STRUCT_FLD(value, 0),
118
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
119
+ STRUCT_FLD(old_name, ""),
120
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
122
+ {STRUCT_FLD(field_name, "ID"),
123
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
124
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
125
+ STRUCT_FLD(value, 0),
126
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
127
+ STRUCT_FLD(old_name, ""),
128
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
130
+ {STRUCT_FLD(field_name, "NAME"),
131
+ STRUCT_FLD(field_length, NAME_LEN),
132
+ STRUCT_FLD(field_type, MYSQL_TYPE_STRING),
133
+ STRUCT_FLD(value, 0),
134
+ STRUCT_FLD(field_flags, 0),
135
+ STRUCT_FLD(old_name, ""),
136
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
138
+ {STRUCT_FLD(field_name, "N_FIELDS"),
139
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
140
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
141
+ STRUCT_FLD(value, 0),
142
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
143
+ STRUCT_FLD(old_name, ""),
144
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
146
+ {STRUCT_FLD(field_name, "TYPE"),
147
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
148
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
149
+ STRUCT_FLD(value, 0),
150
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
151
+ STRUCT_FLD(old_name, ""),
152
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
154
+ {STRUCT_FLD(field_name, "SPACE"),
155
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
156
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
157
+ STRUCT_FLD(value, 0),
158
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
159
+ STRUCT_FLD(old_name, ""),
160
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
162
+ {STRUCT_FLD(field_name, "PAGE_NO"),
163
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
164
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
165
+ STRUCT_FLD(value, 0),
166
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
167
+ STRUCT_FLD(old_name, ""),
168
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
170
+ END_OF_ST_FIELD_INFO
173
+static ST_FIELD_INFO i_s_innodb_sys_stats_info[] =
175
+ {STRUCT_FLD(field_name, "INDEX_ID"),
176
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
177
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
178
+ STRUCT_FLD(value, 0),
179
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
180
+ STRUCT_FLD(old_name, ""),
181
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
183
+ {STRUCT_FLD(field_name, "KEY_COLS"),
184
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
185
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
186
+ STRUCT_FLD(value, 0),
187
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
188
+ STRUCT_FLD(old_name, ""),
189
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
191
+ {STRUCT_FLD(field_name, "DIFF_VALS"),
192
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
193
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
194
+ STRUCT_FLD(value, 0),
195
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED),
196
+ STRUCT_FLD(old_name, ""),
197
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
199
+ {STRUCT_FLD(field_name, "NON_NULL_VALS"),
200
+ STRUCT_FLD(field_length, MY_INT64_NUM_DECIMAL_DIGITS),
201
+ STRUCT_FLD(field_type, MYSQL_TYPE_LONGLONG),
202
+ STRUCT_FLD(value, 0),
203
+ STRUCT_FLD(field_flags, MY_I_S_UNSIGNED | MY_I_S_MAYBE_NULL),
204
+ STRUCT_FLD(old_name, ""),
205
+ STRUCT_FLD(open_method, SKIP_OPEN_TABLE)},
207
+ END_OF_ST_FIELD_INFO
223
+ /*fprintf(stderr, "copy_string_field %d %d\n", table_field, rec_field);*/
225
+ data = rec_get_nth_field_old(rec, rec_field, &len);
226
+ if (len == UNIV_SQL_NULL) {
227
+ table->field[table_field]->set_null();
228
+ status = 0; /* success */
230
+ table->field[table_field]->set_notnull();
231
+ status = table->field[table_field]->store(
232
+ (char *) data, len, system_charset_info);
251
+ data = rec_get_nth_field_old(rec, rec_field, &len);
252
+ if (len == UNIV_SQL_NULL) {
253
+ table->field[table_field_1]->set_null();
254
+ table->field[table_field_1 + 1]->set_null();
255
+ status = 0; /* success */
257
+ char buf[NAME_LEN * 2 + 2];
260
+ if (len > NAME_LEN * 2 + 1) {
261
+ table->field[table_field_1]->set_null();
262
+ status = field_store_string(table->field[table_field_1 + 1],
263
+ "###TOO LONG NAME###");
267
+ strncpy(buf, (char*)data, len);
269
+ ptr = strchr(buf, '/');
274
+ status = field_store_string(table->field[table_field_1], buf);
275
+ status |= field_store_string(table->field[table_field_1 + 1], ptr);
277
+ table->field[table_field_1]->set_null();
278
+ status = field_store_string(table->field[table_field_1 + 1], buf);
299
+ /*fprintf(stderr, "copy_int_field %d %d\n", table_field, rec_field);*/
301
+ data = rec_get_nth_field_old(rec, rec_field, &len);
302
+ if (len == UNIV_SQL_NULL) {
303
+ table->field[table_field]->set_null();
304
+ status = 0; /* success */
306
+ table->field[table_field]->set_notnull();
307
+ status = table->field[table_field]->store(
308
+ mach_read_from_4(data), true);
327
+ /*fprintf(stderr, "copy_id_field %d %d\n", table_field, rec_field);*/
329
+ data = rec_get_nth_field_old(rec, rec_field, &len);
330
+ if (len == UNIV_SQL_NULL) {
331
+ table->field[table_field]->set_null();
332
+ status = 0; /* success */
334
+ table->field[table_field]->set_notnull();
335
+ status = table->field[table_field]->store(
336
+ ut_conv_dulint_to_longlong(mach_read_from_8(data)), true);
344
+copy_sys_tables_rec(
345
+/*================*/
347
+ const dict_index_t* index,
355
+ field = dict_index_get_nth_col_pos(index, 0);
356
+ status = copy_name_fields(table, 0, rec, field);
361
+ field = dict_index_get_nth_col_pos(index, 1);
362
+ status = copy_id_field(table, 2, rec, field);
367
+ field = dict_index_get_nth_col_pos(index, 2);
368
+ status = copy_int_field(table, 3, rec, field);
373
+ field = dict_index_get_nth_col_pos(index, 3);
374
+ status = copy_int_field(table, 4, rec, field);
379
+ field = dict_index_get_nth_col_pos(index, 4);
380
+ status = copy_id_field(table, 5, rec, field);
385
+ field = dict_index_get_nth_col_pos(index, 5);
386
+ status = copy_int_field(table, 6, rec, field);
391
+ field = dict_index_get_nth_col_pos(index, 6);
392
+ status = copy_string_field(table, 7, rec, field);
397
+ field = dict_index_get_nth_col_pos(index, 7);
398
+ status = copy_int_field(table, 8, rec, field);
408
+copy_sys_indexes_rec(
409
+/*=================*/
411
+ const dict_index_t* index,
419
+ field = dict_index_get_nth_col_pos(index, 0);
420
+ status = copy_id_field(table, 0, rec, field);
425
+ field = dict_index_get_nth_col_pos(index, 1);
426
+ status = copy_id_field(table, 1, rec, field);
431
+ field = dict_index_get_nth_col_pos(index, 2);
432
+ status = copy_string_field(table, 2, rec, field);
437
+ field = dict_index_get_nth_col_pos(index, 3);
438
+ status = copy_int_field(table, 3, rec, field);
443
+ field = dict_index_get_nth_col_pos(index, 4);
444
+ status = copy_int_field(table, 4, rec, field);
449
+ field = dict_index_get_nth_col_pos(index, 5);
450
+ status = copy_int_field(table, 5, rec, field);
455
+ field = dict_index_get_nth_col_pos(index, 6);
456
+ status = copy_int_field(table, 6, rec, field);
469
+ const dict_index_t* index,
477
+ n_fields = rec_get_n_fields_old(rec);
480
+ field = dict_index_get_nth_col_pos(index, 0);
481
+ status = copy_id_field(table, 0, rec, field);
486
+ field = dict_index_get_nth_col_pos(index, 1);
487
+ status = copy_int_field(table, 1, rec, field);
492
+ field = dict_index_get_nth_col_pos(index, 2);
493
+ status = copy_id_field(table, 2, rec, field);
497
+ /* NON_NULL_VALS */
498
+ if (n_fields < 6) {
499
+ table->field[3]->set_null();
501
+ field = dict_index_get_nth_col_pos(index, 3);
502
+ status = copy_id_field(table, 3, rec, field);
513
+i_s_innodb_schema_table_fill(
514
+/*=========================*/
516
+ TABLE_LIST* tables,
520
+ TABLE* table = (TABLE *) tables->table;
521
+ const char* table_name = tables->schema_table_name;
522
+ dict_table_t* innodb_table;
523
+ dict_index_t* index;
529
+ DBUG_ENTER("i_s_innodb_schema_table_fill");
531
+ /* deny access to non-superusers */
532
+ if (check_global_access(thd, PROCESS_ACL)) {
536
+ if (innobase_strcasecmp(table_name, "innodb_sys_tables") == 0) {
538
+ } else if (innobase_strcasecmp(table_name, "innodb_sys_indexes") == 0) {
540
+ } else if (innobase_strcasecmp(table_name, "innodb_sys_stats") == 0) {
547
+ RETURN_IF_INNODB_NOT_STARTED(tables->schema_table_name);
549
+ mutex_enter(&(dict_sys->mutex));
554
+ innodb_table = dict_table_get_low("SYS_TABLES");
555
+ } else if (id == 1) {
556
+ innodb_table = dict_table_get_low("SYS_INDEXES");
558
+ innodb_table = dict_table_get_low("SYS_STATS");
560
+ index = UT_LIST_GET_FIRST(innodb_table->indexes);
562
+ btr_pcur_open_at_index_side(TRUE, index, BTR_SEARCH_LEAF, &pcur,
565
+ btr_pcur_move_to_next_user_rec(&pcur, &mtr);
567
+ rec = btr_pcur_get_rec(&pcur);
568
+ if (!btr_pcur_is_on_user_rec(&pcur)) {
573
+ btr_pcur_store_position(&pcur, &mtr);
575
+ if (rec_get_deleted_flag(rec, 0)) {
576
+ /* record marked as deleted */
581
+ status = copy_sys_tables_rec(table, index, rec);
582
+ } else if (id == 1) {
583
+ status = copy_sys_indexes_rec(table, index, rec);
585
+ status = copy_sys_stats_rec(table, index, rec);
591
+ status = schema_table_store_record(thd, table);
599
+ btr_pcur_restore_position(BTR_SEARCH_LEAF, &pcur, &mtr);
602
+ btr_pcur_close(&pcur);
605
+ mutex_exit(&(dict_sys->mutex));
607
+ DBUG_RETURN(status);
612
+i_s_innodb_sys_tables_init(
613
+/*=======================*/
616
+ DBUG_ENTER("i_s_innodb_sys_tables_init");
617
+ ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
619
+ schema->fields_info = i_s_innodb_sys_tables_info;
620
+ schema->fill_table = i_s_innodb_schema_table_fill;
627
+i_s_innodb_sys_indexes_init(
628
+/*========================*/
631
+ DBUG_ENTER("i_s_innodb_sys_indexes_init");
632
+ ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
634
+ schema->fields_info = i_s_innodb_sys_indexes_info;
635
+ schema->fill_table = i_s_innodb_schema_table_fill;
642
+i_s_innodb_sys_stats_init(
643
+/*======================*/
646
+ DBUG_ENTER("i_s_innodb_sys_stats_init");
647
+ ST_SCHEMA_TABLE* schema = (ST_SCHEMA_TABLE*) p;
649
+ schema->fields_info = i_s_innodb_sys_stats_info;
650
+ schema->fill_table = i_s_innodb_schema_table_fill;
655
+UNIV_INTERN struct st_mysql_plugin i_s_innodb_sys_tables =
657
+ STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
658
+ STRUCT_FLD(info, &i_s_info),
659
+ STRUCT_FLD(name, "INNODB_SYS_TABLES"),
660
+ STRUCT_FLD(author, "Percona"),
661
+ STRUCT_FLD(descr, "InnoDB SYS_TABLES table"),
662
+ STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
663
+ STRUCT_FLD(init, i_s_innodb_sys_tables_init),
664
+ STRUCT_FLD(deinit, i_s_common_deinit),
665
+ STRUCT_FLD(version, 0x0100 /* 1.0 */),
666
+ STRUCT_FLD(status_vars, NULL),
667
+ STRUCT_FLD(system_vars, NULL),
668
+ STRUCT_FLD(__reserved1, NULL)
671
+UNIV_INTERN struct st_mysql_plugin i_s_innodb_sys_indexes =
673
+ STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
674
+ STRUCT_FLD(info, &i_s_info),
675
+ STRUCT_FLD(name, "INNODB_SYS_INDEXES"),
676
+ STRUCT_FLD(author, "Percona"),
677
+ STRUCT_FLD(descr, "InnoDB SYS_INDEXES table"),
678
+ STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
679
+ STRUCT_FLD(init, i_s_innodb_sys_indexes_init),
680
+ STRUCT_FLD(deinit, i_s_common_deinit),
681
+ STRUCT_FLD(version, 0x0100 /* 1.0 */),
682
+ STRUCT_FLD(status_vars, NULL),
683
+ STRUCT_FLD(system_vars, NULL),
684
+ STRUCT_FLD(__reserved1, NULL)
687
+UNIV_INTERN struct st_mysql_plugin i_s_innodb_sys_stats =
689
+ STRUCT_FLD(type, MYSQL_INFORMATION_SCHEMA_PLUGIN),
690
+ STRUCT_FLD(info, &i_s_info),
691
+ STRUCT_FLD(name, "INNODB_SYS_STATS"),
692
+ STRUCT_FLD(author, "Percona"),
693
+ STRUCT_FLD(descr, "InnoDB SYS_STATS table"),
694
+ STRUCT_FLD(license, PLUGIN_LICENSE_GPL),
695
+ STRUCT_FLD(init, i_s_innodb_sys_stats_init),
696
+ STRUCT_FLD(deinit, i_s_common_deinit),
697
+ STRUCT_FLD(version, 0x0100 /* 1.0 */),
698
+ STRUCT_FLD(status_vars, NULL),
699
+ STRUCT_FLD(system_vars, NULL),
700
+ STRUCT_FLD(__reserved1, NULL)
702
--- a/storage/innodb_plugin/handler/i_s.h
703
+++ b/storage/innodb_plugin/handler/i_s.h
705
extern struct st_mysql_plugin i_s_innodb_table_stats;
706
extern struct st_mysql_plugin i_s_innodb_index_stats;
707
extern struct st_mysql_plugin i_s_innodb_admin_command;
708
+extern struct st_mysql_plugin i_s_innodb_sys_tables;
709
+extern struct st_mysql_plugin i_s_innodb_sys_indexes;
710
+extern struct st_mysql_plugin i_s_innodb_sys_stats;
713
--- a/storage/innodb_plugin/handler/innodb_patch_info.h
714
+++ b/storage/innodb_plugin/handler/innodb_patch_info.h
716
{"innodb_pass_corrupt_table","Treat tables as corrupt instead of crash, when meet corrupt blocks","","http://www.percona.com/docs/wiki/percona-xtradb"},
717
{"innodb_fast_checksum","Using the checksum on 32bit-unit calculation","incompatible for unpatched ver.","http://www.percona.com/docs/wiki/percona-xtradb"},
718
{"innodb_files_extend","allow >4GB transaction log files, and can vary universal page size of datafiles","incompatible for unpatched ver.","http://www.percona.com/docs/wiki/percona-xtradb"},
719
+{"innodb_sys_tables_sys_indexes","Expose InnoDB SYS_TABLES and SYS_INDEXES schema tables","","http://www.percona.com/docs/wiki/percona-xtradb"},
720
{NULL, NULL, NULL, NULL}
723
+++ b/mysql-test/r/percona_innodb_use_sys_stats_table.result
725
+show variables like 'innodb_use_sys_stats%';
727
+innodb_use_sys_stats_table ON
729
+++ b/mysql-test/t/percona_innodb_use_sys_stats_table-master.opt
731
+--innodb_use_sys_stats_table
733
+++ b/mysql-test/t/percona_innodb_use_sys_stats_table.test
735
+--source include/have_innodb.inc
736
+show variables like 'innodb_use_sys_stats%';