vitess.io/vitess@v0.16.2/go/vt/vtgate/semantics/info_schema_gen_test.go (about) 1 /* 2 Copyright 2022 The Vitess Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package semantics 18 19 import ( 20 "database/sql" 21 "fmt" 22 "regexp" 23 "strings" 24 "testing" 25 26 _ "github.com/go-sql-driver/mysql" 27 "github.com/stretchr/testify/require" 28 29 "vitess.io/vitess/go/vt/sqlparser" 30 ) 31 32 func TestGenerateInfoSchemaMap(t *testing.T) { 33 t.Skip("run manually to re-create the content of the getInfoSchema functions") 34 b := new(strings.Builder) 35 36 db, err := sql.Open("mysql", "root@tcp(127.0.0.1:3306)/test") 37 require.NoError(t, err) 38 defer db.Close() 39 40 for _, tbl := range informationSchemaTables80 { 41 b.WriteString("cols = []vindexes.Column{}\n") 42 result, err := db.Query(fmt.Sprintf("show columns from information_schema.`%s`", tbl)) 43 require.NoError(t, err) 44 defer result.Close() 45 for result.Next() { 46 var r row 47 result.Scan(&r.Field, &r.Type, &r.Null, &r.Key, &r.Default, &r.Extra) 48 allString := re.FindStringSubmatch(r.Type) 49 var typ string 50 if allString == nil { 51 typ = r.Type 52 } else { 53 typ = allString[1] 54 } 55 unsigned := false 56 if idx := strings.Index(typ, "unsigned"); idx > 0 { 57 typ = typ[:idx-1] 58 unsigned = true 59 } 60 i2 := sqlparser.SQLTypeToQueryType(typ, unsigned) 61 if int(i2) == 0 { 62 t.Fatalf("%s %s", tbl, r.Field) 63 } 64 b.WriteString(fmt.Sprintf("cols = append(cols, createCol(\"%s\", %d))\n", r.Field, int(i2))) 65 } 66 b.WriteString(fmt.Sprintf("infSchema[\"%s\"] = cols\n", tbl)) 67 } 68 69 fmt.Println(b.String()) 70 } 71 72 var ( 73 informationSchemaTables57 = []string{ 74 "CHARACTER_SETS", 75 "COLLATION_CHARACTER_SET_APPLICABILITY", 76 "COLLATIONS", 77 "COLUMN_PRIVILEGES", 78 "COLUMNS", 79 "ENGINES", 80 "EVENTS", 81 "FILES", 82 "GLOBAL_STATUS", 83 "GLOBAL_VARIABLES", 84 "INNODB_BUFFER_PAGE", 85 "INNODB_BUFFER_PAGE_LRU", 86 "INNODB_BUFFER_POOL_STATS", 87 "INNODB_CMP", 88 "INNODB_CMP_PER_INDEX", 89 "INNODB_CMP_PER_INDEX_RESET", 90 "INNODB_CMP_RESET", 91 "INNODB_CMPMEM", 92 "INNODB_CMPMEM_RESET", 93 "INNODB_FT_BEING_DELETED", 94 "INNODB_FT_CONFIG", 95 "INNODB_FT_DEFAULT_STOPWORD", 96 "INNODB_FT_DELETED", 97 "INNODB_FT_INDEX_CACHE", 98 "INNODB_FT_INDEX_TABLE", 99 "INNODB_LOCK_WAITS", 100 "INNODB_LOCKS", 101 "INNODB_METRICS", 102 "INNODB_SYS_COLUMNS", 103 "INNODB_SYS_DATAFILES", 104 "INNODB_SYS_FIELDS", 105 "INNODB_SYS_FOREIGN", 106 "INNODB_SYS_FOREIGN_COLS", 107 "INNODB_SYS_INDEXES", 108 "INNODB_SYS_TABLES", 109 "INNODB_SYS_TABLESPACES", 110 "INNODB_SYS_TABLESTATS", 111 "INNODB_SYS_VIRTUAL", 112 "INNODB_TEMP_TABLE_INFO", 113 "INNODB_TRX", 114 "KEY_COLUMN_USAGE", 115 "OPTIMIZER_TRACE", 116 "PARAMETERS", 117 "PARTITIONS", 118 "PLUGINS", 119 "PROCESSLIST", 120 "PROFILING", 121 "REFERENTIAL_CONSTRAINTS", 122 "ROUTINES", 123 "SCHEMA_PRIVILEGES", 124 "SCHEMATA", 125 "SESSION_STATUS", 126 "SESSION_VARIABLES", 127 "STATISTICS", 128 "TABLE_CONSTRAINTS", 129 "TABLE_PRIVILEGES", 130 "TABLES", 131 "TABLESPACES", 132 "TRIGGERS", 133 "USER_PRIVILEGES", 134 "VIEWS", 135 } 136 informationSchemaTables80 = []string{ 137 "ADMINISTRABLE_ROLE_AUTHORIZATIONS", 138 "APPLICABLE_ROLES", 139 "CHARACTER_SETS", 140 "CHECK_CONSTRAINTS", 141 "COLLATION_CHARACTER_SET_APPLICABILITY", 142 "COLLATIONS", 143 "COLUMN_PRIVILEGES", 144 "COLUMN_STATISTICS", 145 "COLUMNS", 146 "COLUMNS_EXTENSIONS", 147 "ENABLED_ROLES", 148 "ENGINES", 149 "EVENTS", 150 "FILES", 151 "INNODB_BUFFER_PAGE", 152 "INNODB_BUFFER_PAGE_LRU", 153 "INNODB_BUFFER_POOL_STATS", 154 "INNODB_CACHED_INDEXES", 155 "INNODB_CMP", 156 "INNODB_CMP_PER_INDEX", 157 "INNODB_CMP_PER_INDEX_RESET", 158 "INNODB_CMP_RESET", 159 "INNODB_CMPMEM", 160 "INNODB_CMPMEM_RESET", 161 "INNODB_COLUMNS", 162 "INNODB_DATAFILES", 163 "INNODB_FIELDS", 164 "INNODB_FOREIGN", 165 "INNODB_FOREIGN_COLS", 166 "INNODB_FT_BEING_DELETED", 167 "INNODB_FT_CONFIG", 168 "INNODB_FT_DEFAULT_STOPWORD", 169 "INNODB_FT_DELETED", 170 "INNODB_FT_INDEX_CACHE", 171 "INNODB_FT_INDEX_TABLE", 172 "INNODB_INDEXES", 173 "INNODB_METRICS", 174 "INNODB_SESSION_TEMP_TABLESPACES", 175 "INNODB_TABLES", 176 "INNODB_TABLESPACES", 177 "INNODB_TABLESPACES_BRIEF", 178 "INNODB_TABLESTATS", 179 "INNODB_TEMP_TABLE_INFO", 180 "INNODB_TRX", 181 "INNODB_VIRTUAL", 182 "KEY_COLUMN_USAGE", 183 "KEYWORDS", 184 "OPTIMIZER_TRACE", 185 "PARAMETERS", 186 "PARTITIONS", 187 "PLUGINS", 188 "PROCESSLIST", 189 "PROFILING", 190 "REFERENTIAL_CONSTRAINTS", 191 "RESOURCE_GROUPS", 192 "ROLE_COLUMN_GRANTS", 193 "ROLE_ROUTINE_GRANTS", 194 "ROLE_TABLE_GRANTS", 195 "ROUTINES", 196 "SCHEMA_PRIVILEGES", 197 "SCHEMATA", 198 "SCHEMATA_EXTENSIONS", 199 "ST_GEOMETRY_COLUMNS", 200 "ST_SPATIAL_REFERENCE_SYSTEMS", 201 "ST_UNITS_OF_MEASURE", 202 "STATISTICS", 203 "TABLE_CONSTRAINTS", 204 "TABLE_CONSTRAINTS_EXTENSIONS", 205 "TABLE_PRIVILEGES", 206 "TABLES", 207 "TABLES_EXTENSIONS", 208 "TABLESPACES", 209 "TABLESPACES_EXTENSIONS", 210 "TRIGGERS", 211 "USER_ATTRIBUTES", 212 "USER_PRIVILEGES", 213 "VIEW_ROUTINE_USAGE", 214 "VIEW_TABLE_USAGE", 215 "VIEWS", 216 } 217 ) 218 219 type row struct { 220 Field string 221 Type string 222 Null string 223 Key any 224 Default any 225 Extra any 226 } 227 228 var re = regexp.MustCompile(`(.*)\((.*)\)`)