Skip to content

Commit 947d4ab

Browse files
authored
ignore hint when meet unknow token in hint (pingcap#80)
1 parent c011c83 commit 947d4ab

10 files changed

+3472
-3423
lines changed

ast/format_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (ts *testAstFormatSuite) TestAstFormat(c *C) {
9090
for _, tt := range testcases {
9191
expr := fmt.Sprintf("select %s", tt.input)
9292
charset, collation := getDefaultCharsetAndCollate()
93-
stmts, err := parser.New().Parse(expr, charset, collation)
93+
stmts, _, err := parser.New().Parse(expr, charset, collation)
9494
node := stmts[0].(*ast.SelectStmt).Fields.Fields[0].Expr
9595
c.Assert(err, IsNil)
9696

ast/misc_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ constraint foreign key (jobabbr) references ffxi_jobtype (jobabbr) on delete cas
100100
);
101101
`
102102
parse := parser.New()
103-
stmts, err := parse.Parse(sql, "", "")
103+
stmts, _, err := parse.Parse(sql, "", "")
104104
c.Assert(err, IsNil)
105105
for _, stmt := range stmts {
106106
stmt.Accept(visitor{})
@@ -119,7 +119,7 @@ show create table t;
119119
load data infile '/tmp/t.csv' into table t fields terminated by 'ab' enclosed by 'b';`
120120

121121
p := parser.New()
122-
stmts, err := p.Parse(sql, "", "")
122+
stmts, _, err := p.Parse(sql, "", "")
123123
c.Assert(err, IsNil)
124124
for _, stmt := range stmts {
125125
stmt.Accept(visitor{})

bench_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ func BenchmarkSysbenchSelect(b *testing.B) {
2222
sql := "SELECT pad FROM sbtest1 WHERE id=1;"
2323
b.ResetTimer()
2424
for i := 0; i < b.N; i++ {
25-
_, err := parser.Parse(sql, "", "")
25+
_, _, err := parser.Parse(sql, "", "")
2626
if err != nil {
2727
b.Fatal(err)
2828
}
@@ -37,7 +37,7 @@ func BenchmarkParseComplex(b *testing.B) {
3737
b.ResetTimer()
3838
for i := 0; i < b.N; i++ {
3939
for _, v := range table {
40-
_, err := parser.Parse(v, "", "")
40+
_, _, err := parser.Parse(v, "", "")
4141
if err != nil {
4242
b.Failed()
4343
}
@@ -56,7 +56,7 @@ func BenchmarkParseSimple(b *testing.B) {
5656
b.ResetTimer()
5757
for i := 0; i < b.N; i++ {
5858
for _, v := range table {
59-
_, err := parser.Parse(v, "", "")
59+
_, _, err := parser.Parse(v, "", "")
6060
if err != nil {
6161
b.Failed()
6262
}

goyacc/main.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
// type yyLexer interface {
8080
// Lex(lval *yySymType) int
8181
// Errorf(format string, a ...interface{})
82-
// Errors() []error
82+
// Errors() (warns []error, errs []error)
8383
// }
8484
//
8585
// Optionally the argument to yyParse may implement the following interface:
@@ -517,7 +517,7 @@ var %[1]sDebug = 0
517517
type %[1]sLexer interface {
518518
Lex(lval *%[1]sSymType) int
519519
Errorf(format string, a ...interface{})
520-
Errors() []error
520+
Errors() (warns []error, errs []error)
521521
}
522522
523523
type %[1]sLexerEx interface {

lexer.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type Scanner struct {
3838
buf bytes.Buffer
3939

4040
errs []error
41+
warns []error
4142
stmtStartPos int
4243

4344
// For scanning such kind of comment: /*! MySQL-specific code */ or /*+ optimizer hint */
@@ -88,16 +89,17 @@ func (s *optimizerHintScanner) scan() (tok int, pos Pos, lit string) {
8889
return
8990
}
9091

91-
// Errors returns the errors during a scan.
92-
func (s *Scanner) Errors() []error {
93-
return s.errs
92+
// Errors returns the errors and warns during a scan.
93+
func (s *Scanner) Errors() (warns []error, errs []error) {
94+
return s.warns, s.errs
9495
}
9596

9697
// reset resets the sql string to be scanned.
9798
func (s *Scanner) reset(sql string) {
9899
s.r = reader{s: sql, p: Pos{Line: 1}}
99100
s.buf.Reset()
100101
s.errs = s.errs[:0]
102+
s.warns = s.warns[:0]
101103
s.stmtStartPos = 0
102104
s.specialComment = nil
103105
}

0 commit comments

Comments
 (0)