MCPcopy
hub / github.com/pingcap/tidb / TestGBKEncoding

Function TestGBKEncoding

pkg/parser/parser_test.go:7432–7478  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

7430}
7431
7432func TestGBKEncoding(t *testing.T) {
7433 p := parser.New()
7434 gbkEncoding, _ := charset.Lookup("gbk")
7435 encoder := gbkEncoding.NewEncoder()
7436 sql, err := encoder.String("create table 测试表 (测试列 varchar(255) default 'GBK测试用例');")
7437 require.NoError(t, err)
7438
7439 stmt, _, err := p.ParseSQL(sql)
7440 require.NoError(t, err)
7441 checker := &gbkEncodingChecker{}
7442 _, _ = stmt[0].Accept(checker)
7443 require.NotEqual(t, "测试表", checker.tblName)
7444 require.NotEqual(t, "测试列", checker.colName)
7445
7446 gbkOpt := parser.CharsetClient("gbk")
7447 stmt, _, err = p.ParseSQL(sql, gbkOpt)
7448 require.NoError(t, err)
7449 _, _ = stmt[0].Accept(checker)
7450 require.Equal(t, "测试表", checker.tblName)
7451 require.Equal(t, "测试列", checker.colName)
7452 require.Equal(t, "GBK测试用例", checker.expr)
7453
7454 _, _, err = p.ParseSQL("select _gbk '\xc6\x5c' from dual;")
7455 require.Error(t, err)
7456
7457 for _, test := range []struct {
7458 sql string
7459 err bool
7460 }{
7461 {"select '\xc6\x5c' from `\xab\x60`;", false},
7462 {`prepare p1 from "insert into t values ('中文');";`, false},
7463 {"select '啊';", false},
7464 {"create table t1(s set('a一','b二','c三'));", false},
7465 {"insert into t3 values('一a');", false},
7466 {"select '\xa5\x5c'", false},
7467 {"select '''\xa5\x5c'", false},
7468 {"select ```\xa5\x5c`", false},
7469 {"select '\x65\x5c'", true},
7470 } {
7471 _, _, err = p.ParseSQL(test.sql, gbkOpt)
7472 if test.err {
7473 require.Error(t, err, test.sql)
7474 } else {
7475 require.NoError(t, err, test.sql)
7476 }
7477 }
7478}
7479
7480type gbkEncodingChecker struct {
7481 tblName string

Callers

nothing calls this directly

Calls 9

NewFunction · 0.92
LookupFunction · 0.92
CharsetClientTypeAlias · 0.92
NewEncoderMethod · 0.65
StringMethod · 0.65
ParseSQLMethod · 0.65
AcceptMethod · 0.65
EqualMethod · 0.65
ErrorMethod · 0.65

Tested by

no test coverage detected