diff --git a/perfschema/const.go b/perfschema/const.go index f82e4f860866d..f0e789063b200 100644 --- a/perfschema/const.go +++ b/perfschema/const.go @@ -58,21 +58,91 @@ var PerfSchemaTables = []string{ } // ColumnSetupActors contains the column name definitions for table setup_actors, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.setup_actors ( +// HOST CHAR(60) NOT NULL DEFAULT '%', +// USER CHAR(32) NOT NULL DEFAULT '%', +// ROLE CHAR(16) NOT NULL DEFAULT '%', +// ENABLED ENUM('YES','NO') NOT NULL DEFAULT 'YES', +// HISTORY ENUM('YES','NO') NOT NULL DEFAULT 'YES'); var ColumnSetupActors = []string{"HOST", "USER", "ROLE", "ENABLED", "HISTORY"} // ColumnSetupObjects contains the column name definitions for table setup_objects, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.setup_objects ( +// OBJECT_TYPE ENUM('EVENT','FUNCTION','TABLE') NOT NULL DEFAULT 'TABLE', +// OBJECT_SCHEMA VARCHAR(64) DEFAULT '%', +// OBJECT_NAME VARCHAR(64) NOT NULL DEFAULT '%', +// ENABLED ENUM('YES','NO') NOT NULL DEFAULT 'YES', +// TIMED ENUM('YES','NO') NOT NULL DEFAULT 'YES'); var ColumnSetupObjects = []string{"OBJECT_TYPE", "OBJECT_SCHEMA", "OBJECT_NAME", "ENABLED", "TIMED"} // ColumnSetupInstruments contains the column name definitions for table setup_instruments, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.setup_instruments ( +// NAME VARCHAR(128) NOT NULL, +// ENABLED ENUM('YES','NO') NOT NULL, +// TIMED ENUM('YES','NO') NOT NULL); var ColumnSetupInstruments = []string{"NAMED", "ENABLED", "TIMED"} // ColumnSetupConsumers contains the column name definitions for table setup_consumers, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.setup_consumers ( +// NAME VARCHAR(64) NOT NULL, +// ENABLED ENUM('YES','NO') NOT NULL); var ColumnSetupConsumers = []string{"NAMED", "ENABLED"} // ColumnSetupTimers contains the column name definitions for table setup_timers, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.setup_timers ( +// NAME VARCHAR(64) NOT NULL, +// TIMER_NAME ENUM('NANOSECOND','MICROSECOND','MILLISECOND') NOT NULL); var ColumnSetupTimers = []string{"NAME", "TIMER_NAME"} // ColumnStmtsCurrent contains the column name definitions for table events_statements_current, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_statements_current ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, +// SQL_TEXT LONGTEXT, +// DIGEST VARCHAR(32), +// DIGEST_TEXT LONGTEXT, +// CURRENT_SCHEMA VARCHAR(64), +// OBJECT_TYPE VARCHAR(64), +// OBJECT_SCHEMA VARCHAR(64), +// OBJECT_NAME VARCHAR(64), +// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, +// MYSQL_ERRNO INT(11), +// RETURNED_SQLSTATE VARCHAR(5), +// MESSAGE_TEXT VARCHAR(128), +// ERRORS BIGINT(20) UNSIGNED NOT NULL, +// WARNINGS BIGINT(20) UNSIGNED NOT NULL, +// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, +// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, +// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, +// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, +// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, +// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, +// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, +// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, +// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, +// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), +// NESTING_EVENT_LEVEL INT(11)); var ColumnStmtsCurrent = []string{ "THREAD_ID", "EVENT_ID", @@ -118,6 +188,49 @@ var ColumnStmtsCurrent = []string{ } // ColumnStmtsHistory contains the column name definitions for table events_statements_history, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_statements_history ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, +// SQL_TEXT LONGTEXT, +// DIGEST VARCHAR(32), +// DIGEST_TEXT LONGTEXT, +// CURRENT_SCHEMA VARCHAR(64), +// OBJECT_TYPE VARCHAR(64), +// OBJECT_SCHEMA VARCHAR(64), +// OBJECT_NAME VARCHAR(64), +// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, +// MYSQL_ERRNO INT(11), +// RETURNED_SQLSTATE VARCHAR(5), +// MESSAGE_TEXT VARCHAR(128), +// ERRORS BIGINT(20) UNSIGNED NOT NULL, +// WARNINGS BIGINT(20) UNSIGNED NOT NULL, +// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, +// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, +// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, +// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, +// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, +// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, +// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, +// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, +// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, +// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), +// NESTING_EVENT_LEVEL INT(11)); var ColumnStmtsHistory = []string{ "THREAD_ID", "EVENT_ID", @@ -163,6 +276,49 @@ var ColumnStmtsHistory = []string{ } // ColumnStmtsHistoryLong contains the column name definitions for table events_statements_history_long, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_statements_history_long ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, +// SQL_TEXT LONGTEXT, +// DIGEST VARCHAR(32), +// DIGEST_TEXT LONGTEXT, +// CURRENT_SCHEMA VARCHAR(64), +// OBJECT_TYPE VARCHAR(64), +// OBJECT_SCHEMA VARCHAR(64), +// OBJECT_NAME VARCHAR(64), +// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, +// MYSQL_ERRNO INT(11), +// RETURNED_SQLSTATE VARCHAR(5), +// MESSAGE_TEXT VARCHAR(128), +// ERRORS BIGINT(20) UNSIGNED NOT NULL, +// WARNINGS BIGINT(20) UNSIGNED NOT NULL, +// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, +// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, +// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, +// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, +// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, +// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, +// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, +// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, +// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, +// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), +// NESTING_EVENT_LEVEL INT(11)); var ColumnStmtsHistoryLong = []string{ "THREAD_ID", "EVENT_ID", @@ -208,6 +364,43 @@ var ColumnStmtsHistoryLong = []string{ } // ColumnPreparedStmtsInstances contains the column name definitions for table prepared_statements_instances, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.prepared_statements_instances ( +// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED NOT NULL, +// STATEMENT_ID BIGINT(20) UNSIGNED NOT NULL, +// STATEMENT_NAME VARCHAR(64), +// SQL_TEXT LONGTEXT NOT NULL, +// OWNER_THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// OWNER_EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// OWNER_OBJECT_TYPE ENUM('EVENT','FUNCTION','TABLE'), +// OWNER_OBJECT_SCHEMA VARCHAR(64), +// OWNER_OBJECT_NAME VARCHAR(64), +// TIMER_PREPARE BIGINT(20) UNSIGNED NOT NULL, +// COUNT_REPREPARE BIGINT(20) UNSIGNED NOT NULL, +// COUNT_EXECUTE BIGINT(20) UNSIGNED NOT NULL, +// SUM_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, +// MIN_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, +// AVG_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, +// MAX_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, +// SUM_LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, +// SUM_ERRORS BIGINT(20) UNSIGNED NOT NULL, +// SUM_WARNINGS BIGINT(20) UNSIGNED NOT NULL, +// SUM_ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, +// SUM_ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, +// SUM_ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, +// SUM_CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, +// SUM_CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, +// SUM_SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SUM_SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, +// SUM_SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SUM_SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, +// SUM_SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// SUM_SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, +// SUM_SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, +// SUM_SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, +// SUM_SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, +// SUM_NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, +// SUM_NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL); var ColumnPreparedStmtsInstances = []string{ "OBJECT_INSTANCE_BEGIN", "STATEMENT_ID", @@ -247,6 +440,32 @@ var ColumnPreparedStmtsInstances = []string{ } // ColumnTransCurrent contains the column name definitions for table events_transactions_current, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_transactions_current ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), +// TRX_ID BIGINT(20) UNSIGNED, +// GTID VARCHAR(64), +// XID_FORMAT_ID INT(11), +// XID_GTRID VARCHAR(130), +// XID_BQUAL VARCHAR(130), +// XA_STATE VARCHAR(64), +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), +// ISOLATION_LEVEL VARCHAR(64), +// AUTOCOMMIT ENUM('YES','NO') NOT NULL, +// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, +// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, +// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, +// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); var ColumnTransCurrent = []string{ "THREAD_ID", "EVENT_ID", @@ -275,6 +494,32 @@ var ColumnTransCurrent = []string{ } // ColumnTransHistory contains the column name definitions for table events_transactions_history, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_transactions_history ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), +// TRX_ID BIGINT(20) UNSIGNED, +// GTID VARCHAR(64), +// XID_FORMAT_ID INT(11), +// XID_GTRID VARCHAR(130), +// XID_BQUAL VARCHAR(130), +// XA_STATE VARCHAR(64), +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), +// ISOLATION_LEVEL VARCHAR(64), +// AUTOCOMMIT ENUM('YES','NO') NOT NULL, +// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, +// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, +// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, +// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); var ColumnTransHistory = []string{ "THREAD_ID", "EVENT_ID", @@ -303,6 +548,32 @@ var ColumnTransHistory = []string{ } // ColumnTransHistoryLong contains the column name definitions for table events_transactions_history_long, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_transactions_history_long ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), +// TRX_ID BIGINT(20) UNSIGNED, +// GTID VARCHAR(64), +// XID_FORMAT_ID INT(11), +// XID_GTRID VARCHAR(130), +// XID_BQUAL VARCHAR(130), +// XA_STATE VARCHAR(64), +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), +// ISOLATION_LEVEL VARCHAR(64), +// AUTOCOMMIT ENUM('YES','NO') NOT NULL, +// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, +// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, +// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, +// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); var ColumnTransHistoryLong = []string{ "THREAD_ID", "EVENT_ID", @@ -331,6 +602,20 @@ var ColumnTransHistoryLong = []string{ } // ColumnStagesCurrent contains the column name definitions for table events_stages_current, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_stages_current ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// WORK_COMPLETED BIGINT(20) UNSIGNED, +// WORK_ESTIMATED BIGINT(20) UNSIGNED, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); var ColumnStagesCurrent = []string{ "THREAD_ID", "EVENT_ID", @@ -347,6 +632,20 @@ var ColumnStagesCurrent = []string{ } // ColumnStagesHistory contains the column name definitions for table events_stages_history, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_stages_history ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// WORK_COMPLETED BIGINT(20) UNSIGNED, +// WORK_ESTIMATED BIGINT(20) UNSIGNED, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); var ColumnStagesHistory = []string{ "THREAD_ID", "EVENT_ID", @@ -363,6 +662,20 @@ var ColumnStagesHistory = []string{ } // ColumnStagesHistoryLong contains the column name definitions for table events_stages_history_long, same as MySQL. +// +// CREATE TABLE if not exists performance_schema.events_stages_history_long ( +// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, +// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, +// END_EVENT_ID BIGINT(20) UNSIGNED, +// EVENT_NAME VARCHAR(128) NOT NULL, +// SOURCE VARCHAR(64), +// TIMER_START BIGINT(20) UNSIGNED, +// TIMER_END BIGINT(20) UNSIGNED, +// TIMER_WAIT BIGINT(20) UNSIGNED, +// WORK_COMPLETED BIGINT(20) UNSIGNED, +// WORK_ESTIMATED BIGINT(20) UNSIGNED, +// NESTING_EVENT_ID BIGINT(20) UNSIGNED, +// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); var ColumnStagesHistoryLong = []string{ "THREAD_ID", "EVENT_ID", diff --git a/perfschema/init.go b/perfschema/init.go index 4c94f218387cb..528904a6de269 100644 --- a/perfschema/init.go +++ b/perfschema/init.go @@ -28,1115 +28,183 @@ import ( "github.com/syndtr/goleveldb/leveldb/storage" ) -// CREATE TABLE if not exists performance_schema.setup_actors ( -// HOST CHAR(60) NOT NULL DEFAULT '%', -// USER CHAR(32) NOT NULL DEFAULT '%', -// ROLE CHAR(16) NOT NULL DEFAULT '%', -// ENABLED ENUM('YES','NO') NOT NULL DEFAULT 'YES', -// HISTORY ENUM('YES','NO') NOT NULL DEFAULT 'YES'); -func (ps *perfSchema) buildSetupActorsModel() { - tbName := TableSetupActors - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeString, 60, mysql.NotNullFlag, "%", nil}, - {mysql.TypeString, 32, mysql.NotNullFlag, "%", nil}, - {mysql.TypeString, 16, mysql.NotNullFlag, "%", nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnSetupActors[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields -} - -// CREATE TABLE if not exists performance_schema.setup_objects ( -// OBJECT_TYPE ENUM('EVENT','FUNCTION','TABLE') NOT NULL DEFAULT 'TABLE', -// OBJECT_SCHEMA VARCHAR(64) DEFAULT '%', -// OBJECT_NAME VARCHAR(64) NOT NULL DEFAULT '%', -// ENABLED ENUM('YES','NO') NOT NULL DEFAULT 'YES', -// TIMED ENUM('YES','NO') NOT NULL DEFAULT 'YES'); -func (ps *perfSchema) buildSetupObjectsModel() { - tbName := TableSetupObjects - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeEnum, -1, mysql.NotNullFlag, "TABLE", []string{"EVENT", "FUNCTION", "TABLE"}}, - {mysql.TypeVarchar, 64, 0, "%", nil}, - {mysql.TypeVarchar, 64, mysql.NotNullFlag, "%", nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnSetupObjects[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields -} - -// CREATE TABLE if not exists performance_schema.setup_instruments ( -// NAME VARCHAR(128) NOT NULL, -// ENABLED ENUM('YES','NO') NOT NULL, -// TIMED ENUM('YES','NO') NOT NULL); -func (ps *perfSchema) buildSetupInstrumentsModel() { - tbName := TableSetupInstruments - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnSetupInstruments[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +type columnInfo struct { + tp byte + size int + flag uint + deflt interface{} + elems []string } -// CREATE TABLE if not exists performance_schema.setup_consumers ( -// NAME VARCHAR(64) NOT NULL, -// ENABLED ENUM('YES','NO') NOT NULL); -func (ps *perfSchema) buildSetupConsumersModel() { - tbName := TableSetupConsumers - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeVarchar, 64, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnSetupConsumers[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields -} - -// CREATE TABLE if not exists performance_schema.setup_timers ( -// NAME VARCHAR(64) NOT NULL, -// TIMER_NAME ENUM('NANOSECOND','MICROSECOND','MILLISECOND') NOT NULL); -func (ps *perfSchema) buildSetupTimersModel() { - tbName := TableSetupTimers - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeVarchar, 64, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"NANOSECOND", "MICROSECOND", "MILLISECOND"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnSetupTimers[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields -} - -// CREATE TABLE if not exists performance_schema.events_statements_current ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SQL_TEXT LONGTEXT, -// DIGEST VARCHAR(32), -// DIGEST_TEXT LONGTEXT, -// CURRENT_SCHEMA VARCHAR(64), -// OBJECT_TYPE VARCHAR(64), -// OBJECT_SCHEMA VARCHAR(64), -// OBJECT_NAME VARCHAR(64), -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// MYSQL_ERRNO INT(11), -// RETURNED_SQLSTATE VARCHAR(5), -// MESSAGE_TEXT VARCHAR(128), -// ERRORS BIGINT(20) UNSIGNED NOT NULL, -// WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), -// NESTING_EVENT_LEVEL INT(11)); -func (ps *perfSchema) buildStmtsCurrentModel() { - tbName := TableStmtsCurrent - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 32, 0, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 5, 0, nil, nil}, - {mysql.TypeVarchar, 128, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - {mysql.TypeLong, 11, 0, nil, nil}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnStmtsCurrent[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var setupActorsCols = []columnInfo{ + {mysql.TypeString, 60, mysql.NotNullFlag, "%", nil}, + {mysql.TypeString, 32, mysql.NotNullFlag, "%", nil}, + {mysql.TypeString, 16, mysql.NotNullFlag, "%", nil}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, } -// CREATE TABLE if not exists performance_schema.events_statements_history ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SQL_TEXT LONGTEXT, -// DIGEST VARCHAR(32), -// DIGEST_TEXT LONGTEXT, -// CURRENT_SCHEMA VARCHAR(64), -// OBJECT_TYPE VARCHAR(64), -// OBJECT_SCHEMA VARCHAR(64), -// OBJECT_NAME VARCHAR(64), -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// MYSQL_ERRNO INT(11), -// RETURNED_SQLSTATE VARCHAR(5), -// MESSAGE_TEXT VARCHAR(128), -// ERRORS BIGINT(20) UNSIGNED NOT NULL, -// WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), -// NESTING_EVENT_LEVEL INT(11)); -func (ps *perfSchema) buildStmtsHistoryModel() { - tbName := TableStmtsHistory - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 32, 0, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 5, 0, nil, nil}, - {mysql.TypeVarchar, 128, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - {mysql.TypeLong, 11, 0, nil, nil}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnStmtsHistory[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var setupObjectsCols = []columnInfo{ + {mysql.TypeEnum, -1, mysql.NotNullFlag, "TABLE", []string{"EVENT", "FUNCTION", "TABLE"}}, + {mysql.TypeVarchar, 64, 0, "%", nil}, + {mysql.TypeVarchar, 64, mysql.NotNullFlag, "%", nil}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, "YES", []string{"YES", "NO"}}, } -// CREATE TABLE if not exists performance_schema.events_statements_history_long ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SQL_TEXT LONGTEXT, -// DIGEST VARCHAR(32), -// DIGEST_TEXT LONGTEXT, -// CURRENT_SCHEMA VARCHAR(64), -// OBJECT_TYPE VARCHAR(64), -// OBJECT_SCHEMA VARCHAR(64), -// OBJECT_NAME VARCHAR(64), -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// MYSQL_ERRNO INT(11), -// RETURNED_SQLSTATE VARCHAR(5), -// MESSAGE_TEXT VARCHAR(128), -// ERRORS BIGINT(20) UNSIGNED NOT NULL, -// WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE'), -// NESTING_EVENT_LEVEL INT(11)); -func (ps *perfSchema) buildStmtsHistoryLongModel() { - tbName := TableStmtsHistoryLong - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 32, 0, nil, nil}, - {mysql.TypeLongBlob, -1, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 5, 0, nil, nil}, - {mysql.TypeVarchar, 128, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - {mysql.TypeLong, 11, 0, nil, nil}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnStmtsHistoryLong[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var setupInstrumentsCols = []columnInfo{ + {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, } -// CREATE TABLE if not exists performance_schema.prepared_statements_instances ( -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED NOT NULL, -// STATEMENT_ID BIGINT(20) UNSIGNED NOT NULL, -// STATEMENT_NAME VARCHAR(64), -// SQL_TEXT LONGTEXT NOT NULL, -// OWNER_THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// OWNER_EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// OWNER_OBJECT_TYPE ENUM('EVENT','FUNCTION','TABLE'), -// OWNER_OBJECT_SCHEMA VARCHAR(64), -// OWNER_OBJECT_NAME VARCHAR(64), -// TIMER_PREPARE BIGINT(20) UNSIGNED NOT NULL, -// COUNT_REPREPARE BIGINT(20) UNSIGNED NOT NULL, -// COUNT_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// SUM_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// MIN_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// AVG_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// MAX_TIMER_EXECUTE BIGINT(20) UNSIGNED NOT NULL, -// SUM_LOCK_TIME BIGINT(20) UNSIGNED NOT NULL, -// SUM_ERRORS BIGINT(20) UNSIGNED NOT NULL, -// SUM_WARNINGS BIGINT(20) UNSIGNED NOT NULL, -// SUM_ROWS_AFFECTED BIGINT(20) UNSIGNED NOT NULL, -// SUM_ROWS_SENT BIGINT(20) UNSIGNED NOT NULL, -// SUM_ROWS_EXAMINED BIGINT(20) UNSIGNED NOT NULL, -// SUM_CREATED_TMP_DISK_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SUM_CREATED_TMP_TABLES BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_FULL_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_FULL_RANGE_JOIN BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_RANGE_CHECK BIGINT(20) UNSIGNED NOT NULL, -// SUM_SELECT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_MERGE_PASSES BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_RANGE BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_ROWS BIGINT(20) UNSIGNED NOT NULL, -// SUM_SORT_SCAN BIGINT(20) UNSIGNED NOT NULL, -// SUM_NO_INDEX_USED BIGINT(20) UNSIGNED NOT NULL, -// SUM_NO_GOOD_INDEX_USED BIGINT(20) UNSIGNED NOT NULL); -func (ps *perfSchema) buildPreparedStmtsInstancesModel() { - tbName := TablePreparedStmtsInstances - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLongBlob, -1, mysql.NotNullFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"EVENT", "FUNCTION", "TABLE"}}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnPreparedStmtsInstances[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var setupConsumersCols = []columnInfo{ + {mysql.TypeVarchar, 64, mysql.NotNullFlag, nil, nil}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, } -// CREATE TABLE if not exists performance_schema.events_transactions_current ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), -// TRX_ID BIGINT(20) UNSIGNED, -// GTID VARCHAR(64), -// XID_FORMAT_ID INT(11), -// XID_GTRID VARCHAR(130), -// XID_BQUAL VARCHAR(130), -// XA_STATE VARCHAR(64), -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), -// ISOLATION_LEVEL VARCHAR(64), -// AUTOCOMMIT ENUM('YES','NO') NOT NULL, -// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, -// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, -// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -func (ps *perfSchema) buildTransCurrentModel() { - tbName := TableTransCurrent - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"READ ONLY", "READ WRITE"}}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnTransCurrent[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var setupTimersCols = []columnInfo{ + {mysql.TypeVarchar, 64, mysql.NotNullFlag, nil, nil}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"NANOSECOND", "MICROSECOND", "MILLISECOND"}}, } -// CREATE TABLE if not exists performance_schema.events_transactions_history ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), -// TRX_ID BIGINT(20) UNSIGNED, -// GTID VARCHAR(64), -// XID_FORMAT_ID INT(11), -// XID_GTRID VARCHAR(130), -// XID_BQUAL VARCHAR(130), -// XA_STATE VARCHAR(64), -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), -// ISOLATION_LEVEL VARCHAR(64), -// AUTOCOMMIT ENUM('YES','NO') NOT NULL, -// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, -// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, -// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -func (ps *perfSchema) buildTransHistoryModel() { - tbName := TableTransHistory - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"READ ONLY", "READ WRITE"}}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnTransHistory[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var stmtsCurrentCols = []columnInfo{ + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLongBlob, -1, 0, nil, nil}, + {mysql.TypeVarchar, 32, 0, nil, nil}, + {mysql.TypeLongBlob, -1, 0, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLong, 11, 0, nil, nil}, + {mysql.TypeVarchar, 5, 0, nil, nil}, + {mysql.TypeVarchar, 128, 0, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, + {mysql.TypeLong, 11, 0, nil, nil}, } -// CREATE TABLE if not exists performance_schema.events_transactions_history_long ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// STATE ENUM('ACTIVE','COMMITTED',"ROLLED BACK"), -// TRX_ID BIGINT(20) UNSIGNED, -// GTID VARCHAR(64), -// XID_FORMAT_ID INT(11), -// XID_GTRID VARCHAR(130), -// XID_BQUAL VARCHAR(130), -// XA_STATE VARCHAR(64), -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// ACCESS_MODE ENUM('READ ONLY','READ WRITE'), -// ISOLATION_LEVEL VARCHAR(64), -// AUTOCOMMIT ENUM('YES','NO') NOT NULL, -// NUMBER_OF_SAVEPOINTS BIGINT(20) UNSIGNED, -// NUMBER_OF_ROLLBACK_TO_SAVEPOINT BIGINT(20) UNSIGNED, -// NUMBER_OF_RELEASE_SAVEPOINT BIGINT(20) UNSIGNED, -// OBJECT_INSTANCE_BEGIN BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -func (ps *perfSchema) buildTransHistoryLongModel() { - tbName := TableTransHistoryLong - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLong, 11, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 130, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"READ ONLY", "READ WRITE"}}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnTransHistoryLong[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var preparedStmtsInstancesCols = []columnInfo{ + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeLongBlob, -1, mysql.NotNullFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeEnum, -1, 0, nil, []string{"EVENT", "FUNCTION", "TABLE"}}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, } -// CREATE TABLE if not exists performance_schema.events_stages_current ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// WORK_COMPLETED BIGINT(20) UNSIGNED, -// WORK_ESTIMATED BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -func (ps *perfSchema) buildStagesCurrentModel() { - tbName := TableStagesCurrent - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnStagesCurrent[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var transCurrentCols = []columnInfo{ + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, + {mysql.TypeEnum, -1, 0, nil, []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeLong, 11, 0, nil, nil}, + {mysql.TypeVarchar, 130, 0, nil, nil}, + {mysql.TypeVarchar, 130, 0, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeEnum, -1, 0, nil, []string{"READ ONLY", "READ WRITE"}}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeEnum, -1, mysql.NotNullFlag, nil, []string{"YES", "NO"}}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, } -// CREATE TABLE if not exists performance_schema.events_stages_history ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// WORK_COMPLETED BIGINT(20) UNSIGNED, -// WORK_ESTIMATED BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -func (ps *perfSchema) buildStagesHistoryModel() { - tbName := TableStagesHistory - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { - var ci *model.ColumnInfo - - colName := ColumnStagesHistory[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) - } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) - } - - cols[i] = ci - fields[i] = buildResultField(tbName, ci) - } - - ps.tables[tbName] = &model.TableInfo{ - Name: model.NewCIStr(tbName), - Charset: "utf8", - Collate: "utf8", - Columns: cols, - } - ps.fields[tbName] = fields +var stagesCurrentCols = []columnInfo{ + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, + {mysql.TypeVarchar, 64, 0, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, + {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, } -// CREATE TABLE if not exists performance_schema.events_stages_history_long ( -// THREAD_ID BIGINT(20) UNSIGNED NOT NULL, -// EVENT_ID BIGINT(20) UNSIGNED NOT NULL, -// END_EVENT_ID BIGINT(20) UNSIGNED, -// EVENT_NAME VARCHAR(128) NOT NULL, -// SOURCE VARCHAR(64), -// TIMER_START BIGINT(20) UNSIGNED, -// TIMER_END BIGINT(20) UNSIGNED, -// TIMER_WAIT BIGINT(20) UNSIGNED, -// WORK_COMPLETED BIGINT(20) UNSIGNED, -// WORK_ESTIMATED BIGINT(20) UNSIGNED, -// NESTING_EVENT_ID BIGINT(20) UNSIGNED, -// NESTING_EVENT_TYPE ENUM('TRANSACTION','STATEMENT','STAGE')); -func (ps *perfSchema) buildStagesHistoryLongModel() { - tbName := TableStagesHistoryLong - table := []struct { - tp byte - size int - flag uint - def interface{} - elems []string - }{ - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.NotNullFlag | mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeVarchar, 128, mysql.NotNullFlag, nil, nil}, - {mysql.TypeVarchar, 64, 0, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil, nil}, - {mysql.TypeEnum, -1, 0, nil, []string{"TRANSACTION", "STATEMENT", "STAGE"}}, - } - - cols := make([]*model.ColumnInfo, len(table)) - fields := make([]*field.ResultField, len(table)) - for i, t := range table { +func (ps *perfSchema) buildModel(tbName string, colNames []string, cols []columnInfo) { + rcols := make([]*model.ColumnInfo, len(cols)) + fields := make([]*field.ResultField, len(cols)) + for i, col := range cols { var ci *model.ColumnInfo - colName := ColumnStagesHistoryLong[i] - if t.elems == nil { - ci = buildUsualColumnInfo(colName, t.tp, t.size, t.flag, t.def) + if col.elems == nil { + ci = buildUsualColumnInfo(colNames[i], col.tp, col.size, col.flag, col.deflt) } else { - ci = buildEnumColumnInfo(colName, t.elems, t.flag, t.def) + ci = buildEnumColumnInfo(colNames[i], col.elems, col.flag, col.deflt) } - cols[i] = ci + rcols[i] = ci fields[i] = buildResultField(tbName, ci) } @@ -1144,7 +212,7 @@ func (ps *perfSchema) buildStagesHistoryLongModel() { Name: model.NewCIStr(tbName), Charset: "utf8", Collate: "utf8", - Columns: cols, + Columns: rcols, } ps.fields[tbName] = fields } @@ -1206,11 +274,8 @@ func buildResultField(tableName string, colInfo *model.ColumnInfo) *field.Result return field } -func (ps *perfSchema) initSetupActorsRecords() error { - records := [][]interface{}{ - {"%", "%", "%", mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}}, - } - lastLsn := atomic.AddUint64(ps.lsns[TableSetupActors], uint64(len(records))) +func (ps *perfSchema) initRecords(tbName string, records [][]interface{}) error { + lastLsn := atomic.AddUint64(ps.lsns[tbName], uint64(len(records))) batch := pool.Get().(*leveldb.Batch) defer func() { @@ -1232,12 +297,75 @@ func (ps *perfSchema) initSetupActorsRecords() error { batch.Put(key, val) } - err := ps.stores[TableSetupActors].Write(batch, nil) + err := ps.stores[tbName].Write(batch, nil) return errors.Trace(err) } -func (ps *perfSchema) initSetupObjectsRecords() error { - records := [][]interface{}{ +func (ps *perfSchema) initialize() (err error) { + ps.tables = make(map[string]*model.TableInfo) + ps.fields = make(map[string][]*field.ResultField) + ps.stores = make(map[string]*leveldb.DB) + ps.lsns = make(map[string]*uint64) + + for _, t := range PerfSchemaTables { + ps.stores[t], err = leveldb.Open(storage.NewMemStorage(), nil) + if err != nil { + return errors.Trace(err) + } + ps.lsns[t] = new(uint64) + *ps.lsns[t] = 0 + } + + allColDefs := [][]columnInfo{ + setupActorsCols, + setupObjectsCols, + setupInstrumentsCols, + setupConsumersCols, + setupTimersCols, + stmtsCurrentCols, + stmtsCurrentCols, // same as above + stmtsCurrentCols, // same as above + preparedStmtsInstancesCols, + transCurrentCols, + transCurrentCols, // same as above + transCurrentCols, // same as above + stagesCurrentCols, + stagesCurrentCols, // same as above + stagesCurrentCols, // same as above + } + + allColNames := [][]string{ + ColumnSetupActors, + ColumnSetupObjects, + ColumnSetupInstruments, + ColumnSetupConsumers, + ColumnSetupTimers, + ColumnStmtsCurrent, + ColumnStmtsHistory, + ColumnStmtsHistoryLong, + ColumnPreparedStmtsInstances, + ColumnStmtsCurrent, + ColumnStmtsHistory, + ColumnStmtsHistoryLong, + ColumnStagesCurrent, + ColumnStagesHistory, + ColumnStagesHistoryLong, + } + + // initialize all table, column and result field definitions + for i, def := range allColDefs { + ps.buildModel(PerfSchemaTables[i], allColNames[i], def) + } + + setupActorsRecords := [][]interface{}{ + {"%", "%", "%", mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}}, + } + err = ps.initRecords(TableSetupActors, setupActorsRecords) + if err != nil { + return errors.Trace(err) + } + + setupObjectsRecords := [][]interface{}{ {mysql.Enum{Name: "EVENT", Value: 1}, "mysql", "%", mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}}, {mysql.Enum{Name: "EVENT", Value: 1}, "performance_schema", "%", mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}}, {mysql.Enum{Name: "EVENT", Value: 1}, "information_schema", "%", mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}}, @@ -1251,39 +379,12 @@ func (ps *perfSchema) initSetupObjectsRecords() error { {mysql.Enum{Name: "TABLE", Value: 3}, "information_schema", "%", mysql.Enum{Name: "NO", Value: 2}, mysql.Enum{Name: "NO", Value: 2}}, {mysql.Enum{Name: "TABLE", Value: 3}, "%", "%", mysql.Enum{Name: "YES", Value: 1}, mysql.Enum{Name: "YES", Value: 1}}, } - lastLsn := atomic.AddUint64(ps.lsns[TableSetupObjects], uint64(len(records))) - - batch := pool.Get().(*leveldb.Batch) - defer func() { - batch.Reset() - pool.Put(batch) - }() - - for i, rec := range records { - lsn := lastLsn - uint64(len(records)) + uint64(i) - rawKey := []interface{}{uint64(lsn)} - key, err := codec.EncodeKey(nil, rawKey...) - if err != nil { - return errors.Trace(err) - } - val, err := codec.EncodeValue(nil, rec...) - if err != nil { - return errors.Trace(err) - } - batch.Put(key, val) + err = ps.initRecords(TableSetupObjects, setupObjectsRecords) + if err != nil { + return errors.Trace(err) } - err := ps.stores[TableSetupObjects].Write(batch, nil) - return errors.Trace(err) -} - -func (ps *perfSchema) initSetupInstrumentsRecords() error { - // TODO: add instrumentation points later - return nil -} - -func (ps *perfSchema) initSetupConsumersRecords() error { - records := [][]interface{}{ + setupConsumersRecords := [][]interface{}{ {"events_stages_current", mysql.Enum{Name: "NO", Value: 2}}, {"events_stages_history", mysql.Enum{Name: "NO", Value: 2}}, {"events_stages_history_long", mysql.Enum{Name: "NO", Value: 2}}, @@ -1297,112 +398,17 @@ func (ps *perfSchema) initSetupConsumersRecords() error { {"thread_instrumentation", mysql.Enum{Name: "YES", Value: 1}}, {"statements_digest", mysql.Enum{Name: "YES", Value: 1}}, } - lastLsn := atomic.AddUint64(ps.lsns[TableSetupConsumers], uint64(len(records))) - - batch := pool.Get().(*leveldb.Batch) - defer func() { - batch.Reset() - pool.Put(batch) - }() - - for i, rec := range records { - lsn := lastLsn - uint64(len(records)) + uint64(i) - rawKey := []interface{}{uint64(lsn)} - key, err := codec.EncodeKey(nil, rawKey...) - if err != nil { - return errors.Trace(err) - } - val, err := codec.EncodeValue(nil, rec...) - if err != nil { - return errors.Trace(err) - } - batch.Put(key, val) + err = ps.initRecords(TableSetupConsumers, setupConsumersRecords) + if err != nil { + return errors.Trace(err) } - err := ps.stores[TableSetupConsumers].Write(batch, nil) - return errors.Trace(err) -} - -func (ps *perfSchema) initSetupTimersRecords() error { - records := [][]interface{}{ + setupTimersRecords := [][]interface{}{ {"stage", mysql.Enum{Name: "NANOSECOND", Value: 1}}, {"statement", mysql.Enum{Name: "NANOSECOND", Value: 1}}, {"transaction", mysql.Enum{Name: "NANOSECOND", Value: 1}}, } - lastLsn := atomic.AddUint64(ps.lsns[TableSetupTimers], uint64(len(records))) - - batch := pool.Get().(*leveldb.Batch) - defer func() { - batch.Reset() - pool.Put(batch) - }() - - for i, rec := range records { - lsn := lastLsn - uint64(len(records)) + uint64(i) - rawKey := []interface{}{uint64(lsn)} - key, err := codec.EncodeKey(nil, rawKey...) - if err != nil { - return errors.Trace(err) - } - val, err := codec.EncodeValue(nil, rec...) - if err != nil { - return errors.Trace(err) - } - batch.Put(key, val) - } - - err := ps.stores[TableSetupTimers].Write(batch, nil) - return errors.Trace(err) -} - -func (ps *perfSchema) initialize() (err error) { - ps.tables = make(map[string]*model.TableInfo) - ps.fields = make(map[string][]*field.ResultField) - ps.stores = make(map[string]*leveldb.DB) - ps.lsns = make(map[string]*uint64) - - for _, t := range PerfSchemaTables { - ps.stores[t], err = leveldb.Open(storage.NewMemStorage(), nil) - if err != nil { - return errors.Trace(err) - } - ps.lsns[t] = new(uint64) - *ps.lsns[t] = 0 - } - - ps.buildSetupActorsModel() - ps.buildSetupObjectsModel() - ps.buildSetupInstrumentsModel() - ps.buildSetupConsumersModel() - ps.buildSetupTimersModel() - ps.buildStmtsCurrentModel() - ps.buildStmtsHistoryModel() - ps.buildStmtsHistoryLongModel() - ps.buildPreparedStmtsInstancesModel() - ps.buildTransCurrentModel() - ps.buildTransHistoryModel() - ps.buildTransHistoryLongModel() - ps.buildStagesCurrentModel() - ps.buildStagesHistoryModel() - ps.buildStagesHistoryLongModel() - - err = ps.initSetupActorsRecords() - if err != nil { - return errors.Trace(err) - } - err = ps.initSetupObjectsRecords() - if err != nil { - return errors.Trace(err) - } - err = ps.initSetupInstrumentsRecords() - if err != nil { - return errors.Trace(err) - } - err = ps.initSetupConsumersRecords() - if err != nil { - return errors.Trace(err) - } - err = ps.initSetupTimersRecords() + err = ps.initRecords(TableSetupTimers, setupTimersRecords) if err != nil { return errors.Trace(err) }