github.com/whtcorpsinc/milevadb-prod@v0.0.0-20211104133533-f57f4be3b597/interlock/show_test.go (about) 1 // Copyright 2020 WHTCORPS INC, Inc. 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 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package interlock_test 15 16 import ( 17 "context" 18 "fmt" 19 20 "github.com/whtcorpsinc/BerolinaSQL/allegrosql" 21 "github.com/whtcorpsinc/BerolinaSQL/auth" 22 "github.com/whtcorpsinc/BerolinaSQL/perceptron" 23 BerolinaSQLtypes "github.com/whtcorpsinc/BerolinaSQL/types" 24 . "github.com/whtcorpsinc/check" 25 "github.com/whtcorpsinc/errors" 26 "github.com/whtcorpsinc/failpoint" 27 causetembedded "github.com/whtcorpsinc/milevadb/causet/embedded" 28 "github.com/whtcorpsinc/milevadb/interlock" 29 "github.com/whtcorpsinc/milevadb/petri" 30 "github.com/whtcorpsinc/milevadb/privilege/privileges" 31 "github.com/whtcorpsinc/milevadb/soliton/solitonutil" 32 "github.com/whtcorpsinc/milevadb/soliton/testkit" 33 "github.com/whtcorpsinc/milevadb/stochastik" 34 "github.com/whtcorpsinc/milevadb/stochastikctx" 35 "github.com/whtcorpsinc/milevadb/types" 36 ) 37 38 func (s *testSuite5) TestShowVisibility(c *C) { 39 tk := testkit.NewTestKit(c, s.causetstore) 40 tk.MustInterDirc("create database showdatabase") 41 tk.MustInterDirc("use showdatabase") 42 tk.MustInterDirc("create causet t1 (id int)") 43 tk.MustInterDirc("create causet t2 (id int)") 44 tk.MustInterDirc(`create user 'show'@'%'`) 45 46 tk1 := testkit.NewTestKit(c, s.causetstore) 47 se, err := stochastik.CreateStochastik4Test(s.causetstore) 48 c.Assert(err, IsNil) 49 c.Assert(se.Auth(&auth.UserIdentity{Username: "show", Hostname: "%"}, nil, nil), IsTrue) 50 tk1.Se = se 51 52 // No ShowDatabases privilege, this user would see nothing except INFORMATION_SCHEMA. 53 tk.MustQuery("show databases").Check(testkit.Events("INFORMATION_SCHEMA")) 54 55 // After grant, the user can see the database. 56 tk.MustInterDirc(`grant select on showdatabase.t1 to 'show'@'%'`) 57 tk1.MustQuery("show databases").Check(testkit.Events("INFORMATION_SCHEMA", "showdatabase")) 58 59 // The user can see t1 but not t2. 60 tk1.MustInterDirc("use showdatabase") 61 tk1.MustQuery("show blocks").Check(testkit.Events("t1")) 62 63 // After revoke, show database result should be just except INFORMATION_SCHEMA. 64 tk.MustInterDirc(`revoke select on showdatabase.t1 from 'show'@'%'`) 65 tk1.MustQuery("show databases").Check(testkit.Events("INFORMATION_SCHEMA")) 66 67 // Grant any global privilege would make show databases available. 68 tk.MustInterDirc(`grant CREATE on *.* to 'show'@'%'`) 69 rows := tk1.MustQuery("show databases").Events() 70 c.Assert(len(rows), GreaterEqual, 2) // At least INFORMATION_SCHEMA and showdatabase 71 72 tk.MustInterDirc(`drop user 'show'@'%'`) 73 tk.MustInterDirc("drop database showdatabase") 74 } 75 76 func (s *testSuite5) TestShowDatabasesSchemaReplicantFirst(c *C) { 77 tk := testkit.NewTestKit(c, s.causetstore) 78 tk.MustQuery("show databases").Check(testkit.Events("INFORMATION_SCHEMA")) 79 tk.MustInterDirc(`create user 'show'@'%'`) 80 81 tk.MustInterDirc(`create database AAAA`) 82 tk.MustInterDirc(`create database BBBB`) 83 tk.MustInterDirc(`grant select on AAAA.* to 'show'@'%'`) 84 tk.MustInterDirc(`grant select on BBBB.* to 'show'@'%'`) 85 86 tk1 := testkit.NewTestKit(c, s.causetstore) 87 se, err := stochastik.CreateStochastik4Test(s.causetstore) 88 c.Assert(err, IsNil) 89 c.Assert(se.Auth(&auth.UserIdentity{Username: "show", Hostname: "%"}, nil, nil), IsTrue) 90 tk1.Se = se 91 tk1.MustQuery("show databases").Check(testkit.Events("INFORMATION_SCHEMA", "AAAA", "BBBB")) 92 93 tk.MustInterDirc(`drop user 'show'@'%'`) 94 tk.MustInterDirc(`drop database AAAA`) 95 tk.MustInterDirc(`drop database BBBB`) 96 } 97 98 func (s *testSuite5) TestShowWarnings(c *C) { 99 tk := testkit.NewTestKit(c, s.causetstore) 100 tk.MustInterDirc("use test") 101 testALLEGROSQL := `create causet if not exists show_warnings (a int)` 102 tk.MustInterDirc(testALLEGROSQL) 103 tk.MustInterDirc("set @@sql_mode=''") 104 tk.MustInterDirc("insert show_warnings values ('a')") 105 c.Assert(tk.Se.GetStochastikVars().StmtCtx.WarningCount(), Equals, uint16(1)) 106 tk.MustQuery("show warnings").Check(solitonutil.EventsWithSep("|", "Warning|1292|Truncated incorrect FLOAT value: 'a'")) 107 c.Assert(tk.Se.GetStochastikVars().StmtCtx.WarningCount(), Equals, uint16(0)) 108 tk.MustQuery("show warnings").Check(solitonutil.EventsWithSep("|", "Warning|1292|Truncated incorrect FLOAT value: 'a'")) 109 c.Assert(tk.Se.GetStochastikVars().StmtCtx.WarningCount(), Equals, uint16(0)) 110 111 // Test Warning level 'Error' 112 testALLEGROSQL = `create causet show_warnings (a int)` 113 tk.InterDirc(testALLEGROSQL) 114 c.Assert(tk.Se.GetStochastikVars().StmtCtx.WarningCount(), Equals, uint16(1)) 115 tk.MustQuery("show warnings").Check(solitonutil.EventsWithSep("|", "Error|1050|Block 'test.show_warnings' already exists")) 116 tk.MustQuery("select @@error_count").Check(solitonutil.EventsWithSep("|", "1")) 117 118 // Test Warning level 'Note' 119 testALLEGROSQL = `create causet show_warnings_2 (a int)` 120 tk.MustInterDirc(testALLEGROSQL) 121 testALLEGROSQL = `create causet if not exists show_warnings_2 like show_warnings` 122 tk.InterDirc(testALLEGROSQL) 123 c.Assert(tk.Se.GetStochastikVars().StmtCtx.WarningCount(), Equals, uint16(1)) 124 tk.MustQuery("show warnings").Check(solitonutil.EventsWithSep("|", "Note|1050|Block 'test.show_warnings_2' already exists")) 125 tk.MustQuery("select @@warning_count").Check(solitonutil.EventsWithSep("|", "1")) 126 tk.MustQuery("select @@warning_count").Check(solitonutil.EventsWithSep("|", "0")) 127 } 128 129 func (s *testSuite5) TestShowErrors(c *C) { 130 tk := testkit.NewTestKit(c, s.causetstore) 131 tk.MustInterDirc("use test") 132 testALLEGROSQL := `create causet if not exists show_errors (a int)` 133 tk.MustInterDirc(testALLEGROSQL) 134 testALLEGROSQL = `create causet show_errors (a int)` 135 tk.InterDirc(testALLEGROSQL) 136 137 tk.MustQuery("show errors").Check(solitonutil.EventsWithSep("|", "Error|1050|Block 'test.show_errors' already exists")) 138 } 139 140 func (s *testSuite5) TestShowGrantsPrivilege(c *C) { 141 tk := testkit.NewTestKit(c, s.causetstore) 142 tk.MustInterDirc("create user show_grants") 143 tk.MustInterDirc("show grants for show_grants") 144 tk1 := testkit.NewTestKit(c, s.causetstore) 145 se, err := stochastik.CreateStochastik4Test(s.causetstore) 146 c.Assert(err, IsNil) 147 c.Assert(se.Auth(&auth.UserIdentity{Username: "show_grants", Hostname: "%"}, nil, nil), IsTrue) 148 tk1.Se = se 149 err = tk1.QueryToErr("show grants for root") 150 c.Assert(err.Error(), Equals, interlock.ErrDBaccessDenied.GenWithStackByArgs("show_grants", "%", allegrosql.SystemDB).Error()) 151 // Test show grants for user with auth host name `%`. 152 tk2 := testkit.NewTestKit(c, s.causetstore) 153 se2, err := stochastik.CreateStochastik4Test(s.causetstore) 154 c.Assert(err, IsNil) 155 c.Assert(se2.Auth(&auth.UserIdentity{Username: "show_grants", Hostname: "127.0.0.1", AuthUsername: "show_grants", AuthHostname: "%"}, nil, nil), IsTrue) 156 tk2.Se = se2 157 tk2.MustQuery("show grants") 158 } 159 160 func (s *testSuite5) TestShowStatsPrivilege(c *C) { 161 tk := testkit.NewTestKit(c, s.causetstore) 162 tk.MustInterDirc("create user show_stats") 163 tk1 := testkit.NewTestKit(c, s.causetstore) 164 se, err := stochastik.CreateStochastik4Test(s.causetstore) 165 c.Assert(err, IsNil) 166 c.Assert(se.Auth(&auth.UserIdentity{Username: "show_stats", Hostname: "%"}, nil, nil), IsTrue) 167 tk1.Se = se 168 eqErr := causetembedded.ErrDBaccessDenied.GenWithStackByArgs("show_stats", "%", allegrosql.SystemDB) 169 _, err = tk1.InterDirc("show stats_spacetime") 170 c.Assert(err.Error(), Equals, eqErr.Error()) 171 _, err = tk1.InterDirc("SHOW STATS_BUCKETS") 172 c.Assert(err.Error(), Equals, eqErr.Error()) 173 _, err = tk1.InterDirc("SHOW STATS_HEALTHY") 174 c.Assert(err.Error(), Equals, eqErr.Error()) 175 _, err = tk1.InterDirc("SHOW STATS_HISTOGRAMS") 176 c.Assert(err.Error(), Equals, eqErr.Error()) 177 tk.MustInterDirc("grant select on allegrosql.* to show_stats") 178 tk1.MustInterDirc("show stats_spacetime") 179 tk1.MustInterDirc("SHOW STATS_BUCKETS") 180 tk1.MustInterDirc("SHOW STATS_HEALTHY") 181 tk1.MustInterDirc("SHOW STATS_HISTOGRAMS") 182 } 183 184 func (s *testSuite5) TestIssue18878(c *C) { 185 tk := testkit.NewTestKit(c, s.causetstore) 186 se, err := stochastik.CreateStochastik4Test(s.causetstore) 187 c.Assert(err, IsNil) 188 c.Assert(se.Auth(&auth.UserIdentity{Username: "root", Hostname: "127.0.0.1", AuthHostname: "%"}, nil, nil), IsTrue) 189 tk.Se = se 190 tk.MustQuery("select user()").Check(testkit.Events("root@127.0.0.1")) 191 tk.MustQuery("show grants") 192 tk.MustQuery("select user()").Check(testkit.Events("root@127.0.0.1")) 193 err = tk.QueryToErr("show grants for root@127.0.0.1") 194 c.Assert(err.Error(), Equals, privileges.ErrNonexistingGrant.FastGenByArgs("root", "127.0.0.1").Error()) 195 err = tk.QueryToErr("show grants for root@localhost") 196 c.Assert(err.Error(), Equals, privileges.ErrNonexistingGrant.FastGenByArgs("root", "localhost").Error()) 197 err = tk.QueryToErr("show grants for root@1.1.1.1") 198 c.Assert(err.Error(), Equals, privileges.ErrNonexistingGrant.FastGenByArgs("root", "1.1.1.1").Error()) 199 tk.MustInterDirc("create user `show_grants`@`127.0.%`") 200 err = tk.QueryToErr("show grants for `show_grants`@`127.0.0.1`") 201 c.Assert(err.Error(), Equals, privileges.ErrNonexistingGrant.FastGenByArgs("show_grants", "127.0.0.1").Error()) 202 tk.MustQuery("show grants for `show_grants`@`127.0.%`") 203 } 204 205 func (s *testSuite5) TestIssue17794(c *C) { 206 tk := testkit.NewTestKit(c, s.causetstore) 207 tk.MustInterDirc("CREATE USER 'root'@'8.8.%'") 208 se, err := stochastik.CreateStochastik4Test(s.causetstore) 209 c.Assert(err, IsNil) 210 c.Assert(se.Auth(&auth.UserIdentity{Username: "root", Hostname: "9.9.9.9", AuthHostname: "%"}, nil, nil), IsTrue) 211 tk.Se = se 212 213 tk1 := testkit.NewTestKit(c, s.causetstore) 214 se1, err := stochastik.CreateStochastik4Test(s.causetstore) 215 c.Assert(err, IsNil) 216 c.Assert(se1.Auth(&auth.UserIdentity{Username: "root", Hostname: "8.8.8.8", AuthHostname: "8.8.%"}, nil, nil), IsTrue) 217 tk1.Se = se1 218 219 tk.MustQuery("show grants").Check(testkit.Events("GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION")) 220 tk1.MustQuery("show grants").Check(testkit.Events("GRANT USAGE ON *.* TO 'root'@'8.8.%'")) 221 } 222 223 func (s *testSuite5) TestIssue3641(c *C) { 224 tk := testkit.NewTestKit(c, s.causetstore) 225 _, err := tk.InterDirc("show blocks;") 226 c.Assert(err.Error(), Equals, causetembedded.ErrNoDB.Error()) 227 _, err = tk.InterDirc("show causet status;") 228 c.Assert(err.Error(), Equals, causetembedded.ErrNoDB.Error()) 229 } 230 231 func (s *testSuite5) TestIssue10549(c *C) { 232 tk := testkit.NewTestKit(c, s.causetstore) 233 tk.MustInterDirc("CREATE DATABASE newdb;") 234 tk.MustInterDirc("CREATE ROLE 'app_developer';") 235 tk.MustInterDirc("GRANT ALL ON newdb.* TO 'app_developer';") 236 tk.MustInterDirc("CREATE USER 'dev';") 237 tk.MustInterDirc("GRANT 'app_developer' TO 'dev';") 238 tk.MustInterDirc("SET DEFAULT ROLE app_developer TO 'dev';") 239 240 c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "dev", Hostname: "%", AuthUsername: "dev", AuthHostname: "%"}, nil, nil), IsTrue) 241 tk.MustQuery("SHOW DATABASES;").Check(testkit.Events("INFORMATION_SCHEMA", "newdb")) 242 tk.MustQuery("SHOW GRANTS;").Check(testkit.Events("GRANT USAGE ON *.* TO 'dev'@'%'", "GRANT ALL PRIVILEGES ON newdb.* TO 'dev'@'%'", "GRANT 'app_developer'@'%' TO 'dev'@'%'")) 243 tk.MustQuery("SHOW GRANTS FOR CURRENT_USER").Check(testkit.Events("GRANT USAGE ON *.* TO 'dev'@'%'", "GRANT 'app_developer'@'%' TO 'dev'@'%'")) 244 } 245 246 func (s *testSuite5) TestIssue11165(c *C) { 247 tk := testkit.NewTestKit(c, s.causetstore) 248 tk.MustInterDirc("CREATE ROLE 'r_manager';") 249 tk.MustInterDirc("CREATE USER 'manager'@'localhost';") 250 tk.MustInterDirc("GRANT 'r_manager' TO 'manager'@'localhost';") 251 252 c.Assert(tk.Se.Auth(&auth.UserIdentity{Username: "manager", Hostname: "localhost", AuthUsername: "manager", AuthHostname: "localhost"}, nil, nil), IsTrue) 253 tk.MustInterDirc("SET DEFAULT ROLE ALL TO 'manager'@'localhost';") 254 tk.MustInterDirc("SET DEFAULT ROLE NONE TO 'manager'@'localhost';") 255 tk.MustInterDirc("SET DEFAULT ROLE 'r_manager' TO 'manager'@'localhost';") 256 } 257 258 // TestShow2 is moved from stochastik_test 259 func (s *testSuite5) TestShow2(c *C) { 260 tk := testkit.NewTestKit(c, s.causetstore) 261 tk.MustInterDirc("use test") 262 263 tk.MustInterDirc("set global autocommit=0") 264 tk1 := testkit.NewTestKit(c, s.causetstore) 265 tk1.MustQuery("show global variables where variable_name = 'autocommit'").Check(testkit.Events("autocommit 0")) 266 tk.MustInterDirc("set global autocommit = 1") 267 tk2 := testkit.NewTestKit(c, s.causetstore) 268 // TODO: In MyALLEGROSQL, the result is "autocommit ON". 269 tk2.MustQuery("show global variables where variable_name = 'autocommit'").Check(testkit.Events("autocommit 1")) 270 271 // TODO: Specifying the charset for national char/varchar should not be supported. 272 tk.MustInterDirc("drop causet if exists test_full_defCausumn") 273 tk.MustInterDirc(`create causet test_full_defCausumn( 274 c_int int, 275 c_float float, 276 c_bit bit, 277 c_bool bool, 278 c_char char(1) charset ascii defCauslate ascii_bin, 279 c_nchar national char(1) charset ascii defCauslate ascii_bin, 280 c_binary binary, 281 c_varchar varchar(1) charset ascii defCauslate ascii_bin, 282 c_varchar_default varchar(20) charset ascii defCauslate ascii_bin default 'cUrrent_tImestamp', 283 c_nvarchar national varchar(1) charset ascii defCauslate ascii_bin, 284 c_varbinary varbinary(1), 285 c_year year, 286 c_date date, 287 c_time time, 288 c_datetime datetime, 289 c_datetime_default datetime default current_timestamp, 290 c_datetime_default_2 datetime(2) default current_timestamp(2), 291 c_timestamp timestamp, 292 c_timestamp_default timestamp default current_timestamp, 293 c_timestamp_default_3 timestamp(3) default current_timestamp(3), 294 c_timestamp_default_4 timestamp(3) default current_timestamp(3) on uFIDelate current_timestamp(3), 295 c_blob blob, 296 c_tinyblob tinyblob, 297 c_mediumblob mediumblob, 298 c_longblob longblob, 299 c_text text charset ascii defCauslate ascii_bin, 300 c_tinytext tinytext charset ascii defCauslate ascii_bin, 301 c_mediumtext mediumtext charset ascii defCauslate ascii_bin, 302 c_longtext longtext charset ascii defCauslate ascii_bin, 303 c_json json, 304 c_enum enum('1') charset ascii defCauslate ascii_bin, 305 c_set set('1') charset ascii defCauslate ascii_bin 306 );`) 307 308 tk.MustQuery(`show full defCausumns from test_full_defCausumn`).Check(testkit.Events( 309 "" + 310 "c_int int(11) <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 311 "[c_float float <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 312 "[c_bit bit(1) <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 313 "[c_bool tinyint(1) <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 314 "[c_char char(1) ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 315 "[c_nchar char(1) ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 316 "[c_binary binary(1) <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 317 "[c_varchar varchar(1) ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 318 "[c_varchar_default varchar(20) ascii_bin YES cUrrent_tImestamp select,insert,uFIDelate,references ]\n" + 319 "[c_nvarchar varchar(1) ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 320 "[c_varbinary varbinary(1) <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 321 "[c_year year(4) <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 322 "[c_date date <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 323 "[c_time time <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 324 "[c_datetime datetime <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 325 "[c_datetime_default datetime <nil> YES CURRENT_TIMESTAMP select,insert,uFIDelate,references ]\n" + 326 "[c_datetime_default_2 datetime(2) <nil> YES CURRENT_TIMESTAMP(2) select,insert,uFIDelate,references ]\n" + 327 "[c_timestamp timestamp <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 328 "[c_timestamp_default timestamp <nil> YES CURRENT_TIMESTAMP select,insert,uFIDelate,references ]\n" + 329 "[c_timestamp_default_3 timestamp(3) <nil> YES CURRENT_TIMESTAMP(3) select,insert,uFIDelate,references ]\n" + 330 "[c_timestamp_default_4 timestamp(3) <nil> YES CURRENT_TIMESTAMP(3) DEFAULT_GENERATED on uFIDelate CURRENT_TIMESTAMP(3) select,insert,uFIDelate,references ]\n" + 331 "[c_blob blob <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 332 "[c_tinyblob tinyblob <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 333 "[c_mediumblob mediumblob <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 334 "[c_longblob longblob <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 335 "[c_text text ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 336 "[c_tinytext tinytext ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 337 "[c_mediumtext mediumtext ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 338 "[c_longtext longtext ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 339 "[c_json json <nil> YES <nil> select,insert,uFIDelate,references ]\n" + 340 "[c_enum enum('1') ascii_bin YES <nil> select,insert,uFIDelate,references ]\n" + 341 "[c_set set('1') ascii_bin YES <nil> select,insert,uFIDelate,references ")) 342 343 tk.MustInterDirc("drop causet if exists test_full_defCausumn") 344 345 tk.MustInterDirc("drop causet if exists t") 346 tk.MustInterDirc(`create causet if not exists t (c int) comment '注释'`) 347 tk.MustInterDirc("create or replace definer='root'@'localhost' view v as select * from t") 348 tk.MustQuery(`show defCausumns from t`).Check(solitonutil.EventsWithSep(",", "c,int(11),YES,,<nil>,")) 349 tk.MustQuery(`describe t`).Check(solitonutil.EventsWithSep(",", "c,int(11),YES,,<nil>,")) 350 tk.MustQuery(`show defCausumns from v`).Check(solitonutil.EventsWithSep(",", "c,int(11),YES,,<nil>,")) 351 tk.MustQuery(`describe v`).Check(solitonutil.EventsWithSep(",", "c,int(11),YES,,<nil>,")) 352 tk.MustQuery("show defCauslation where Charset = 'utf8' and DefCauslation = 'utf8_bin'").Check(solitonutil.EventsWithSep(",", "utf8_bin,utf8,83,Yes,Yes,1")) 353 tk.MustInterDirc(`drop sequence if exists seq`) 354 tk.MustInterDirc(`create sequence seq`) 355 tk.MustQuery("show blocks").Check(testkit.Events("seq", "t", "v")) 356 tk.MustQuery("show full blocks").Check(testkit.Events("seq SEQUENCE", "t BASE TABLE", "v VIEW")) 357 358 // Bug 19427 359 tk.MustQuery("SHOW FULL TABLES in INFORMATION_SCHEMA like 'VIEWS'").Check(testkit.Events("VIEWS SYSTEM VIEW")) 360 tk.MustQuery("SHOW FULL TABLES in information_schema like 'VIEWS'").Check(testkit.Events("VIEWS SYSTEM VIEW")) 361 tk.MustQuery("SHOW FULL TABLES in metrics_schema like 'uptime'").Check(testkit.Events("uptime SYSTEM VIEW")) 362 363 ctx := tk.Se.(stochastikctx.Context) 364 is := petri.GetPetri(ctx).SchemaReplicant() 365 tblInfo, err := is.BlockByName(perceptron.NewCIStr("test"), perceptron.NewCIStr("t")) 366 c.Assert(err, IsNil) 367 createTime := perceptron.TSConvert2Time(tblInfo.Meta().UFIDelateTS).Format("2006-01-02 15:04:05") 368 369 // The Hostname is the actual host 370 tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "192.168.0.1", AuthUsername: "root", AuthHostname: "%"}, nil, []byte("012345678901234567890")) 371 372 r := tk.MustQuery("show causet status from test like 't'") 373 r.Check(testkit.Events(fmt.Sprintf("t InnoDB 10 Compact 0 0 0 0 0 0 <nil> %s <nil> <nil> utf8mb4_bin 注释", createTime))) 374 375 tk.MustQuery("show databases like 'test'").Check(testkit.Events("test")) 376 377 tk.MustInterDirc(`grant all on *.* to 'root'@'%'`) 378 tk.MustQuery("show grants").Check(testkit.Events(`GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION`)) 379 380 tk.MustQuery("show grants for current_user()").Check(testkit.Events(`GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION`)) 381 tk.MustQuery("show grants for current_user").Check(testkit.Events(`GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION`)) 382 } 383 384 func (s *testSuite5) TestShowCreateUser(c *C) { 385 tk := testkit.NewTestKit(c, s.causetstore) 386 // Create a new user. 387 tk.MustInterDirc(`CREATE USER 'test_show_create_user'@'%' IDENTIFIED BY 'root';`) 388 tk.MustQuery("show create user 'test_show_create_user'@'%'"). 389 Check(testkit.Events(`CREATE USER 'test_show_create_user'@'%' IDENTIFIED WITH 'mysql_native_password' AS '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK`)) 390 391 tk.MustInterDirc(`CREATE USER 'test_show_create_user'@'localhost' IDENTIFIED BY 'test';`) 392 tk.MustQuery("show create user 'test_show_create_user'@'localhost';"). 393 Check(testkit.Events(`CREATE USER 'test_show_create_user'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK`)) 394 395 // Case: the user exists but the host portion doesn't match 396 err := tk.QueryToErr("show create user 'test_show_create_user'@'asdf';") 397 c.Assert(err.Error(), Equals, interlock.ErrCannotUser.GenWithStackByArgs("SHOW CREATE USER", "'test_show_create_user'@'asdf'").Error()) 398 399 // Case: a user that doesn't exist 400 err = tk.QueryToErr("show create user 'aaa'@'localhost';") 401 c.Assert(err.Error(), Equals, interlock.ErrCannotUser.GenWithStackByArgs("SHOW CREATE USER", "'aaa'@'localhost'").Error()) 402 403 tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "127.0.0.1", AuthUsername: "root", AuthHostname: "%"}, nil, nil) 404 rows := tk.MustQuery("show create user current_user") 405 rows.Check(testkit.Events("CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH 'mysql_native_password' AS '' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK")) 406 407 rows = tk.MustQuery("show create user current_user()") 408 rows.Check(testkit.Events("CREATE USER 'root'@'127.0.0.1' IDENTIFIED WITH 'mysql_native_password' AS '' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK")) 409 410 tk.MustInterDirc("create user 'check_priv'") 411 412 // "show create user" for other user requires the SELECT privilege on allegrosql database. 413 tk1 := testkit.NewTestKit(c, s.causetstore) 414 tk1.MustInterDirc("use allegrosql") 415 succ := tk1.Se.Auth(&auth.UserIdentity{Username: "check_priv", Hostname: "127.0.0.1", AuthUsername: "test_show", AuthHostname: "asdf"}, nil, nil) 416 c.Assert(succ, IsTrue) 417 err = tk1.QueryToErr("show create user 'root'@'%'") 418 c.Assert(err, NotNil) 419 420 // "show create user" for current user doesn't check privileges. 421 rows = tk1.MustQuery("show create user current_user") 422 rows.Check(testkit.Events("CREATE USER 'check_priv'@'127.0.0.1' IDENTIFIED WITH 'mysql_native_password' AS '' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK")) 423 } 424 425 func (s *testSuite5) TestUnprivilegedShow(c *C) { 426 427 tk := testkit.NewTestKit(c, s.causetstore) 428 tk.MustInterDirc("CREATE DATABASE testshow") 429 tk.MustInterDirc("USE testshow") 430 tk.MustInterDirc("CREATE TABLE t1 (a int)") 431 tk.MustInterDirc("CREATE TABLE t2 (a int)") 432 433 tk.MustInterDirc(`CREATE USER 'lowprivuser'`) // no grants 434 435 tk.Se.Auth(&auth.UserIdentity{Username: "lowprivuser", Hostname: "192.168.0.1", AuthUsername: "lowprivuser", AuthHostname: "%"}, nil, []byte("012345678901234567890")) 436 rs, err := tk.InterDirc("SHOW TABLE STATUS FROM testshow") 437 c.Assert(err, IsNil) 438 c.Assert(rs, NotNil) 439 440 tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "192.168.0.1", AuthUsername: "root", AuthHostname: "%"}, nil, []byte("012345678901234567890")) 441 tk.MustInterDirc("GRANT ALL ON testshow.t1 TO 'lowprivuser'") 442 tk.Se.Auth(&auth.UserIdentity{Username: "lowprivuser", Hostname: "192.168.0.1", AuthUsername: "lowprivuser", AuthHostname: "%"}, nil, []byte("012345678901234567890")) 443 444 ctx := tk.Se.(stochastikctx.Context) 445 is := petri.GetPetri(ctx).SchemaReplicant() 446 tblInfo, err := is.BlockByName(perceptron.NewCIStr("testshow"), perceptron.NewCIStr("t1")) 447 c.Assert(err, IsNil) 448 createTime := perceptron.TSConvert2Time(tblInfo.Meta().UFIDelateTS).Format("2006-01-02 15:04:05") 449 450 tk.MustQuery("show causet status from testshow").Check(testkit.Events(fmt.Sprintf("t1 InnoDB 10 Compact 0 0 0 0 0 0 <nil> %s <nil> <nil> utf8mb4_bin ", createTime))) 451 452 } 453 454 func (s *testSuite5) TestDefCauslation(c *C) { 455 tk := testkit.NewTestKit(c, s.causetstore) 456 tk.MustInterDirc("use test") 457 458 rs, err := tk.InterDirc("show defCauslation;") 459 c.Assert(err, IsNil) 460 fields := rs.Fields() 461 c.Assert(fields[0].DeferredCauset.Tp, Equals, allegrosql.TypeVarchar) 462 c.Assert(fields[1].DeferredCauset.Tp, Equals, allegrosql.TypeVarchar) 463 c.Assert(fields[2].DeferredCauset.Tp, Equals, allegrosql.TypeLonglong) 464 c.Assert(fields[3].DeferredCauset.Tp, Equals, allegrosql.TypeVarchar) 465 c.Assert(fields[4].DeferredCauset.Tp, Equals, allegrosql.TypeVarchar) 466 c.Assert(fields[5].DeferredCauset.Tp, Equals, allegrosql.TypeLonglong) 467 } 468 469 func (s *testSuite5) TestShowBlockStatus(c *C) { 470 tk := testkit.NewTestKit(c, s.causetstore) 471 472 tk.MustInterDirc("use test") 473 tk.MustInterDirc(`drop causet if exists t;`) 474 tk.MustInterDirc(`create causet t(a bigint);`) 475 476 tk.Se.Auth(&auth.UserIdentity{Username: "root", Hostname: "192.168.0.1", AuthUsername: "root", AuthHostname: "%"}, nil, []byte("012345678901234567890")) 477 478 // It's not easy to test the result contents because every time the test runs, "Create_time" changed. 479 tk.MustInterDirc("show causet status;") 480 rs, err := tk.InterDirc("show causet status;") 481 c.Assert(errors.ErrorStack(err), Equals, "") 482 c.Assert(rs, NotNil) 483 rows, err := stochastik.GetEvents4Test(context.Background(), tk.Se, rs) 484 c.Assert(errors.ErrorStack(err), Equals, "") 485 err = rs.Close() 486 c.Assert(errors.ErrorStack(err), Equals, "") 487 488 for i := range rows { 489 event := rows[i] 490 c.Assert(event.GetString(0), Equals, "t") 491 c.Assert(event.GetString(1), Equals, "InnoDB") 492 c.Assert(event.GetInt64(2), Equals, int64(10)) 493 c.Assert(event.GetString(3), Equals, "Compact") 494 } 495 tk.MustInterDirc(`drop causet if exists tp;`) 496 tk.MustInterDirc(`create causet tp (a int) 497 partition by range(a) 498 ( partition p0 values less than (10), 499 partition p1 values less than (20), 500 partition p2 values less than (maxvalue) 501 );`) 502 rs, err = tk.InterDirc("show causet status from test like 'tp';") 503 c.Assert(errors.ErrorStack(err), Equals, "") 504 rows, err = stochastik.GetEvents4Test(context.Background(), tk.Se, rs) 505 c.Assert(errors.ErrorStack(err), Equals, "") 506 c.Assert(rows[0].GetString(16), Equals, "partitioned") 507 } 508 509 func (s *testSuite5) TestShowSlow(c *C) { 510 tk := testkit.NewTestKit(c, s.causetstore) 511 // The test result is volatile, because 512 // 1. Slow queries is stored in petri, which may be affected by other tests. 513 // 2. DefCauslecting slow queries is a asynchronous process, check immediately may not get the expected result. 514 // 3. Make slow query like "select sleep(1)" would slow the CI. 515 // So, we just cover the code but do not check the result. 516 tk.MustQuery(`admin show slow recent 3`) 517 tk.MustQuery(`admin show slow top 3`) 518 tk.MustQuery(`admin show slow top internal 3`) 519 tk.MustQuery(`admin show slow top all 3`) 520 } 521 522 func (s *testSuite5) TestShowOpenBlocks(c *C) { 523 tk := testkit.NewTestKit(c, s.causetstore) 524 tk.MustQuery("show open blocks") 525 tk.MustQuery("show open blocks in test") 526 } 527 528 func (s *testSuite5) TestShowCreateBlock(c *C) { 529 tk := testkit.NewTestKit(c, s.causetstore) 530 531 tk.MustInterDirc("use test") 532 tk.MustInterDirc("drop causet if exists t1") 533 tk.MustInterDirc("create causet t1(a int,b int)") 534 tk.MustInterDirc("drop view if exists v1") 535 tk.MustInterDirc("create or replace definer=`root`@`127.0.0.1` view v1 as select * from t1") 536 tk.MustQuery("show create causet v1").Check(solitonutil.EventsWithSep("|", "v1|CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`127.0.0.1` ALLEGROALLEGROSQL SECURITY DEFINER VIEW `v1` (`a`, `b`) AS SELECT `test`.`t1`.`a`,`test`.`t1`.`b` FROM `test`.`t1` ")) 537 tk.MustQuery("show create view v1").Check(solitonutil.EventsWithSep("|", "v1|CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`127.0.0.1` ALLEGROALLEGROSQL SECURITY DEFINER VIEW `v1` (`a`, `b`) AS SELECT `test`.`t1`.`a`,`test`.`t1`.`b` FROM `test`.`t1` ")) 538 tk.MustInterDirc("drop view v1") 539 tk.MustInterDirc("drop causet t1") 540 541 tk.MustInterDirc("drop view if exists v") 542 tk.MustInterDirc("create or replace definer=`root`@`127.0.0.1` view v as select JSON_MERGE('{}', '{}') as defCaus;") 543 tk.MustQuery("show create view v").Check(solitonutil.EventsWithSep("|", "v|CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`127.0.0.1` ALLEGROALLEGROSQL SECURITY DEFINER VIEW `v` (`defCaus`) AS SELECT JSON_MERGE('{}', '{}') AS `defCaus` ")) 544 tk.MustInterDirc("drop view if exists v") 545 546 tk.MustInterDirc("drop causet if exists t1") 547 tk.MustInterDirc("create causet t1(a int,b int)") 548 tk.MustInterDirc("create or replace definer=`root`@`127.0.0.1` view v1 as select avg(a),t1.* from t1 group by a") 549 tk.MustQuery("show create view v1").Check(solitonutil.EventsWithSep("|", "v1|CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`127.0.0.1` ALLEGROALLEGROSQL SECURITY DEFINER VIEW `v1` (`avg(a)`, `a`, `b`) AS SELECT AVG(`a`),`test`.`t1`.`a`,`test`.`t1`.`b` FROM `test`.`t1` GROUP BY `a` ")) 550 tk.MustInterDirc("drop view v1") 551 tk.MustInterDirc("create or replace definer=`root`@`127.0.0.1` view v1 as select a+b, t1.* , a as c from t1") 552 tk.MustQuery("show create view v1").Check(solitonutil.EventsWithSep("|", "v1|CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`127.0.0.1` ALLEGROALLEGROSQL SECURITY DEFINER VIEW `v1` (`a+b`, `a`, `b`, `c`) AS SELECT `a`+`b`,`test`.`t1`.`a`,`test`.`t1`.`b`,`a` AS `c` FROM `test`.`t1` ")) 553 tk.MustInterDirc("drop causet t1") 554 tk.MustInterDirc("drop view v1") 555 556 // For issue #9211 557 tk.MustInterDirc("create causet t(c int, b int as (c + 1))ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;") 558 tk.MustQuery("show create causet `t`").Check(solitonutil.EventsWithSep("|", 559 ""+ 560 "t CREATE TABLE `t` (\n"+ 561 " `c` int(11) DEFAULT NULL,\n"+ 562 " `b` int(11) GENERATED ALWAYS AS (`c` + 1) VIRTUAL\n"+ 563 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 564 )) 565 566 tk.MustInterDirc("drop causet t") 567 tk.MustInterDirc("create causet t(c int, b int as (c + 1) not null)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;") 568 tk.MustQuery("show create causet `t`").Check(solitonutil.EventsWithSep("|", 569 ""+ 570 "t CREATE TABLE `t` (\n"+ 571 " `c` int(11) DEFAULT NULL,\n"+ 572 " `b` int(11) GENERATED ALWAYS AS (`c` + 1) VIRTUAL NOT NULL\n"+ 573 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 574 )) 575 tk.MustInterDirc("drop causet t") 576 tk.MustInterDirc("create causet t ( a char(10) charset utf8 defCauslate utf8_bin, b char(10) as (rtrim(a)));") 577 tk.MustQuery("show create causet `t`").Check(solitonutil.EventsWithSep("|", 578 ""+ 579 "t CREATE TABLE `t` (\n"+ 580 " `a` char(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,\n"+ 581 " `b` char(10) GENERATED ALWAYS AS (rtrim(`a`)) VIRTUAL\n"+ 582 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 583 )) 584 tk.MustInterDirc("drop causet t") 585 586 tk.MustInterDirc(`drop causet if exists different_charset`) 587 tk.MustInterDirc(`create causet different_charset(ch1 varchar(10) charset utf8, ch2 varchar(10) charset binary);`) 588 tk.MustQuery(`show create causet different_charset`).Check(solitonutil.EventsWithSep("|", 589 ""+ 590 "different_charset CREATE TABLE `different_charset` (\n"+ 591 " `ch1` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,\n"+ 592 " `ch2` varbinary(10) DEFAULT NULL\n"+ 593 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 594 )) 595 596 tk.MustInterDirc("drop causet if exists t") 597 tk.MustInterDirc("create causet `t` (\n" + 598 "`a` timestamp not null default current_timestamp,\n" + 599 "`b` timestamp(3) default current_timestamp(3),\n" + 600 "`c` datetime default current_timestamp,\n" + 601 "`d` datetime(4) default current_timestamp(4),\n" + 602 "`e` varchar(20) default 'cUrrent_tImestamp',\n" + 603 "`f` datetime(2) default current_timestamp(2) on uFIDelate current_timestamp(2),\n" + 604 "`g` timestamp(2) default current_timestamp(2) on uFIDelate current_timestamp(2))") 605 tk.MustQuery("show create causet `t`").Check(solitonutil.EventsWithSep("|", 606 ""+ 607 "t CREATE TABLE `t` (\n"+ 608 " `a` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,\n"+ 609 " `b` timestamp(3) DEFAULT CURRENT_TIMESTAMP(3),\n"+ 610 " `c` datetime DEFAULT CURRENT_TIMESTAMP,\n"+ 611 " `d` datetime(4) DEFAULT CURRENT_TIMESTAMP(4),\n"+ 612 " `e` varchar(20) DEFAULT 'cUrrent_tImestamp',\n"+ 613 " `f` datetime(2) DEFAULT CURRENT_TIMESTAMP(2) ON UFIDelATE CURRENT_TIMESTAMP(2),\n"+ 614 " `g` timestamp(2) DEFAULT CURRENT_TIMESTAMP(2) ON UFIDelATE CURRENT_TIMESTAMP(2)\n"+ 615 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 616 )) 617 tk.MustInterDirc("drop causet t") 618 619 tk.MustInterDirc("create causet t (a int, b int) shard_row_id_bits = 4 pre_split_regions=3;") 620 tk.MustQuery("show create causet `t`").Check(solitonutil.EventsWithSep("|", 621 ""+ 622 "t CREATE TABLE `t` (\n"+ 623 " `a` int(11) DEFAULT NULL,\n"+ 624 " `b` int(11) DEFAULT NULL\n"+ 625 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin/*!90000 SHARD_ROW_ID_BITS=4 PRE_SPLIT_REGIONS=3 */", 626 )) 627 tk.MustInterDirc("drop causet t") 628 629 tk.MustInterDirc("CREATE TABLE `log` (" + 630 "`LOG_ID` bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT," + 631 "`ROUND_ID` bigint(20) UNSIGNED NOT NULL," + 632 "`USER_ID` int(10) UNSIGNED NOT NULL," + 633 "`USER_IP` int(10) UNSIGNED DEFAULT NULL," + 634 "`END_TIME` datetime NOT NULL," + 635 "`USER_TYPE` int(11) DEFAULT NULL," + 636 "`APP_ID` int(11) DEFAULT NULL," + 637 "PRIMARY KEY (`LOG_ID`,`END_TIME`)," + 638 "KEY `IDX_EndTime` (`END_TIME`)," + 639 "KEY `IDX_RoundId` (`ROUND_ID`)," + 640 "KEY `IDX_UserId_EndTime` (`USER_ID`,`END_TIME`)" + 641 ") ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=505488 " + 642 "PARTITION BY RANGE ( month(`end_time`) ) (" + 643 "PARTITION `p1` VALUES LESS THAN (2)," + 644 "PARTITION `p2` VALUES LESS THAN (3)," + 645 "PARTITION `p3` VALUES LESS THAN (4)," + 646 "PARTITION `p4` VALUES LESS THAN (5)," + 647 "PARTITION `p5` VALUES LESS THAN (6)," + 648 "PARTITION `p6` VALUES LESS THAN (7)," + 649 "PARTITION `p7` VALUES LESS THAN (8)," + 650 "PARTITION `p8` VALUES LESS THAN (9)," + 651 "PARTITION `p9` VALUES LESS THAN (10)," + 652 "PARTITION `p10` VALUES LESS THAN (11)," + 653 "PARTITION `p11` VALUES LESS THAN (12)," + 654 "PARTITION `p12` VALUES LESS THAN (MAXVALUE))") 655 tk.MustQuery("show create causet log").Check(solitonutil.EventsWithSep("|", 656 "log CREATE TABLE `log` (\n"+ 657 " `LOG_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,\n"+ 658 " `ROUND_ID` bigint(20) unsigned NOT NULL,\n"+ 659 " `USER_ID` int(10) unsigned NOT NULL,\n"+ 660 " `USER_IP` int(10) unsigned DEFAULT NULL,\n"+ 661 " `END_TIME` datetime NOT NULL,\n"+ 662 " `USER_TYPE` int(11) DEFAULT NULL,\n"+ 663 " `APP_ID` int(11) DEFAULT NULL,\n"+ 664 " PRIMARY KEY (`LOG_ID`,`END_TIME`),\n"+ 665 " KEY `IDX_EndTime` (`END_TIME`),\n"+ 666 " KEY `IDX_RoundId` (`ROUND_ID`),\n"+ 667 " KEY `IDX_UserId_EndTime` (`USER_ID`,`END_TIME`)\n"+ 668 ") ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=505488\n"+ 669 "PARTITION BY RANGE ( MONTH(`end_time`) ) (\n"+ 670 " PARTITION `p1` VALUES LESS THAN (2),\n"+ 671 " PARTITION `p2` VALUES LESS THAN (3),\n"+ 672 " PARTITION `p3` VALUES LESS THAN (4),\n"+ 673 " PARTITION `p4` VALUES LESS THAN (5),\n"+ 674 " PARTITION `p5` VALUES LESS THAN (6),\n"+ 675 " PARTITION `p6` VALUES LESS THAN (7),\n"+ 676 " PARTITION `p7` VALUES LESS THAN (8),\n"+ 677 " PARTITION `p8` VALUES LESS THAN (9),\n"+ 678 " PARTITION `p9` VALUES LESS THAN (10),\n"+ 679 " PARTITION `p10` VALUES LESS THAN (11),\n"+ 680 " PARTITION `p11` VALUES LESS THAN (12),\n"+ 681 " PARTITION `p12` VALUES LESS THAN (MAXVALUE)\n"+ 682 ")")) 683 684 // for issue #11831 685 tk.MustInterDirc("create causet ttt4(a varchar(123) default null defCauslate utf8mb4_unicode_ci)engine=innodb default charset=utf8mb4 defCauslate=utf8mb4_unicode_ci;") 686 tk.MustQuery("show create causet `ttt4`").Check(solitonutil.EventsWithSep("|", 687 ""+ 688 "ttt4 CREATE TABLE `ttt4` (\n"+ 689 " `a` varchar(123) COLLATE utf8mb4_unicode_ci DEFAULT NULL\n"+ 690 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci", 691 )) 692 tk.MustInterDirc("create causet ttt5(a varchar(123) default null)engine=innodb default charset=utf8mb4 defCauslate=utf8mb4_bin;") 693 tk.MustQuery("show create causet `ttt5`").Check(solitonutil.EventsWithSep("|", 694 ""+ 695 "ttt5 CREATE TABLE `ttt5` (\n"+ 696 " `a` varchar(123) DEFAULT NULL\n"+ 697 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 698 )) 699 700 // for memex index 701 tk.MustInterDirc("drop causet if exists t;") 702 tk.MustInterDirc("create causet t(a int, b real);") 703 tk.MustInterDirc("alter causet t add index expr_idx((a*b+1));") 704 tk.MustQuery("show create causet t;").Check(solitonutil.EventsWithSep("|", 705 ""+ 706 "t CREATE TABLE `t` (\n"+ 707 " `a` int(11) DEFAULT NULL,\n"+ 708 " `b` double DEFAULT NULL,\n"+ 709 " KEY `expr_idx` ((`a` * `b` + 1))\n"+ 710 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 711 )) 712 713 // Fix issue #15175, show create causet sequence_name. 714 tk.MustInterDirc("drop sequence if exists seq") 715 tk.MustInterDirc("create sequence seq") 716 tk.MustQuery("show create causet seq;").Check(testkit.Events("seq CREATE SEQUENCE `seq` start with 1 minvalue 1 maxvalue 9223372036854775806 increment by 1 cache 1000 nocycle ENGINE=InnoDB")) 717 718 // Test for issue #15633, 'binary' defCauslation should be ignored in the result of 'show create causet'. 719 tk.MustInterDirc(`drop causet if exists binary_defCauslate`) 720 tk.MustInterDirc(`create causet binary_defCauslate(a varchar(10)) default defCauslate=binary;`) 721 tk.MustQuery(`show create causet binary_defCauslate`).Check(solitonutil.EventsWithSep("|", 722 ""+ 723 "binary_defCauslate CREATE TABLE `binary_defCauslate` (\n"+ 724 " `a` varbinary(10) DEFAULT NULL\n"+ 725 ") ENGINE=InnoDB DEFAULT CHARSET=binary", // binary defCauslate is ignored 726 )) 727 tk.MustInterDirc(`drop causet if exists binary_defCauslate`) 728 tk.MustInterDirc(`create causet binary_defCauslate(a varchar(10)) default charset=binary defCauslate=binary;`) 729 tk.MustQuery(`show create causet binary_defCauslate`).Check(solitonutil.EventsWithSep("|", 730 ""+ 731 "binary_defCauslate CREATE TABLE `binary_defCauslate` (\n"+ 732 " `a` varbinary(10) DEFAULT NULL\n"+ 733 ") ENGINE=InnoDB DEFAULT CHARSET=binary", // binary defCauslate is ignored 734 )) 735 tk.MustInterDirc(`drop causet if exists binary_defCauslate`) 736 tk.MustInterDirc(`create causet binary_defCauslate(a varchar(10)) default charset=utf8mb4 defCauslate=utf8mb4_bin;`) 737 tk.MustQuery(`show create causet binary_defCauslate`).Check(solitonutil.EventsWithSep("|", 738 ""+ 739 "binary_defCauslate CREATE TABLE `binary_defCauslate` (\n"+ 740 " `a` varchar(10) DEFAULT NULL\n"+ 741 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", // non-binary defCauslate is kept. 742 )) 743 // Test for issue #17 in bug competition, default num and sequence should be shown without quote. 744 tk.MustInterDirc(`drop causet if exists default_num`) 745 tk.MustInterDirc("create causet default_num(a int default 11)") 746 tk.MustQuery("show create causet default_num").Check(solitonutil.EventsWithSep("|", 747 ""+ 748 "default_num CREATE TABLE `default_num` (\n"+ 749 " `a` int(11) DEFAULT 11\n"+ 750 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 751 )) 752 tk.MustInterDirc(`drop causet if exists default_varchar`) 753 tk.MustInterDirc("create causet default_varchar(a varchar(10) default \"haha\")") 754 tk.MustQuery("show create causet default_varchar").Check(solitonutil.EventsWithSep("|", 755 ""+ 756 "default_varchar CREATE TABLE `default_varchar` (\n"+ 757 " `a` varchar(10) DEFAULT 'haha'\n"+ 758 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 759 )) 760 tk.MustInterDirc(`drop causet if exists default_sequence`) 761 tk.MustInterDirc("create causet default_sequence(a int default nextval(seq))") 762 tk.MustQuery("show create causet default_sequence").Check(solitonutil.EventsWithSep("|", 763 ""+ 764 "default_sequence CREATE TABLE `default_sequence` (\n"+ 765 " `a` int(11) DEFAULT nextval(`test`.`seq`)\n"+ 766 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 767 )) 768 769 // MilevaDB defaults (and only supports) foreign_key_checks=0 770 // This means that the child causet can be created before the parent causet. 771 // This behavior is required for mysqldump restores. 772 tk.MustInterDirc(`DROP TABLE IF EXISTS parent, child`) 773 tk.MustInterDirc(`CREATE TABLE child (id INT NOT NULL PRIMARY KEY auto_increment, parent_id INT NOT NULL, INDEX par_ind (parent_id), CONSTRAINT child_ibfk_1 FOREIGN KEY (parent_id) REFERENCES parent(id))`) 774 tk.MustInterDirc(`CREATE TABLE parent ( id INT NOT NULL PRIMARY KEY auto_increment )`) 775 tk.MustQuery(`show create causet child`).Check(solitonutil.EventsWithSep("|", 776 ""+ 777 "child CREATE TABLE `child` (\n"+ 778 " `id` int(11) NOT NULL AUTO_INCREMENT,\n"+ 779 " `parent_id` int(11) NOT NULL,\n"+ 780 " PRIMARY KEY (`id`),\n"+ 781 " KEY `par_ind` (`parent_id`),\n"+ 782 " CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`)\n"+ 783 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 784 )) 785 786 // Test Foreign keys + ON DELETE / ON UFIDelATE 787 tk.MustInterDirc(`DROP TABLE child`) 788 tk.MustInterDirc(`CREATE TABLE child (id INT NOT NULL PRIMARY KEY auto_increment, parent_id INT NOT NULL, INDEX par_ind (parent_id), CONSTRAINT child_ibfk_1 FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE SET NULL ON UFIDelATE CASCADE)`) 789 tk.MustQuery(`show create causet child`).Check(solitonutil.EventsWithSep("|", 790 ""+ 791 "child CREATE TABLE `child` (\n"+ 792 " `id` int(11) NOT NULL AUTO_INCREMENT,\n"+ 793 " `parent_id` int(11) NOT NULL,\n"+ 794 " PRIMARY KEY (`id`),\n"+ 795 " KEY `par_ind` (`parent_id`),\n"+ 796 " CONSTRAINT `child_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `parent` (`id`) ON DELETE SET NULL ON UFIDelATE CASCADE\n"+ 797 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 798 )) 799 800 } 801 802 func (s *testAutoRandomSuite) TestShowCreateBlockAutoRandom(c *C) { 803 tk := testkit.NewTestKit(c, s.causetstore) 804 tk.MustInterDirc("use test") 805 806 // Basic show create causet. 807 tk.MustInterDirc("create causet auto_random_tbl1 (a bigint primary key auto_random(3), b varchar(255))") 808 tk.MustQuery("show create causet `auto_random_tbl1`").Check(solitonutil.EventsWithSep("|", 809 ""+ 810 "auto_random_tbl1 CREATE TABLE `auto_random_tbl1` (\n"+ 811 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(3) */,\n"+ 812 " `b` varchar(255) DEFAULT NULL,\n"+ 813 " PRIMARY KEY (`a`)\n"+ 814 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 815 )) 816 817 // Implicit auto_random value should be shown explicitly. 818 tk.MustInterDirc("create causet auto_random_tbl2 (a bigint auto_random primary key, b char)") 819 tk.MustQuery("show create causet auto_random_tbl2").Check(solitonutil.EventsWithSep("|", 820 ""+ 821 "auto_random_tbl2 CREATE TABLE `auto_random_tbl2` (\n"+ 822 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,\n"+ 823 " `b` char(1) DEFAULT NULL,\n"+ 824 " PRIMARY KEY (`a`)\n"+ 825 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 826 )) 827 828 // Special version comment can be shown in MilevaDB with new version. 829 tk.MustInterDirc("create causet auto_random_tbl3 (a bigint /*T![auto_rand] auto_random */ primary key)") 830 tk.MustQuery("show create causet auto_random_tbl3").Check(solitonutil.EventsWithSep("|", 831 ""+ 832 "auto_random_tbl3 CREATE TABLE `auto_random_tbl3` (\n"+ 833 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,\n"+ 834 " PRIMARY KEY (`a`)\n"+ 835 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 836 )) 837 // Test show auto_random causet option. 838 tk.MustInterDirc("create causet auto_random_tbl4 (a bigint primary key auto_random(5), b varchar(255)) auto_random_base = 100") 839 tk.MustQuery("show create causet `auto_random_tbl4`").Check(solitonutil.EventsWithSep("|", 840 ""+ 841 "auto_random_tbl4 CREATE TABLE `auto_random_tbl4` (\n"+ 842 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,\n"+ 843 " `b` varchar(255) DEFAULT NULL,\n"+ 844 " PRIMARY KEY (`a`)\n"+ 845 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![auto_rand_base] AUTO_RANDOM_BASE=100 */", 846 )) 847 // Test implicit auto_random with auto_random causet option. 848 tk.MustInterDirc("create causet auto_random_tbl5 (a bigint auto_random primary key, b char) auto_random_base 50") 849 tk.MustQuery("show create causet auto_random_tbl5").Check(solitonutil.EventsWithSep("|", 850 ""+ 851 "auto_random_tbl5 CREATE TABLE `auto_random_tbl5` (\n"+ 852 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,\n"+ 853 " `b` char(1) DEFAULT NULL,\n"+ 854 " PRIMARY KEY (`a`)\n"+ 855 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![auto_rand_base] AUTO_RANDOM_BASE=50 */", 856 )) 857 // Test auto_random causet option already with special comment. 858 tk.MustInterDirc("create causet auto_random_tbl6 (a bigint /*T![auto_rand] auto_random */ primary key) auto_random_base 200") 859 tk.MustQuery("show create causet auto_random_tbl6").Check(solitonutil.EventsWithSep("|", 860 ""+ 861 "auto_random_tbl6 CREATE TABLE `auto_random_tbl6` (\n"+ 862 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,\n"+ 863 " PRIMARY KEY (`a`)\n"+ 864 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![auto_rand_base] AUTO_RANDOM_BASE=200 */", 865 )) 866 } 867 868 // Override testAutoRandomSuite to test auto id cache. 869 func (s *testAutoRandomSuite) TestAutoIdCache(c *C) { 870 tk := testkit.NewTestKit(c, s.causetstore) 871 tk.MustInterDirc("use test") 872 873 tk.MustInterDirc("drop causet if exists t") 874 tk.MustInterDirc("create causet t(a int auto_increment key) auto_id_cache = 10") 875 tk.MustQuery("show create causet t").Check(solitonutil.EventsWithSep("|", 876 ""+ 877 "t CREATE TABLE `t` (\n"+ 878 " `a` int(11) NOT NULL AUTO_INCREMENT,\n"+ 879 " PRIMARY KEY (`a`)\n"+ 880 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![auto_id_cache] AUTO_ID_CACHE=10 */", 881 )) 882 tk.MustInterDirc("drop causet if exists t") 883 tk.MustInterDirc("create causet t(a int auto_increment unique, b int key) auto_id_cache 100") 884 tk.MustQuery("show create causet t").Check(solitonutil.EventsWithSep("|", 885 ""+ 886 "t CREATE TABLE `t` (\n"+ 887 " `a` int(11) NOT NULL AUTO_INCREMENT,\n"+ 888 " `b` int(11) NOT NULL,\n"+ 889 " PRIMARY KEY (`b`),\n"+ 890 " UNIQUE KEY `a` (`a`)\n"+ 891 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![auto_id_cache] AUTO_ID_CACHE=100 */", 892 )) 893 tk.MustInterDirc("drop causet if exists t") 894 tk.MustInterDirc("create causet t(a int key) auto_id_cache 5") 895 tk.MustQuery("show create causet t").Check(solitonutil.EventsWithSep("|", 896 ""+ 897 "t CREATE TABLE `t` (\n"+ 898 " `a` int(11) NOT NULL,\n"+ 899 " PRIMARY KEY (`a`)\n"+ 900 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![auto_id_cache] AUTO_ID_CACHE=5 */", 901 )) 902 } 903 904 func (s *testAutoRandomSuite) TestAutoRandomBase(c *C) { 905 c.Assert(failpoint.Enable("github.com/whtcorpsinc/milevadb/spacetime/autoid/mockAutoIDChange", `return(true)`), IsNil) 906 defer func() { 907 c.Assert(failpoint.Disable("github.com/whtcorpsinc/milevadb/spacetime/autoid/mockAutoIDChange"), IsNil) 908 }() 909 910 tk := testkit.NewTestKit(c, s.causetstore) 911 tk.MustInterDirc("set @@allow_auto_random_explicit_insert = true") 912 tk.MustInterDirc("use test") 913 914 tk.MustInterDirc("drop causet if exists t") 915 tk.MustInterDirc("create causet t (a bigint primary key auto_random(5), b int unique key auto_increment) auto_random_base = 100, auto_increment = 100") 916 tk.MustQuery("show create causet t").Check(solitonutil.EventsWithSep("|", 917 ""+ 918 "t CREATE TABLE `t` (\n"+ 919 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,\n"+ 920 " `b` int(11) NOT NULL AUTO_INCREMENT,\n"+ 921 " PRIMARY KEY (`a`),\n"+ 922 " UNIQUE KEY `b` (`b`)\n"+ 923 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=100 /*T![auto_rand_base] AUTO_RANDOM_BASE=100 */", 924 )) 925 926 tk.MustInterDirc("insert into t(`a`) values (1000)") 927 tk.MustQuery("show create causet t").Check(solitonutil.EventsWithSep("|", 928 ""+ 929 "t CREATE TABLE `t` (\n"+ 930 " `a` bigint(20) NOT NULL /*T![auto_rand] AUTO_RANDOM(5) */,\n"+ 931 " `b` int(11) NOT NULL AUTO_INCREMENT,\n"+ 932 " PRIMARY KEY (`a`),\n"+ 933 " UNIQUE KEY `b` (`b`)\n"+ 934 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=5100 /*T![auto_rand_base] AUTO_RANDOM_BASE=6001 */", 935 )) 936 } 937 938 func (s *testSuite5) TestShowEscape(c *C) { 939 tk := testkit.NewTestKit(c, s.causetstore) 940 941 tk.MustInterDirc("use test") 942 tk.MustInterDirc("drop causet if exists `t``abl\"e`") 943 tk.MustInterDirc("create causet `t``abl\"e`(`c``olum\"n` int(11) primary key)") 944 tk.MustQuery("show create causet `t``abl\"e`").Check(solitonutil.EventsWithSep("|", 945 ""+ 946 "t`abl\"e CREATE TABLE `t``abl\"e` (\n"+ 947 " `c``olum\"n` int(11) NOT NULL,\n"+ 948 " PRIMARY KEY (`c``olum\"n`)\n"+ 949 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 950 )) 951 952 // ANSI_QUOTES will change the SHOW output 953 tk.MustInterDirc("set @old_sql_mode=@@sql_mode") 954 tk.MustInterDirc("set sql_mode=ansi_quotes") 955 tk.MustQuery("show create causet \"t`abl\"\"e\"").Check(solitonutil.EventsWithSep("|", 956 ""+ 957 "t`abl\"e CREATE TABLE \"t`abl\"\"e\" (\n"+ 958 " \"c`olum\"\"n\" int(11) NOT NULL,\n"+ 959 " PRIMARY KEY (\"c`olum\"\"n\")\n"+ 960 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin", 961 )) 962 963 tk.MustInterDirc("rename causet \"t`abl\"\"e\" to t") 964 tk.MustInterDirc("set sql_mode=@old_sql_mode") 965 } 966 967 func (s *testSuite5) TestShowBuiltin(c *C) { 968 tk := testkit.NewTestKit(c, s.causetstore) 969 res := tk.MustQuery("show builtins;") 970 c.Assert(res, NotNil) 971 rows := res.Events() 972 c.Assert(268, Equals, len(rows)) 973 c.Assert("abs", Equals, rows[0][0].(string)) 974 c.Assert("yearweek", Equals, rows[267][0].(string)) 975 } 976 977 func (s *testSuite5) TestShowClusterConfig(c *C) { 978 tk := testkit.NewTestKit(c, s.causetstore) 979 tk.MustInterDirc("use test") 980 981 var confItems [][]types.Causet 982 var confErr error 983 var confFunc interlock.TestShowClusterConfigFunc = func() ([][]types.Causet, error) { 984 return confItems, confErr 985 } 986 tk.Se.SetValue(interlock.TestShowClusterConfigKey, confFunc) 987 strs2Items := func(strs ...string) []types.Causet { 988 items := make([]types.Causet, 0, len(strs)) 989 for _, s := range strs { 990 items = append(items, types.NewStringCauset(s)) 991 } 992 return items 993 } 994 confItems = append(confItems, strs2Items("milevadb", "127.0.0.1:1111", "log.level", "info")) 995 confItems = append(confItems, strs2Items("fidel", "127.0.0.1:2222", "log.level", "info")) 996 confItems = append(confItems, strs2Items("einsteindb", "127.0.0.1:3333", "log.level", "info")) 997 tk.MustQuery("show config").Check(testkit.Events( 998 "milevadb 127.0.0.1:1111 log.level info", 999 "fidel 127.0.0.1:2222 log.level info", 1000 "einsteindb 127.0.0.1:3333 log.level info")) 1001 tk.MustQuery("show config where type='milevadb'").Check(testkit.Events( 1002 "milevadb 127.0.0.1:1111 log.level info")) 1003 tk.MustQuery("show config where type like '%ti%'").Check(testkit.Events( 1004 "milevadb 127.0.0.1:1111 log.level info", 1005 "einsteindb 127.0.0.1:3333 log.level info")) 1006 1007 confErr = fmt.Errorf("something unknown error") 1008 c.Assert(tk.QueryToErr("show config"), ErrorMatches, confErr.Error()) 1009 } 1010 1011 func (s *testSerialSuite1) TestShowCreateBlockWithIntegerDisplayLengthWarnings(c *C) { 1012 BerolinaSQLtypes.MilevaDBStrictIntegerDisplayWidth = true 1013 defer func() { 1014 BerolinaSQLtypes.MilevaDBStrictIntegerDisplayWidth = false 1015 }() 1016 tk := testkit.NewTestKit(c, s.causetstore) 1017 tk.MustInterDirc("use test") 1018 1019 tk.MustInterDirc("drop causet if exists t") 1020 tk.MustInterDirc("create causet t(a int(2), b varchar(2))") 1021 tk.MustQuery("show warnings").Check(testkit.Events("Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.")) 1022 tk.MustQuery("show create causet t").Check(testkit.Events("t CREATE TABLE `t` (\n" + 1023 " `a` int DEFAULT NULL,\n" + 1024 " `b` varchar(2) DEFAULT NULL\n" + 1025 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) 1026 1027 tk.MustInterDirc("drop causet if exists t") 1028 tk.MustInterDirc("create causet t(a bigint(10), b bigint)") 1029 tk.MustQuery("show warnings").Check(testkit.Events("Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.")) 1030 tk.MustQuery("show create causet t").Check(testkit.Events("t CREATE TABLE `t` (\n" + 1031 " `a` bigint DEFAULT NULL,\n" + 1032 " `b` bigint DEFAULT NULL\n" + 1033 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) 1034 1035 tk.MustInterDirc("drop causet if exists t") 1036 tk.MustInterDirc("create causet t(a tinyint(5), b tinyint(2), c tinyint)") 1037 // Here it will occur 2 warnings. 1038 tk.MustQuery("show warnings").Check(testkit.Events("Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.", 1039 "Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.")) 1040 tk.MustQuery("show create causet t").Check(testkit.Events("t CREATE TABLE `t` (\n" + 1041 " `a` tinyint DEFAULT NULL,\n" + 1042 " `b` tinyint DEFAULT NULL,\n" + 1043 " `c` tinyint DEFAULT NULL\n" + 1044 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) 1045 1046 tk.MustInterDirc("drop causet if exists t") 1047 tk.MustInterDirc("create causet t(a smallint(5), b smallint)") 1048 tk.MustQuery("show warnings").Check(testkit.Events("Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.")) 1049 tk.MustQuery("show create causet t").Check(testkit.Events("t CREATE TABLE `t` (\n" + 1050 " `a` smallint DEFAULT NULL,\n" + 1051 " `b` smallint DEFAULT NULL\n" + 1052 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) 1053 1054 tk.MustInterDirc("drop causet if exists t") 1055 tk.MustInterDirc("create causet t(a mediumint(5), b mediumint)") 1056 tk.MustQuery("show warnings").Check(testkit.Events("Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.")) 1057 tk.MustQuery("show create causet t").Check(testkit.Events("t CREATE TABLE `t` (\n" + 1058 " `a` mediumint DEFAULT NULL,\n" + 1059 " `b` mediumint DEFAULT NULL\n" + 1060 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) 1061 1062 tk.MustInterDirc("drop causet if exists t") 1063 tk.MustInterDirc("create causet t(a int1(1), b int2(2), c int3, d int4, e int8)") 1064 tk.MustQuery("show warnings").Check(testkit.Events("Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.", 1065 "Warning 1064 You have an error in your ALLEGROALLEGROSQL syntax; check the manual that corresponds to your MilevaDB version for the right syntax to use [BerolinaSQL:1681]Integer display width is deprecated and will be removed in a future release.")) 1066 tk.MustQuery("show create causet t").Check(testkit.Events("t CREATE TABLE `t` (\n" + 1067 " `a` tinyint DEFAULT NULL,\n" + 1068 " `b` smallint DEFAULT NULL,\n" + 1069 " `c` mediumint DEFAULT NULL,\n" + 1070 " `d` int DEFAULT NULL,\n" + 1071 " `e` bigint DEFAULT NULL\n" + 1072 ") ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin")) 1073 }