From d1356f43071d2d886c62ea6c00094c668d35ed90 Mon Sep 17 00:00:00 2001 From: nieyy Date: Tue, 2 Feb 2016 15:25:51 +0800 Subject: [PATCH] performance_schema: code refactoring and remove old implementation --- perfschema/common.go | 125 +++++ perfschema/const.go | 379 ++++++++++++++ perfschema/perfschema.go | 19 - plan/plans/perf.go | 1015 -------------------------------------- plan/plans/perf_test.go | 65 --- rset/rsets/from.go | 4 - 6 files changed, 504 insertions(+), 1103 deletions(-) create mode 100644 perfschema/common.go create mode 100644 perfschema/const.go delete mode 100644 perfschema/perfschema.go delete mode 100644 plan/plans/perf.go delete mode 100644 plan/plans/perf_test.go diff --git a/perfschema/common.go b/perfschema/common.go new file mode 100644 index 0000000000..9f7d278d32 --- /dev/null +++ b/perfschema/common.go @@ -0,0 +1,125 @@ +// Copyright 2016 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package perfschema + +import ( + "strings" + + "github.com/juju/errors" + "github.com/pingcap/tidb/model" + "github.com/pingcap/tidb/mysql" + "github.com/pingcap/tidb/util/codec" + "github.com/pingcap/tidb/util/types" +) + +// castValues casts values based on columns type. +func castValues(rec []interface{}, cols []*model.ColumnInfo) (err error) { + for _, c := range cols { + rec[c.Offset], err = types.Convert(rec[c.Offset], &c.FieldType) + if err != nil { + return errors.Trace(err) + } + } + return nil +} + +// checkNotNull checks if nil value set to a column with NotNull flag is set. +func checkNotNull(c *model.ColumnInfo, data interface{}) error { + if mysql.HasNotNullFlag(c.Flag) && data == nil { + return errors.Errorf("Column %s can't be null.", c.Name) + } + return nil +} + +// checkNotNulls checks if row has nil value set to a set of columns with NotNull flag set. +func checkNotNulls(cols []*model.ColumnInfo, row []interface{}) error { + for _, c := range cols { + if err := checkNotNull(c, row[c.Offset]); err != nil { + return errors.Trace(err) + } + } + return nil +} + +func decodeValue(data []byte, cols []*model.ColumnInfo) ([]interface{}, error) { + values, err := codec.Decode(data) + if err != nil { + return nil, errors.Trace(err) + } + + if len(values) != len(cols) { + return nil, errors.Errorf("Column count does not match, expect %d, actual %d", len(cols), len(values)) + } + + var rvalues []interface{} + for i, col := range cols { + // TODO: support more types if we really need. + switch col.Tp { + case mysql.TypeString, mysql.TypeVarchar: + val := string(values[i].([]byte)) + rvalues = append(rvalues, val) + case mysql.TypeEnum: + val, err := mysql.ParseEnumValue(col.Elems, values[i].(uint64)) + if err != nil { + return nil, errors.Trace(err) + } + rvalues = append(rvalues, val.String()) + } + } + return rvalues, nil +} + +// findCol finds column in cols by name. +func findCol(cols []*model.ColumnInfo, name string) *model.ColumnInfo { + for _, col := range cols { + if strings.EqualFold(col.Name.O, name) { + return col + } + } + return nil +} + +// findCols finds columns in cols by names. +func findCols(cols []*model.ColumnInfo, names []string) ([]*model.ColumnInfo, error) { + var rcols []*model.ColumnInfo + for _, name := range names { + col := findCol(cols, name) + if col != nil { + rcols = append(rcols, col) + } else { + return nil, errors.Errorf("unknown column %s", name) + } + } + + return rcols, nil +} + +// getColDefaultValue gets default value of the column. +func getColDefaultValue(col *model.ColumnInfo) (interface{}, bool, error) { + // Check no default value flag. + if mysql.HasNoDefaultValueFlag(col.Flag) && col.Tp != mysql.TypeEnum { + return nil, false, errors.Errorf("Field '%s' doesn't have a default value", col.Name) + } + + // Check and get timestamp/datetime default value. + if col.Tp == mysql.TypeEnum { + // For enum type, if no default value and not null is set, + // the default value is the first element of the enum list + if col.DefaultValue == nil && mysql.HasNotNullFlag(col.Flag) { + return col.FieldType.Elems[0], true, nil + } + } + + return col.DefaultValue, true, nil +} diff --git a/perfschema/const.go b/perfschema/const.go new file mode 100644 index 0000000000..f82e4f8608 --- /dev/null +++ b/perfschema/const.go @@ -0,0 +1,379 @@ +// Copyright 2016 PingCAP, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// See the License for the specific language governing permissions and +// limitations under the License. + +package perfschema + +// Performance Schema Name. +const ( + Name = "PERFORMANCE_SCHEMA" +) + +// Definition order same as MySQL's reference manual, so don't bother to +// adjust according to alphabetical order. +const ( + TableSetupActors = "SETUP_ACTORS" + TableSetupObjects = "SETUP_OBJECTS" + TableSetupInstruments = "SETUP_INSTRUMENTS" + TableSetupConsumers = "SETUP_CONSUMERS" + TableSetupTimers = "SETUP_TIMERS" + TableStmtsCurrent = "EVENTS_STATEMENTS_CURRENT" + TableStmtsHistory = "EVENTS_STATEMENTS_HISTORY" + TableStmtsHistoryLong = "EVENTS_STATEMENTS_HISTORY_LONG" + TablePreparedStmtsInstances = "PREPARED_STATEMENTS_INSTANCES" + TableTransCurrent = "EVENTS_TRANSACTIONS_CURRENT" + TableTransHistory = "EVENTS_TRANSACTIONS_HISTORY" + TableTransHistoryLong = "EVENTS_TRANSACTIONS_HISTORY_LONG" + TableStagesCurrent = "EVENTS_STAGES_CURRENT" + TableStagesHistory = "EVENTS_STAGES_HISTORY" + TableStagesHistoryLong = "EVENTS_STAGES_HISTORY_LONG" +) + +// PerfSchemaTables is a shortcut to involve all table names. +var PerfSchemaTables = []string{ + TableSetupActors, + TableSetupObjects, + TableSetupInstruments, + TableSetupConsumers, + TableSetupTimers, + TableStmtsCurrent, + TableStmtsHistory, + TableStmtsHistoryLong, + TablePreparedStmtsInstances, + TableTransCurrent, + TableTransHistory, + TableTransHistoryLong, + TableStagesCurrent, + TableStagesHistory, + TableStagesHistoryLong, +} + +// ColumnSetupActors contains the column name definitions for table setup_actors, same as MySQL. +var ColumnSetupActors = []string{"HOST", "USER", "ROLE", "ENABLED", "HISTORY"} + +// ColumnSetupObjects contains the column name definitions for table setup_objects, same as MySQL. +var ColumnSetupObjects = []string{"OBJECT_TYPE", "OBJECT_SCHEMA", "OBJECT_NAME", "ENABLED", "TIMED"} + +// ColumnSetupInstruments contains the column name definitions for table setup_instruments, same as MySQL. +var ColumnSetupInstruments = []string{"NAMED", "ENABLED", "TIMED"} + +// ColumnSetupConsumers contains the column name definitions for table setup_consumers, same as MySQL. +var ColumnSetupConsumers = []string{"NAMED", "ENABLED"} + +// ColumnSetupTimers contains the column name definitions for table setup_timers, same as MySQL. +var ColumnSetupTimers = []string{"NAME", "TIMER_NAME"} + +// ColumnStmtsCurrent contains the column name definitions for table events_statements_current, same as MySQL. +var ColumnStmtsCurrent = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "LOCK_TIME", + "SQL_TEXT", + "DIGEST", + "DIGEST_TEXT", + "CURRENT_SCHEMA", + "OBJECT_TYPE", + "OBJECT_SCHEMA", + "OBJECT_NAME", + "OBJECT_INSTANCE_BEGIN", + "MYSQL_ERRNO", + "RETURNED_SQLSTATE", + "MESSAGE_TEXT", + "ERRORS", + "WARNINGS", + "ROWS_AFFECTED", + "ROWS_SENT", + "ROWS_EXAMINED", + "CREATED_TMP_DISK_TABLES", + "CREATED_TMP_TABLES", + "SELECT_FULL_JOIN", + "SELECT_FULL_RANGE_JOIN", + "SELECT_RANGE", + "SELECT_RANGE_CHECK", + "SELECT_SCAN", + "SORT_MERGE_PASSES", + "SORT_RANGE", + "SORT_ROWS", + "SORT_SCAN", + "NO_INDEX_USED", + "NO_GOOD_INDEX_USED", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", + "NESTING_EVENT_LEVEL", +} + +// ColumnStmtsHistory contains the column name definitions for table events_statements_history, same as MySQL. +var ColumnStmtsHistory = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "LOCK_TIME", + "SQL_TEXT", + "DIGEST", + "DIGEST_TEXT", + "CURRENT_SCHEMA", + "OBJECT_TYPE", + "OBJECT_SCHEMA", + "OBJECT_NAME", + "OBJECT_INSTANCE_BEGIN", + "MYSQL_ERRNO", + "RETURNED_SQLSTATE", + "MESSAGE_TEXT", + "ERRORS", + "WARNINGS", + "ROWS_AFFECTED", + "ROWS_SENT", + "ROWS_EXAMINED", + "CREATED_TMP_DISK_TABLES", + "CREATED_TMP_TABLES", + "SELECT_FULL_JOIN", + "SELECT_FULL_RANGE_JOIN", + "SELECT_RANGE", + "SELECT_RANGE_CHECK", + "SELECT_SCAN", + "SORT_MERGE_PASSES", + "SORT_RANGE", + "SORT_ROWS", + "SORT_SCAN", + "NO_INDEX_USED", + "NO_GOOD_INDEX_USED", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", + "NESTING_EVENT_LEVEL", +} + +// ColumnStmtsHistoryLong contains the column name definitions for table events_statements_history_long, same as MySQL. +var ColumnStmtsHistoryLong = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "LOCK_TIME", + "SQL_TEXT", + "DIGEST", + "DIGEST_TEXT", + "CURRENT_SCHEMA", + "OBJECT_TYPE", + "OBJECT_SCHEMA", + "OBJECT_NAME", + "OBJECT_INSTANCE_BEGIN", + "MYSQL_ERRNO", + "RETURNED_SQLSTATE", + "MESSAGE_TEXT", + "ERRORS", + "WARNINGS", + "ROWS_AFFECTED", + "ROWS_SENT", + "ROWS_EXAMINED", + "CREATED_TMP_DISK_TABLES", + "CREATED_TMP_TABLES", + "SELECT_FULL_JOIN", + "SELECT_FULL_RANGE_JOIN", + "SELECT_RANGE", + "SELECT_RANGE_CHECK", + "SELECT_SCAN", + "SORT_MERGE_PASSES", + "SORT_RANGE", + "SORT_ROWS", + "SORT_SCAN", + "NO_INDEX_USED", + "NO_GOOD_INDEX_USED", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", + "NESTING_EVENT_LEVEL", +} + +// ColumnPreparedStmtsInstances contains the column name definitions for table prepared_statements_instances, same as MySQL. +var ColumnPreparedStmtsInstances = []string{ + "OBJECT_INSTANCE_BEGIN", + "STATEMENT_ID", + "STATEMENT_NAME", + "SQL_TEXT", + "OWNER_THREAD_ID", + "OWNER_EVENT_ID", + "OWNER_OBJECT_TYPE", + "OWNER_OBJECT_SCHEMA", + "OWNER_OBJECT_NAME", + "TIMER_PREPARE", + "COUNT_REPREPARE", + "COUNT_EXECUTE", + "SUM_TIMER_EXECUTE", + "MIN_TIMER_EXECUTE", + "AVG_TIMER_EXECUTE", + "MAX_TIMER_EXECUTE", + "SUM_LOCK_TIME", + "SUM_ERRORS", + "SUM_WARNINGS", + "SUM_ROWS_AFFECTED", + "SUM_ROWS_SENT", + "SUM_ROWS_EXAMINED", + "SUM_CREATED_TMP_DISK_TABLES", + "SUM_CREATED_TMP_TABLES", + "SUM_SELECT_FULL_JOIN", + "SUM_SELECT_FULL_RANGE_JOIN", + "SUM_SELECT_RANGE", + "SUM_SELECT_RANGE_CHECK", + "SUM_SELECT_SCAN", + "SUM_SORT_MERGE_PASSES", + "SUM_SORT_RANGE", + "SUM_SORT_ROWS", + "SUM_SORT_SCAN", + "SUM_NO_INDEX_USED", + "SUM_NO_GOOD_INDEX_USED", +} + +// ColumnTransCurrent contains the column name definitions for table events_transactions_current, same as MySQL. +var ColumnTransCurrent = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "STATE", + "TRX_ID", + "GTID", + "XID_FORMAT_ID", + "XID_GTRID", + "XID_BQUAL", + "XA_STATE", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "ACCESS_MODE", + "ISOLATION_LEVEL", + "AUTOCOMMIT", + "NUMBER_OF_SAVEPOINTS", + "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", + "NUMBER_OF_RELEASE_SAVEPOINT", + "OBJECT_INSTANCE_BEGIN", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", +} + +// ColumnTransHistory contains the column name definitions for table events_transactions_history, same as MySQL. +var ColumnTransHistory = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "STATE", + "TRX_ID", + "GTID", + "XID_FORMAT_ID", + "XID_GTRID", + "XID_BQUAL", + "XA_STATE", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "ACCESS_MODE", + "ISOLATION_LEVEL", + "AUTOCOMMIT", + "NUMBER_OF_SAVEPOINTS", + "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", + "NUMBER_OF_RELEASE_SAVEPOINT", + "OBJECT_INSTANCE_BEGIN", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", +} + +// ColumnTransHistoryLong contains the column name definitions for table events_transactions_history_long, same as MySQL. +var ColumnTransHistoryLong = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "STATE", + "TRX_ID", + "GTID", + "XID_FORMAT_ID", + "XID_GTRID", + "XID_BQUAL", + "XA_STATE", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "ACCESS_MODE", + "ISOLATION_LEVEL", + "AUTOCOMMIT", + "NUMBER_OF_SAVEPOINTS", + "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", + "NUMBER_OF_RELEASE_SAVEPOINT", + "OBJECT_INSTANCE_BEGIN", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", +} + +// ColumnStagesCurrent contains the column name definitions for table events_stages_current, same as MySQL. +var ColumnStagesCurrent = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "WORK_COMPLETED", + "WORK_ESTIMATED", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", +} + +// ColumnStagesHistory contains the column name definitions for table events_stages_history, same as MySQL. +var ColumnStagesHistory = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "WORK_COMPLETED", + "WORK_ESTIMATED", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", +} + +// ColumnStagesHistoryLong contains the column name definitions for table events_stages_history_long, same as MySQL. +var ColumnStagesHistoryLong = []string{ + "THREAD_ID", + "EVENT_ID", + "END_EVENT_ID", + "EVENT_NAME", + "SOURCE", + "TIMER_START", + "TIMER_END", + "TIMER_WAIT", + "WORK_COMPLETED", + "WORK_ESTIMATED", + "NESTING_EVENT_ID", + "NESTING_EVENT_TYPE", +} diff --git a/perfschema/perfschema.go b/perfschema/perfschema.go deleted file mode 100644 index 2412cb8845..0000000000 --- a/perfschema/perfschema.go +++ /dev/null @@ -1,19 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package perfschema - -// Performance Schema Name. -const ( - Name = "PERFORMANCE_SCHEMA" -) diff --git a/plan/plans/perf.go b/plan/plans/perf.go deleted file mode 100644 index e76d3460bb..0000000000 --- a/plan/plans/perf.go +++ /dev/null @@ -1,1015 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plans - -import ( - "strings" - - "github.com/juju/errors" - "github.com/pingcap/tidb/column" - "github.com/pingcap/tidb/context" - "github.com/pingcap/tidb/expression" - "github.com/pingcap/tidb/field" - "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/mysql" - "github.com/pingcap/tidb/perfschema" - "github.com/pingcap/tidb/plan" - "github.com/pingcap/tidb/util/charset" - "github.com/pingcap/tidb/util/format" - "github.com/pingcap/tidb/util/types" -) - -var _ = (*PerfSchemaPlan)(nil) - -// PerfSchemaPlan handles performance_schema query, simulates the behavior of -// MySQL. -type PerfSchemaPlan struct { - TableName string - rows []*plan.Row - cursor int -} - -var ( - // Definition order same as MySQL's reference manual, so don't bother to - // adjust according to alphabetical order. - setupActorsFields []*field.ResultField - setupObjectsFields []*field.ResultField - setupInstrumentsFields []*field.ResultField - setupConsumersFields []*field.ResultField - setupTimersFields []*field.ResultField - stmtsCurrentFields []*field.ResultField - stmtsHistoryFields []*field.ResultField - stmtsHistoryLongFields []*field.ResultField - preparedStmtsInstancesFields []*field.ResultField - transCurrentFields []*field.ResultField - transHistoryFields []*field.ResultField - transHistoryLongFields []*field.ResultField - stagesCurrentFields []*field.ResultField - stagesHistoryFields []*field.ResultField - stagesHistoryLongFields []*field.ResultField - setupActorsRecords [][]interface{} - setupObjectsRecords [][]interface{} - setupInstrumentsRecords [][]interface{} - setupConsumersRecords [][]interface{} - setupTimersRecords [][]interface{} -) - -const ( - // Definition order same as MySQL's reference manual, so don't bother to - // adjust according to alphabetical order. - tableSetupActors = "SETUP_ACTORS" - tableSetupObjects = "SETUP_OBJECTS" - tableSetupInstruments = "SETUP_INSTRUMENTS" - tableSetupConsumers = "SETUP_CONSUMERS" - tableSetupTimers = "SETUP_TIMERS" - tableStmtsCurrent = "EVENTS_STATEMENTS_CURRENT" - tableStmtsHistory = "EVENTS_STATEMENTS_HISTORY" - tableStmtsHistoryLong = "EVENTS_STATEMENTS_HISTORY_LONG" - tablePrepStmtsInstances = "PREPARED_STATEMENTS_INSTANCES" - tableTransCurrent = "EVENTS_TRANSACTIONS_CURRENT" - tableTransHistory = "EVENTS_TRANSACTIONS_HISTORY" - tableTransHistoryLong = "EVENTS_TRANSACTIONS_HISTORY_LONG" - tableStagesCurrent = "EVENTS_STAGES_CURRENT" - tableStagesHistory = "EVENTS_STAGES_HISTORY" - tableStagesHistoryLong = "EVENTS_STAGES_HISTORY_LONG" -) - -// NewPerfSchemaPlan returns new PerfSchemaPlan instance, and checks if the -// given table name is valid. -func NewPerfSchemaPlan(tableName string) (isp *PerfSchemaPlan, err error) { - switch strings.ToUpper(tableName) { - case tableSetupActors: - case tableSetupObjects: - case tableSetupInstruments: - case tableSetupConsumers: - case tableSetupTimers: - case tableStmtsCurrent: - case tableStmtsHistory: - case tableStmtsHistoryLong: - case tablePrepStmtsInstances: - case tableTransCurrent: - case tableTransHistory: - case tableTransHistoryLong: - case tableStagesCurrent: - case tableStagesHistory: - case tableStagesHistoryLong: - default: - return nil, errors.Errorf("table PERFORMANCE_SCHEMA.%s does not exist", tableName) - } - isp = &PerfSchemaPlan{ - TableName: strings.ToUpper(tableName), - } - return -} - -// 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 buildResultFieldsForSetupActors() (rfs []*field.ResultField) { - tbName := tableSetupActors - rfs = append(rfs, buildUsualResultField(tbName, "HOST", mysql.TypeString, 60, mysql.NotNullFlag, "%")) - rfs = append(rfs, buildUsualResultField(tbName, "USER", mysql.TypeString, 32, mysql.NotNullFlag, "%")) - rfs = append(rfs, buildUsualResultField(tbName, "ROLE", mysql.TypeString, 16, mysql.NotNullFlag, "%")) - rfs = append(rfs, buildEnumResultField(tbName, "ENABLED", []string{"YES", "NO"}, mysql.NotNullFlag, "YES")) - rfs = append(rfs, buildEnumResultField(tbName, "HISTORY", []string{"YES", "NO"}, mysql.NotNullFlag, "YES")) - return rfs -} - -// 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 buildResultFieldsForSetupObjects() (rfs []*field.ResultField) { - tbName := tableSetupObjects - rfs = append(rfs, buildEnumResultField(tbName, "OBJECT_TYPE", []string{"EVENT", "FUNCTION", "TABLE"}, mysql.NotNullFlag, "TABLE")) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_SCHEMA", mysql.TypeVarchar, 64, 0, "%")) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_NAME", mysql.TypeVarchar, 64, mysql.NotNullFlag, "%")) - rfs = append(rfs, buildEnumResultField(tbName, "ENABLED", []string{"YES", "NO"}, mysql.NotNullFlag, "YES")) - rfs = append(rfs, buildEnumResultField(tbName, "TIMED", []string{"YES", "NO"}, mysql.NotNullFlag, "YES")) - return rfs -} - -// 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 buildResultFieldsForSetupInstruments() (rfs []*field.ResultField) { - tbName := tableSetupInstruments - rfs = append(rfs, buildUsualResultField(tbName, "NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "ENABLED", []string{"YES", "NO"}, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "TIMED", []string{"YES", "NO"}, mysql.NotNullFlag, nil)) - return rfs -} - -// CREATE TABLE if not exists performance_schema.setup_consumers ( -// NAME VARCHAR(64) NOT NULL, -// ENABLED ENUM('YES','NO') NOT NULL); -func buildResultFieldsForSetupConsumers() (rfs []*field.ResultField) { - tbName := tableSetupConsumers - rfs = append(rfs, buildUsualResultField(tbName, "NAME", mysql.TypeVarchar, 64, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "ENABLED", []string{"YES", "NO"}, mysql.NotNullFlag, nil)) - return rfs -} - -// CREATE TABLE if not exists performance_schema.setup_timers ( -// NAME VARCHAR(64) NOT NULL, -// TIMER_NAME ENUM('NANOSECOND','MICROSECOND','MILLISECOND') NOT NULL); -func buildResultFieldsForSetupTimers() (rfs []*field.ResultField) { - tbName := tableSetupTimers - rfs = append(rfs, buildUsualResultField(tbName, "NAME", mysql.TypeVarchar, 64, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "TIMER_NAME", []string{"NANOSECOND", "MICROSECOND", "MILLISECOND"}, mysql.NotNullFlag, nil)) - return rfs -} - -// 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 buildResultFieldsForStmtsCurrent() (rfs []*field.ResultField) { - tbName := tableStmtsCurrent - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "LOCK_TIME", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SQL_TEXT", mysql.TypeLongBlob, -1, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "DIGEST", mysql.TypeVarchar, 32, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "DIGEST_TEXT", mysql.TypeLongBlob, -1, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CURRENT_SCHEMA", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_TYPE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_SCHEMA", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_NAME", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_INSTANCE_BEGIN", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MYSQL_ERRNO", mysql.TypeLong, 11, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "RETURNED_SQLSTATE", mysql.TypeVarchar, 5, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MESSAGE_TEXT", mysql.TypeVarchar, 128, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ERRORS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WARNINGS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_AFFECTED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_SENT", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_EXAMINED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CREATED_TMP_DISK_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CREATED_TMP_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_FULL_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_FULL_RANGE_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_RANGE_CHECK", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_MERGE_PASSES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_ROWS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NO_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NO_GOOD_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_LEVEL", mysql.TypeLong, 11, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForStmtsHistory() (rfs []*field.ResultField) { - tbName := tableStmtsHistory - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "LOCK_TIME", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SQL_TEXT", mysql.TypeLongBlob, -1, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "DIGEST", mysql.TypeVarchar, 32, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "DIGEST_TEXT", mysql.TypeLongBlob, -1, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CURRENT_SCHEMA", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_TYPE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_SCHEMA", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_NAME", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_INSTANCE_BEGIN", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MYSQL_ERRNO", mysql.TypeLong, 11, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "RETURNED_SQLSTATE", mysql.TypeVarchar, 5, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MESSAGE_TEXT", mysql.TypeVarchar, 128, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ERRORS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WARNINGS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_AFFECTED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_SENT", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_EXAMINED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CREATED_TMP_DISK_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CREATED_TMP_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_FULL_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_FULL_RANGE_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_RANGE_CHECK", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_MERGE_PASSES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_ROWS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NO_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NO_GOOD_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_LEVEL", mysql.TypeLong, 11, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForStmtsHistoryLong() (rfs []*field.ResultField) { - tbName := tableStmtsHistoryLong - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "LOCK_TIME", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SQL_TEXT", mysql.TypeLongBlob, -1, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "DIGEST", mysql.TypeVarchar, 32, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "DIGEST_TEXT", mysql.TypeLongBlob, -1, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CURRENT_SCHEMA", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_TYPE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_SCHEMA", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_NAME", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_INSTANCE_BEGIN", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MYSQL_ERRNO", mysql.TypeLong, 11, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "RETURNED_SQLSTATE", mysql.TypeVarchar, 5, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MESSAGE_TEXT", mysql.TypeVarchar, 128, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ERRORS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WARNINGS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_AFFECTED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_SENT", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ROWS_EXAMINED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CREATED_TMP_DISK_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "CREATED_TMP_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_FULL_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_FULL_RANGE_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_RANGE_CHECK", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SELECT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_MERGE_PASSES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_ROWS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SORT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NO_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NO_GOOD_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_LEVEL", mysql.TypeLong, 11, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForPreparedStmtsInstances() (rfs []*field.ResultField) { - tbName := tablePrepStmtsInstances - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_INSTANCE_BEGIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "STATEMENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "STATEMENT_NAME", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SQL_TEXT", mysql.TypeLongBlob, -1, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OWNER_THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OWNER_EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "ONWER_OBJECT_TYPE", []string{"EVENT", "FUNCTION", "TABLE"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OWNER_OBJECT_SCHEMA", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OWNER_OBJECT_NAME", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_PREPARE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "COUNT_REPREPARE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "COUNT_EXECUTE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_TIMER_EXECUTE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MIN_TIMER_EXECUTE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "AVG_TIMER_EXECUTE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "MAX_TIMER_EXECUTE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_LOCK_TIME", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_ERRORS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_WARNINGS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_ROWS_AFFECTED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_ROWS_SENT", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_ROWS_EXAMINED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_CREATED_TMP_DISK_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_CREATED_TMP_TABLES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SELECT_FULL_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SELECT_FULL_RANGE_JOIN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SELECT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SELECT_RANGE_CHECK", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SELECT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SORT_MERGE_PASSES", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SORT_RANGE", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SORT_ROWS", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_SORT_SCAN", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_NO_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SUM_NO_GOOD_INDEX_USED", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - return rfs -} - -// 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 buildResultFieldsForTransCurrent() (rfs []*field.ResultField) { - tbName := tableTransCurrent - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "STATE", []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TRX_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "GTID", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_FORMAT_ID", mysql.TypeLong, 11, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_GTRID", mysql.TypeVarchar, 130, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_BQUAL", mysql.TypeVarchar, 130, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XA_STATE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "ACCESS_MODE", []string{"READ ONLY", "READ WRITE"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ISOLATION_LEVEL", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "AUTOCOMMIT", []string{"YES", "NO"}, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_SAVEPOINTS", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_RELEASE_SAVEPOINT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_INSTANCE_BEGIN", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForTransHistory() (rfs []*field.ResultField) { - tbName := tableTransHistory - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "STATE", []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TRX_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "GTID", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_FORMAT_ID", mysql.TypeLong, 11, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_GTRID", mysql.TypeVarchar, 130, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_BQUAL", mysql.TypeVarchar, 130, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XA_STATE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "ACCESS_MODE", []string{"READ ONLY", "READ WRITE"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ISOLATION_LEVEL", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "AUTOCOMMIT", []string{"YES", "NO"}, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_SAVEPOINTS", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_RELEASE_SAVEPOINT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_INSTANCE_BEGIN", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForTransHistoryLong() (rfs []*field.ResultField) { - tbName := tableTransHistoryLong - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "STATE", []string{"ACTIVE", "COMMITTED", "ROLLED BACK"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TRX_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "GTID", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_FORMAT_ID", mysql.TypeLong, 11, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_GTRID", mysql.TypeVarchar, 130, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XID_BQUAL", mysql.TypeVarchar, 130, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "XA_STATE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "ACCESS_MODE", []string{"READ ONLY", "READ WRITE"}, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "ISOLATION_LEVEL", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "AUTOCOMMIT", []string{"YES", "NO"}, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_SAVEPOINTS", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_ROLLBACK_TO_SAVEPOINT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NUMBER_OF_RELEASE_SAVEPOINT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "OBJECT_INSTANCE_BEGIN", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForStagesCurrent() (rfs []*field.ResultField) { - tbName := tableStagesCurrent - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WORK_COMPLETED", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WORK_ESTIMATED", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForStagesHistory() (rfs []*field.ResultField) { - tbName := tableStagesHistory - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WORK_COMPLETED", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WORK_ESTIMATED", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - return rfs -} - -// 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 buildResultFieldsForStagesHistoryLong() (rfs []*field.ResultField) { - tbName := tableStagesHistoryLong - rfs = append(rfs, buildUsualResultField(tbName, "THREAD_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_ID", mysql.TypeLonglong, 20, mysql.NotNullFlag|mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "END_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "EVENT_NAME", mysql.TypeVarchar, 128, mysql.NotNullFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "SOURCE", mysql.TypeVarchar, 64, 0, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_START", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_END", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "TIMER_WAIT", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WORK_COMPLETED", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "WORK_ESTIMATED", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildUsualResultField(tbName, "NESTING_EVENT_ID", mysql.TypeLonglong, 20, mysql.UnsignedFlag, nil)) - rfs = append(rfs, buildEnumResultField(tbName, "NESTING_EVENT_TYPE", []string{"TRANSACTION", "STATEMENT", "STAGE"}, 0, nil)) - return rfs -} - -func buildSetupActorsRecords() (records [][]interface{}) { - records = append(records, - []interface{}{"%", "%", "%", "Yes", "Yes"}, - ) - return records -} - -func buildSetupObjectsRecords() (records [][]interface{}) { - records = append(records, - []interface{}{"EVENT", "mysql", "%", "NO", "NO"}, - []interface{}{"EVENT", "performance_schema", "%", "NO", "NO"}, - []interface{}{"EVENT", "information_schema", "%", "NO", "NO"}, - []interface{}{"EVENT", "%", "%", "YES", "YES"}, - []interface{}{"FUNCTION", "mysql", "%", "NO", "NO"}, - []interface{}{"FUNCTION", "performance_schema", "%", "NO", "NO"}, - []interface{}{"FUNCTION", "information_schema", "%", "NO", "NO"}, - []interface{}{"FUNCTION", "%", "%", "YES", "YES"}, - []interface{}{"TABLE", "mysql", "%", "NO", "NO"}, - []interface{}{"TABLE", "performance_schema", "%", "NO", "NO"}, - []interface{}{"TABLE", "information_schema", "%", "NO", "NO"}, - []interface{}{"TABLE", "%", "%", "YES", "YES"}, - ) - return records -} - -func buildSetupInstrumentsRecords() (records [][]interface{}) { - // TODO: add instrumentation points later - return records -} - -func buildSetupConsumersRecords() (records [][]interface{}) { - records = append(records, - []interface{}{"events_stages_current", "NO"}, - []interface{}{"events_stages_history", "NO"}, - []interface{}{"events_stages_history_long", "NO"}, - []interface{}{"events_statements_current", "YES"}, - []interface{}{"events_statements_history", "YES"}, - []interface{}{"events_statements_history_long", "NO"}, - []interface{}{"events_transactions_current", "YES"}, - []interface{}{"events_transactions_history", "YES"}, - []interface{}{"events_transactions_history_long", "YES"}, - []interface{}{"global_instrumentation", "YES"}, - []interface{}{"thread_instrumentation", "YES"}, - []interface{}{"statements_digest", "YES"}, - ) - return records -} - -func buildSetupTimersRecords() (records [][]interface{}) { - records = append(records, - []interface{}{"stage", "NANOSECOND"}, - []interface{}{"statement", "NANOSECOND"}, - []interface{}{"transaction", "NANOSECOND"}, - ) - return records -} - -// Explain implements plan.Plan Explain interface. -func (isp *PerfSchemaPlan) Explain(w format.Formatter) {} - -// Filter implements plan.Plan Filter interface. -func (isp *PerfSchemaPlan) Filter(ctx context.Context, expr expression.Expression) (p plan.Plan, filtered bool, err error) { - return isp, false, nil -} - -// GetFields implements plan.Plan GetFields interface, simulates MySQL's output. -func (isp *PerfSchemaPlan) GetFields() []*field.ResultField { - switch isp.TableName { - case tableSetupActors: - return setupActorsFields - case tableSetupObjects: - return setupObjectsFields - case tableSetupInstruments: - return setupInstrumentsFields - case tableSetupConsumers: - return setupConsumersFields - case tableSetupTimers: - return setupTimersFields - case tableStmtsCurrent: - return stmtsCurrentFields - case tableStmtsHistory: - return stmtsHistoryFields - case tableStmtsHistoryLong: - return stmtsHistoryLongFields - case tablePrepStmtsInstances: - return preparedStmtsInstancesFields - case tableTransCurrent: - return transCurrentFields - case tableTransHistory: - return transHistoryFields - case tableTransHistoryLong: - return transHistoryLongFields - case tableStagesCurrent: - return stagesCurrentFields - case tableStagesHistory: - return stagesHistoryFields - case tableStagesHistoryLong: - return stagesHistoryLongFields - } - return nil -} - -func buildUsualResultField(tableName, name string, tp byte, size int, flag uint, def interface{}) *field.ResultField { - mCharset := charset.CharsetBin - mCollation := charset.CharsetBin - if tp == mysql.TypeString || tp == mysql.TypeVarchar || tp == mysql.TypeBlob || tp == mysql.TypeLongBlob { - mCharset = mysql.DefaultCharset - mCollation = mysql.DefaultCollationName - } - // TODO: does TypeLongBlob need size? - fieldType := types.FieldType{ - Charset: mCharset, - Collate: mCollation, - Tp: tp, - Flen: size, - Flag: uint(flag), - } - colInfo := model.ColumnInfo{ - Name: model.NewCIStr(name), - FieldType: fieldType, - DefaultValue: def, - } - field := &field.ResultField{ - Col: column.Col{ColumnInfo: colInfo}, - DBName: perfschema.Name, - TableName: tableName, - Name: colInfo.Name.O, - } - return field -} - -func buildEnumResultField(tableName, name string, elems []string, flag uint, def interface{}) *field.ResultField { - mCharset := charset.CharsetBin - mCollation := charset.CharsetBin - fieldType := types.FieldType{ - Charset: mCharset, - Collate: mCollation, - Tp: mysql.TypeEnum, - Flag: uint(flag), - Elems: elems, - } - colInfo := model.ColumnInfo{ - Name: model.NewCIStr(name), - FieldType: fieldType, - DefaultValue: def, - } - field := &field.ResultField{ - Col: column.Col{ColumnInfo: colInfo}, - DBName: perfschema.Name, - TableName: tableName, - Name: colInfo.Name.O, - } - return field -} - -// Next implements plan.Plan Next interface. -func (isp *PerfSchemaPlan) Next(ctx context.Context) (row *plan.Row, err error) { - if isp.rows == nil { - isp.fetchAll(ctx) - } - if isp.cursor == len(isp.rows) { - return - } - row = isp.rows[isp.cursor] - isp.cursor++ - return -} - -func (isp *PerfSchemaPlan) fetchAll(ctx context.Context) { - // TODO: need support INSERT/DELETE/UPDATE operations - switch isp.TableName { - case tableSetupActors: - isp.fetchSetupActors() - case tableSetupObjects: - isp.fetchSetupObjects() - case tableSetupInstruments: - isp.fetchSetupInstruments() - case tableSetupConsumers: - isp.fetchSetupConsumers() - case tableSetupTimers: - isp.fetchSetupTimers() - } -} - -func (isp *PerfSchemaPlan) fetchSetupActors() { - for _, record := range setupActorsRecords { - isp.rows = append(isp.rows, &plan.Row{Data: record}) - } -} - -func (isp *PerfSchemaPlan) fetchSetupObjects() { - for _, record := range setupObjectsRecords { - isp.rows = append(isp.rows, &plan.Row{Data: record}) - } -} - -func (isp *PerfSchemaPlan) fetchSetupInstruments() { - for _, record := range setupInstrumentsRecords { - isp.rows = append(isp.rows, &plan.Row{Data: record}) - } -} - -func (isp *PerfSchemaPlan) fetchSetupConsumers() { - for _, record := range setupConsumersRecords { - isp.rows = append(isp.rows, &plan.Row{Data: record}) - } -} - -func (isp *PerfSchemaPlan) fetchSetupTimers() { - for _, record := range setupTimersRecords { - isp.rows = append(isp.rows, &plan.Row{Data: record}) - } -} - -// Close implements plan.Plan Close interface. -func (isp *PerfSchemaPlan) Close() error { - isp.rows = nil - isp.cursor = 0 - return nil -} - -func init() { - setupActorsFields = buildResultFieldsForSetupActors() - setupObjectsFields = buildResultFieldsForSetupObjects() - setupInstrumentsFields = buildResultFieldsForSetupInstruments() - setupConsumersFields = buildResultFieldsForSetupConsumers() - setupTimersFields = buildResultFieldsForSetupTimers() - stmtsCurrentFields = buildResultFieldsForStmtsCurrent() - stmtsHistoryFields = buildResultFieldsForStmtsHistory() - stmtsHistoryLongFields = buildResultFieldsForStmtsHistoryLong() - preparedStmtsInstancesFields = buildResultFieldsForPreparedStmtsInstances() - transCurrentFields = buildResultFieldsForTransCurrent() - transHistoryFields = buildResultFieldsForTransHistory() - transHistoryLongFields = buildResultFieldsForTransHistoryLong() - stagesCurrentFields = buildResultFieldsForStagesCurrent() - stagesHistoryFields = buildResultFieldsForStagesHistory() - stagesHistoryLongFields = buildResultFieldsForStagesHistoryLong() - - setupActorsRecords = buildSetupActorsRecords() - setupObjectsRecords = buildSetupObjectsRecords() - setupInstrumentsRecords = buildSetupInstrumentsRecords() - setupConsumersRecords = buildSetupConsumersRecords() - setupTimersRecords = buildSetupTimersRecords() -} diff --git a/plan/plans/perf_test.go b/plan/plans/perf_test.go deleted file mode 100644 index 3bccc1893e..0000000000 --- a/plan/plans/perf_test.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright 2016 PingCAP, Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// See the License for the specific language governing permissions and -// limitations under the License. - -package plans_test - -import ( - "database/sql" - - . "github.com/pingcap/check" - "github.com/pingcap/tidb" -) - -type testPerfSchemaSuit struct { - vars map[string]interface{} -} - -var _ = Suite(&testPerfSchemaSuit{ - vars: make(map[string]interface{}), -}) - -func (p *testPerfSchemaSuit) TestPerfSchema(c *C) { - testDB, err := sql.Open(tidb.DriverName, tidb.EngineGoLevelDBMemory+"/test/test") - c.Assert(err, IsNil) - cnt := mustQuery(c, testDB, "select * from performance_schema.setup_actors") - c.Assert(cnt, Equals, 1) - cnt = mustQuery(c, testDB, "select * from performance_schema.setup_objects") - c.Assert(cnt, Equals, 12) - // Note: so far, there has no instrumentation point yet - cnt = mustQuery(c, testDB, "select * from performance_schema.setup_instruments") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.setup_consumers") - c.Assert(cnt, Equals, 12) - cnt = mustQuery(c, testDB, "select * from performance_schema.setup_timers") - c.Assert(cnt, Equals, 3) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_statements_current") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_statements_history") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_statements_history_long") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.prepared_statements_instances") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_transactions_current") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_transactions_history") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_transactions_history_long") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_stages_current") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_stages_history") - c.Assert(cnt, Equals, 0) - cnt = mustQuery(c, testDB, "select * from performance_schema.events_stages_history_long") - c.Assert(cnt, Equals, 0) -} diff --git a/rset/rsets/from.go b/rset/rsets/from.go index afa870c53c..337cdc1617 100644 --- a/rset/rsets/from.go +++ b/rset/rsets/from.go @@ -26,7 +26,6 @@ import ( "github.com/pingcap/tidb/field" "github.com/pingcap/tidb/infoschema" "github.com/pingcap/tidb/model" - "github.com/pingcap/tidb/perfschema" "github.com/pingcap/tidb/plan" "github.com/pingcap/tidb/plan/plans" "github.com/pingcap/tidb/sessionctx" @@ -49,9 +48,6 @@ func (r *TableRset) Plan(ctx context.Context) (plan.Plan, error) { if strings.EqualFold(r.Schema, infoschema.Name) { return plans.NewInfoSchemaPlan(r.Name) } - if strings.EqualFold(r.Schema, perfschema.Name) { - return plans.NewPerfSchemaPlan(r.Name) - } is := sessionctx.GetDomain(ctx).InfoSchema() t, err := is.TableByName(model.NewCIStr(r.Schema), model.NewCIStr(r.Name)) if err != nil {