(t *testing.T)
| 7430 | } |
| 7431 | |
| 7432 | func 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 | |
| 7480 | type gbkEncodingChecker struct { |
| 7481 | tblName string |
nothing calls this directly
no test coverage detected