github.com/matrixorigin/matrixone@v0.7.0/pkg/util/sysview/sysview.go (about)

     1  // Copyright 2022 Matrix Origin
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package sysview
    16  
    17  import (
    18  	"context"
    19  	"fmt"
    20  	"time"
    21  
    22  	"github.com/matrixorigin/matrixone/pkg/logutil"
    23  	ie "github.com/matrixorigin/matrixone/pkg/util/internalExecutor"
    24  	"github.com/matrixorigin/matrixone/pkg/util/trace/impl/motrace"
    25  )
    26  
    27  const (
    28  	MysqlDBConst       = "mysql"
    29  	InformationDBConst = "information_schema"
    30  	sqlCreateDBConst   = "create database if not exists "
    31  	sqlUseDbConst      = "use "
    32  )
    33  
    34  var (
    35  	InitMysqlSysTables = []string{
    36  		`CREATE TABLE IF NOT EXISTS user (
    37  			Host char(255)  NOT NULL DEFAULT '',
    38  			User char(32)  NOT NULL DEFAULT '',
    39  			Select_priv varchar(10) NOT NULL DEFAULT 'N',
    40  			Insert_priv varchar(10) NOT NULL DEFAULT 'N',
    41  			Update_priv varchar(10) NOT NULL DEFAULT 'N',
    42  			Delete_priv varchar(10) NOT NULL DEFAULT 'N',
    43  			Create_priv varchar(10) NOT NULL DEFAULT 'N',
    44  			Drop_priv varchar(10)  NOT NULL DEFAULT 'N',
    45  			Reload_priv varchar(10)  NOT NULL DEFAULT 'N',
    46  			Shutdown_priv varchar(10)  NOT NULL DEFAULT 'N',
    47  			Process_priv varchar(10)  NOT NULL DEFAULT 'N',
    48  			File_priv varchar(10)  NOT NULL DEFAULT 'N',
    49  			Grant_priv varchar(10)  NOT NULL DEFAULT 'N',
    50  			References_priv varchar(10)  NOT NULL DEFAULT 'N',
    51  			Index_priv varchar(10)  NOT NULL DEFAULT 'N',
    52  			Alter_priv varchar(10)  NOT NULL DEFAULT 'N',
    53  			Show_db_priv varchar(10)  NOT NULL DEFAULT 'N',
    54  			Super_priv varchar(10)  NOT NULL DEFAULT 'N',
    55  			Create_tmp_table_priv varchar(10)  NOT NULL DEFAULT 'N',
    56  			Lock_tables_priv varchar(10)  NOT NULL DEFAULT 'N',
    57  			Execute_priv varchar(10)  NOT NULL DEFAULT 'N',
    58  			Repl_slave_priv varchar(10)  NOT NULL DEFAULT 'N',
    59  			Repl_client_priv varchar(10)  NOT NULL DEFAULT 'N',
    60  			Create_view_priv varchar(10)  NOT NULL DEFAULT 'N',
    61  			Show_view_priv varchar(10)  NOT NULL DEFAULT 'N',
    62  			Create_routine_priv varchar(10)  NOT NULL DEFAULT 'N',
    63  			Alter_routine_priv varchar(10)  NOT NULL DEFAULT 'N',
    64  			Create_user_priv varchar(10)  NOT NULL DEFAULT 'N',
    65  			Event_priv varchar(10)  NOT NULL DEFAULT 'N',
    66  			Trigger_priv varchar(10)  NOT NULL DEFAULT 'N',
    67  			Create_tablespace_priv varchar(10)  NOT NULL DEFAULT 'N',
    68  			ssl_type varchar(10)  NOT NULL DEFAULT '',
    69  			ssl_cipher blob NOT NULL,
    70  			x509_issuer blob NOT NULL,
    71  			x509_subject blob NOT NULL,
    72  			max_questions int unsigned NOT NULL DEFAULT '0',
    73  			max_updates int unsigned NOT NULL DEFAULT '0',
    74  			max_connections int unsigned NOT NULL DEFAULT '0',
    75  			max_user_connections int unsigned NOT NULL DEFAULT '0',
    76  			plugin char(64)  NOT NULL DEFAULT 'caching_sha2_password',
    77  			authentication_string text ,
    78  			password_expired varchar(10)  NOT NULL DEFAULT 'N',
    79  			password_last_changed timestamp NULL DEFAULT NULL,
    80  			password_lifetime smallint unsigned DEFAULT NULL,
    81  			account_locked varchar(10)  NOT NULL DEFAULT 'N',
    82  			Create_role_priv varchar(10)  NOT NULL DEFAULT 'N',
    83  			Drop_role_priv varchar(10)  NOT NULL DEFAULT 'N',
    84  			Password_reuse_history smallint unsigned DEFAULT NULL,
    85  			Password_reuse_time smallint unsigned DEFAULT NULL,
    86  			Password_require_current varchar(10)  DEFAULT NULL,
    87  			User_attributes json DEFAULT NULL,
    88  			PRIMARY KEY (Host,User)
    89  		  );`,
    90  		`CREATE TABLE IF NOT EXISTS db (
    91  			Host char(255) NOT NULL DEFAULT '',
    92  			Db char(64)  NOT NULL DEFAULT '',
    93  			User char(32)  NOT NULL DEFAULT '',
    94  			Select_priv varchar(10)  NOT NULL DEFAULT 'N',
    95  			Insert_priv varchar(10)  NOT NULL DEFAULT 'N',
    96  			Update_priv varchar(10)  NOT NULL DEFAULT 'N',
    97  			Delete_priv varchar(10)  NOT NULL DEFAULT 'N',
    98  			Create_priv varchar(10)  NOT NULL DEFAULT 'N',
    99  			Drop_priv varchar(10)  NOT NULL DEFAULT 'N',
   100  			Grant_priv varchar(10)  NOT NULL DEFAULT 'N',
   101  			References_priv varchar(10)  NOT NULL DEFAULT 'N',
   102  			Index_priv varchar(10)  NOT NULL DEFAULT 'N',
   103  			Alter_priv varchar(10)  NOT NULL DEFAULT 'N',
   104  			Create_tmp_table_priv varchar(10)  NOT NULL DEFAULT 'N',
   105  			Lock_tables_priv varchar(10)  NOT NULL DEFAULT 'N',
   106  			Create_view_priv varchar(10)  NOT NULL DEFAULT 'N',
   107  			Show_view_priv varchar(10)  NOT NULL DEFAULT 'N',
   108  			Create_routine_priv varchar(10)  NOT NULL DEFAULT 'N',
   109  			Alter_routine_priv varchar(10)  NOT NULL DEFAULT 'N',
   110  			Execute_priv varchar(10)  NOT NULL DEFAULT 'N',
   111  			Event_priv varchar(10)  NOT NULL DEFAULT 'N',
   112  			Trigger_priv varchar(10)  NOT NULL DEFAULT 'N',
   113  			PRIMARY KEY (Host,Db,User),
   114  			KEY User (User)
   115  		  );`,
   116  		`CREATE TABLE IF NOT EXISTS procs_priv (
   117  			Host char(255)  NOT NULL DEFAULT '',
   118  			Db char(64)  NOT NULL DEFAULT '',
   119  			User char(32)  NOT NULL DEFAULT '',
   120  			Routine_name char(64)  NOT NULL DEFAULT '',
   121  			Routine_type varchar(10)  NOT NULL,
   122  			Grantor varchar(288)  NOT NULL DEFAULT '',
   123  			Proc_priv varchar(10)  NOT NULL DEFAULT '',
   124  			Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   125  			PRIMARY KEY (Host,Db,User,Routine_name,Routine_type),
   126  			KEY Grantor (Grantor)
   127  		  );`,
   128  		`CREATE TABLE IF NOT EXISTS columns_priv (
   129  			Host char(255)  NOT NULL DEFAULT '',
   130  			Db char(64)  NOT NULL DEFAULT '',
   131  			User char(32)  NOT NULL DEFAULT '',
   132  			Table_name char(64)  NOT NULL DEFAULT '',
   133  			Column_name char(64)  NOT NULL DEFAULT '',
   134  			Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   135  			Column_priv varchar(10) NOT NULL DEFAULT '',
   136  			PRIMARY KEY (Host,Db,User,Table_name,Column_name)
   137  		  );`,
   138  		`CREATE TABLE IF NOT EXISTS tables_priv (
   139  			Host char(255)  NOT NULL DEFAULT '',
   140  			Db char(64)  NOT NULL DEFAULT '',
   141  			User char(32)  NOT NULL DEFAULT '',
   142  			Table_name char(64)  NOT NULL DEFAULT '',
   143  			Grantor varchar(288)  NOT NULL DEFAULT '',
   144  			Timestamp timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   145  			Table_priv varchar(10) NOT NULL DEFAULT '',
   146  			Column_priv varchar(10) NOT NULL DEFAULT '',
   147  			PRIMARY KEY (Host,Db,User,Table_name),
   148  			KEY Grantor (Grantor)
   149  		  );`,
   150  	}
   151  	InitInformationSchemaSysTables = []string{
   152  		"CREATE TABLE IF NOT EXISTS KEY_COLUMN_USAGE(" +
   153  			"CONSTRAINT_CATALOG varchar(64)," +
   154  			"CONSTRAINT_SCHEMA varchar(64)," +
   155  			"CONSTRAINT_NAME varchar(64)," +
   156  			"TABLE_CATALOG varchar(64)," +
   157  			"TABLE_SCHEMA varchar(64)," +
   158  			"TABLE_NAME varchar(64)," +
   159  			"COLUMN_NAME varchar(64)," +
   160  			"ORDINAL_POSITION int unsigned," +
   161  			"POSITION_IN_UNIQUE_CONSTRAINT int unsigned," +
   162  			"REFERENCED_TABLE_SCHEMA varchar(64)," +
   163  			"REFERENCED_TABLE_NAME varchar(64)," +
   164  			"REFERENCED_COLUMN_NAME varchar(64)" +
   165  			");",
   166  		"CREATE VIEW COLUMNS AS select " +
   167  			"'def' as TABLE_CATALOG," +
   168  			"att_database as TABLE_SCHEMA," +
   169  			"att_relname AS TABLE_NAME," +
   170  			"attname AS COLUMN_NAME," +
   171  			"attnum AS ORDINAL_POSITION," +
   172  			"mo_show_visible_bin(att_default,1) as COLUMN_DEFAULT," +
   173  			"(case when attnotnull != 0 then 'YES' else 'NO' end) as IS_NULLABLE," +
   174  			"mo_show_visible_bin(atttyp,2) as DATA_TYPE," +
   175  			"att_length as CHARACTER_MAXIMUM_LENGTH," +
   176  			"att_length as CHARACTER_OCTET_LENGTH," +
   177  			"0 as NUMERIC_PRECISION," +
   178  			"0 as NUMERIC_SCALE," +
   179  			"0 as DATETIME_PRECISION," +
   180  			"'utf8' as CHARACTER_SET_NAME," +
   181  			"'utf8_bin' as COLLATION_NAME," +
   182  			"mo_show_visible_bin(atttyp,3) as COLUMN_TYPE," +
   183  			"case when att_constraint_type = 'p' then 'PRI' else '' end as COLUMN_KEY," +
   184  			"case when att_is_auto_increment = 1 then 'auto_increment' else '' end as EXTRA," +
   185  			"'select,insert,update,references' as `PRIVILEGES`," +
   186  			"att_comment as COLUMN_COMMENT," +
   187  			"'' as GENERATION_EXPRESSION," +
   188  			"0 as SRS_ID " +
   189  			"from mo_catalog.mo_columns where att_relname!='%!%mo_increment_columns' and att_relname not like '__mo_cpkey%' and attname != '__mo_rowid'",
   190  		//"CREATE TABLE IF NOT EXISTS COLUMNS(" +
   191  		//	"TABLE_CATALOG varchar(64)," +
   192  		//	"TABLE_SCHEMA varchar(64)," +
   193  		//	"TABLE_NAME varchar(64)," +
   194  		//	"COLUMN_NAME varchar(64)," +
   195  		//	"ORDINAL_POSITION int unsigned," +
   196  		//	"COLUMN_DEFAULT text," +
   197  		//	"IS_NULLABLE varchar(3)," +
   198  		//	"DATA_TYPE longtext," +
   199  		//	"CHARACTER_MAXIMUM_LENGTH bigint," +
   200  		//	"CHARACTER_OCTET_LENGTH bigint," +
   201  		//	"NUMERIC_PRECISION bigint unsigned," +
   202  		//	"NUMERIC_SCALE bigint unsigned," +
   203  		//	"DATETIME_PRECISION int unsigned," +
   204  		//	"CHARACTER_SET_NAME varchar(64)," +
   205  		//	"COLLATION_NAME varchar(64)," +
   206  		//	"COLUMN_TYPE mediumtext," +
   207  		//	"COLUMN_KEY varchar(10)," +
   208  		//	"EXTRA varchar(256)," +
   209  		//	"`PRIVILEGES` varchar(154)," +
   210  		//	"COLUMN_COMMENT text," +
   211  		//	"GENERATION_EXPRESSION longtext," +
   212  		//	"SRS_ID int unsigned" +
   213  		//	");",
   214  
   215  		"CREATE TABLE IF NOT EXISTS PROFILING (" +
   216  			"QUERY_ID int NOT NULL DEFAULT '0'," +
   217  			"SEQ int NOT NULL DEFAULT '0'," +
   218  			"STATE varchar(30) NOT NULL DEFAULT ''," +
   219  			"DURATION decimal(9,6) NOT NULL DEFAULT '0.000000'," +
   220  			"CPU_USER decimal(9,6) DEFAULT NULL," +
   221  			"CPU_SYSTEM decimal(9,6) DEFAULT NULL," +
   222  			"CONTEXT_VOLUNTARY int DEFAULT NULL," +
   223  			"CONTEXT_INVOLUNTARY int DEFAULT NULL," +
   224  			"BLOCK_OPS_IN int DEFAULT NULL," +
   225  			"BLOCK_OPS_OUT int DEFAULT NULL," +
   226  			"MESSAGES_SENT int DEFAULT NULL," +
   227  			"MESSAGES_RECEIVED int DEFAULT NULL," +
   228  			"PAGE_FAULTS_MAJOR int DEFAULT NULL," +
   229  			"PAGE_FAULTS_MINOR int DEFAULT NULL," +
   230  			"SWAPS int DEFAULT NULL," +
   231  			"SOURCE_FUNCTION varchar(30) DEFAULT NULL," +
   232  			"SOURCE_FILE varchar(20) DEFAULT NULL," +
   233  			"SOURCE_LINE int DEFAULT NULL" +
   234  			");",
   235  		"CREATE TABLE IF NOT EXISTS `PROCESSLIST` (" +
   236  			"ID bigint unsigned NOT NULL DEFAULT '0'," +
   237  			"USER varchar(32) NOT NULL DEFAULT ''," +
   238  			"HOST varchar(261) NOT NULL DEFAULT ''," +
   239  			"DB varchar(64) DEFAULT NULL," +
   240  			"COMMAND varchar(16) NOT NULL DEFAULT ''," +
   241  			"TIME int NOT NULL DEFAULT '0'," +
   242  			"STATE varchar(64) DEFAULT NULL," +
   243  			"INFO longtext" +
   244  			");",
   245  		"CREATE TABLE IF NOT EXISTS USER_PRIVILEGES (" +
   246  			"GRANTEE varchar(292) NOT NULL DEFAULT ''," +
   247  			"TABLE_CATALOG varchar(512) NOT NULL DEFAULT ''," +
   248  			"PRIVILEGE_TYPE varchar(64) NOT NULL DEFAULT ''," +
   249  			"IS_GRANTABLE varchar(3) NOT NULL DEFAULT ''" +
   250  			");",
   251  		//"CREATE TABLE IF NOT EXISTS SCHEMATA (" +
   252  		//	"CATALOG_NAME varchar(64)," +
   253  		//	"SCHEMA_NAME varchar(64)," +
   254  		//	"DEFAULT_CHARACTER_SET_NAME varchar(64)," +
   255  		//	"DEFAULT_COLLATION_NAME varchar(64)," +
   256  		//	"SQL_PATH binary(0)," +
   257  		//	"DEFAULT_ENCRYPTION varchar(10)" +
   258  		//	");",
   259  		"CREATE VIEW SCHEMATA AS SELECT " +
   260  			"dat_catalog_name AS CATALOG_NAME," +
   261  			"datname AS SCHEMA_NAME," +
   262  			"'utf8mb4' AS DEFAULT_CHARACTER_SET_NAME," +
   263  			"'utf8mb4_0900_ai_ci' AS DEFAULT_COLLATION_NAME," +
   264  			"'' AS SQL_PATH," +
   265  			"'NO' AS DEFAULT_ENCRYPTION " +
   266  			"FROM mo_catalog.mo_database;",
   267  		"CREATE TABLE IF NOT EXISTS CHARACTER_SETS(" +
   268  			"CHARACTER_SET_NAME varchar(64)," +
   269  			"DEFAULT_COLLATE_NAME varchar(64)," +
   270  			"DESCRIPTION varchar(2048)," +
   271  			"MAXLEN int unsigned" +
   272  			");",
   273  		"CREATE TABLE IF NOT EXISTS TRIGGERS(" +
   274  			"TRIGGER_CATALOG varchar(64)," +
   275  			"TRIGGER_SCHEMA varchar(64)," +
   276  			"TRIGGER_NAME varchar(64)," +
   277  			"EVENT_MANIPULATION varchar(10)," +
   278  			"EVENT_OBJECT_CATALOG varchar(64)," +
   279  			"EVENT_OBJECT_SCHEMA varchar(64)," +
   280  			"EVENT_OBJECT_TABLE varchar(64)," +
   281  			"ACTION_ORDER int unsigned," +
   282  			"ACTION_CONDITION binary(0)," +
   283  			"ACTION_STATEMENT longtext," +
   284  			"ACTION_ORIENTATION varchar(3)," +
   285  			"ACTION_TIMING varchar(10)," +
   286  			"ACTION_REFERENCE_OLD_TABLE binary(0)," +
   287  			"ACTION_REFERENCE_NEW_TABLE binary(0)," +
   288  			"ACTION_REFERENCE_OLD_ROW varchar(3)," +
   289  			"ACTION_REFERENCE_NEW_ROW varchar(3)," +
   290  			"CREATED timestamp(2)," +
   291  			"SQL_MODE varchar(10)," +
   292  			"DEFINER varchar(288)," +
   293  			"CHARACTER_SET_CLIENT varchar(64)," +
   294  			"COLLATION_CONNECTION varchar(64)," +
   295  			"DATABASE_COLLATION varchar(64)" +
   296  			");",
   297  
   298  		"CREATE VIEW IF NOT EXISTS TABLES AS " +
   299  			"SELECT 'def' AS TABLE_CATALOG," +
   300  			"reldatabase AS TABLE_SCHEMA," +
   301  			"relname AS TABLE_NAME," +
   302  			"(case when relkind = 'v' and (reldatabase='mo_catalog' or reldatabase='information_schema') then 'SYSTEM VIEW' " +
   303  			"when relkind = 'v'  then 'VIEW' " +
   304  			"when relkind = 'e' then 'EXTERNAL TABLE' " +
   305  			"when relkind = 'r' then 'BASE TABLE' " +
   306  			"else 'UNKNOWN TABLE TYPE' end) AS TABLE_TYPE," +
   307  			"'' AS ENGINE," +
   308  			"0 AS VERSION," +
   309  			"'' AS ROW_FORMAT," +
   310  			"0 AS TABLE_ROWS," +
   311  			"0 AS AVG_ROW_LENGTH," +
   312  			"0 AS DATA_LENGTH," +
   313  			"0 AS MAX_DATA_LENGTH," +
   314  			"0 AS INDEX_LENGTH," +
   315  			"0 AS DATA_FREE," +
   316  			"0 AS `AUTO_INCREMENT`," +
   317  			"created_time AS CREATE_TIME," +
   318  			"created_time AS UPDATE_TIME," +
   319  			"created_time AS CHECK_TIME," +
   320  			"'' AS TABLE_COLLATION," +
   321  			"0 AS CHECKSUM," +
   322  			"'' AS CREATE_OPTIONS," +
   323  			"rel_comment AS TABLE_COMMENT " +
   324  			"FROM mo_catalog.mo_tables;",
   325  
   326  		//"CREATE TABLE TABLES(" +
   327  		//	"TABLE_CATALOG varchar(64)," +
   328  		//	"TABLE_SCHEMA varchar(64)," +
   329  		//	"TABLE_NAME varchar(64)," +
   330  		//	"TABLE_TYPE varchar(50)," +
   331  		//	"ENGINE varchar(64), " +
   332  		//	"VERSION int," +
   333  		//	"ROW_FORMAT varchar(50)," +
   334  		//	"TABLE_ROWS bigint unsigned," +
   335  		//	"AVG_ROW_LENGTH bigint unsigned," +
   336  		//	"DATA_LENGTH bigint unsigned," +
   337  		//	"MAX_DATA_LENGTH bigint unsigned," +
   338  		//	"INDEX_LENGTH bigint unsigned," +
   339  		//	"DATA_FREE bigint unsigned," +
   340  		//	"`AUTO_INCREMENT` bigint unsigned," +
   341  		//	"CREATE_TIME timestamp," +
   342  		//	"UPDATE_TIME datetime," +
   343  		//	"CHECK_TIME datetime," +
   344  		//	"TABLE_COLLATION varchar(64)," +
   345  		//	"CHECKSUM bigint," +
   346  		//	"CREATE_OPTIONS varchar(256)," +
   347  		//	"TABLE_COMMENT text" +
   348  		//	");",
   349  
   350  		"CREATE TABLE IF NOT EXISTS ENGINES (" +
   351  			"ENGINE varchar(64)," +
   352  			"SUPPORT varchar(8)," +
   353  			"COMMENT varchar(160)," +
   354  			"TRANSACTIONS varchar(3)," +
   355  			"XA varchar(3)," +
   356  			"SAVEPOINTS varchar(3)" +
   357  			");",
   358  		"CREATE TABLE IF NOT EXISTS ROUTINES (" +
   359  			"SPECIFIC_NAME varchar(64)," +
   360  			"ROUTINE_CATALOG varchar(64)," +
   361  			"ROUTINE_SCHEMA varchar(64)," +
   362  			"ROUTINE_NAME varchar(64)," +
   363  			"ROUTINE_TYPE varchar(10)," +
   364  			"DATA_TYPE  longtext," +
   365  			"CHARACTER_MAXIMUM_LENGTH bigint," +
   366  			"CHARACTER_OCTET_LENGTH bigint," +
   367  			"NUMERIC_PRECISION int unsigned," +
   368  			"NUMERIC_SCALE int unsigned," +
   369  			"DATETIME_PRECISION int unsigned," +
   370  			"CHARACTER_SET_NAME varchar(64)," +
   371  			"COLLATION_NAME varchar(64)," +
   372  			"DTD_IDENTIFIER longtext," +
   373  			"ROUTINE_BODY varchar(3)," +
   374  			"ROUTINE_DEFINITION longtext," +
   375  			"EXTERNAL_NAME binary(0)," +
   376  			"EXTERNAL_LANGUAGE varchar(64)," +
   377  			"PARAMETER_STYLE varchar(3)," +
   378  			"IS_DETERMINISTIC varchar(3)," +
   379  			"SQL_DATA_ACCESS varchar(10)," +
   380  			"SQL_PATH varchar(1000)," +
   381  			"SECURITY_TYPE varchar(10)," +
   382  			"CREATED timestamp," +
   383  			"LAST_ALTERED timestamp," +
   384  			"SQL_MODE varchar(1000)," +
   385  			"ROUTINE_COMMENT text," +
   386  			"DEFINER varchar(288)," +
   387  			"CHARACTER_SET_CLIENT varchar(64)," +
   388  			"COLLATION_CONNECTION varchar(64)," +
   389  			"DATABASE_COLLATION  varchar(64)" +
   390  			");",
   391  		"CREATE TABLE IF NOT EXISTS PARAMETERS(" +
   392  			"SPECIFIC_CATALOG varchar(64)," +
   393  			"SPECIFIC_SCHEMA varchar(64)," +
   394  			"SPECIFIC_NAME varchar(64)," +
   395  			"ORDINAL_POSITION bigint unsigned," +
   396  			"PARAMETER_MODE varchar(5)," +
   397  			"PARAMETER_NAME varchar(64)," +
   398  			"DATA_TYPE longtext," +
   399  			"CHARACTER_MAXIMUM_LENGTH bigint," +
   400  			"CHARACTER_OCTET_LENGTH bigint," +
   401  			"NUMERIC_PRECISION int unsigned," +
   402  			"NUMERIC_SCALE bigint," +
   403  			"DATETIME_PRECISION int unsigned," +
   404  			"CHARACTER_SET_NAME varchar(64)," +
   405  			"COLLATION_NAME varchar(64)," +
   406  			"DTD_IDENTIFIER mediumtext," +
   407  			"ROUTINE_TYPE  varchar(64)" +
   408  			");",
   409  		"CREATE TABLE IF NOT EXISTS KEYWORDS (" +
   410  			"WORD varchar(64)," +
   411  			"RESERVED int unsigned" +
   412  			");",
   413  		informationSchemaKeywordsData,
   414  	}
   415  )
   416  
   417  func InitSchema(ctx context.Context, ieFactory func() ie.InternalExecutor) error {
   418  	initMysqlTables(ctx, ieFactory, motrace.FileService)
   419  	initInformationSchemaTables(ctx, ieFactory, motrace.FileService)
   420  	return nil
   421  }
   422  
   423  func initMysqlTables(ctx context.Context, ieFactory func() ie.InternalExecutor, batchProcessMode string) {
   424  	exec := ieFactory()
   425  	exec.ApplySessionOverride(ie.NewOptsBuilder().Database(MysqlDBConst).Internal(true).Finish())
   426  	mustExec := func(sql string) {
   427  		if err := exec.Exec(ctx, sql, ie.NewOptsBuilder().Finish()); err != nil {
   428  			panic(fmt.Sprintf("[Mysql] init mysql tables error: %v, sql: %s", err, sql))
   429  		}
   430  	}
   431  	mustExec(sqlCreateDBConst + MysqlDBConst)
   432  	mustExec(sqlUseDbConst + MysqlDBConst)
   433  	var createCost time.Duration
   434  	defer func() {
   435  		logutil.Debugf("[Mysql] init mysql tables: create cost %d ms", createCost.Milliseconds())
   436  	}()
   437  	instant := time.Now()
   438  
   439  	for _, sql := range InitMysqlSysTables {
   440  		mustExec(sql)
   441  	}
   442  	createCost = time.Since(instant)
   443  }
   444  
   445  func initInformationSchemaTables(ctx context.Context, ieFactory func() ie.InternalExecutor, batchProcessMode string) {
   446  	exec := ieFactory()
   447  	exec.ApplySessionOverride(ie.NewOptsBuilder().Database(InformationDBConst).Internal(true).Finish())
   448  	mustExec := func(sql string) {
   449  		if err := exec.Exec(ctx, sql, ie.NewOptsBuilder().Finish()); err != nil {
   450  			panic(fmt.Sprintf("[information_schema] init information_schema tables error: %v, sql: %s", err, sql))
   451  		}
   452  	}
   453  	mustExec(sqlCreateDBConst + InformationDBConst)
   454  	mustExec(sqlUseDbConst + InformationDBConst)
   455  	var createCost time.Duration
   456  	defer func() {
   457  		logutil.Debugf("[information_schema] init information_schema tables: create cost %d ms", createCost.Milliseconds())
   458  	}()
   459  	instant := time.Now()
   460  
   461  	for _, sql := range InitInformationSchemaSysTables {
   462  		mustExec(sql)
   463  	}
   464  	createCost = time.Since(instant)
   465  }