From ddfd36a50d9c2b6e165c05ef51a154d379a411b4 Mon Sep 17 00:00:00 2001 From: Ti Chi Robot Date: Fri, 18 Aug 2023 15:17:01 +0800 Subject: [PATCH] parser: reset `lexer.identifierDot` correctly when reusing parsers (#45903) (#45909) close pingcap/tidb#45898 --- parser/lexer.go | 1 + parser/parser_test.go | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/parser/lexer.go b/parser/lexer.go index 0a172abfda027..caf289cfefd81 100644 --- a/parser/lexer.go +++ b/parser/lexer.go @@ -98,6 +98,7 @@ func (s *Scanner) reset(sql string) { s.stmtStartPos = 0 s.inBangComment = false s.lastKeyword = 0 + s.identifierDot = false } func (s *Scanner) stmtText() string { diff --git a/parser/parser_test.go b/parser/parser_test.go index 4706ef1f196d1..2b052ca422884 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -7192,3 +7192,15 @@ func TestTTLTableOption(t *testing.T) { RunTest(t, table, false) } + +func TestIssue45898(t *testing.T) { + p := parser.New() + p.ParseSQL("a.") + stmts, _, err := p.ParseSQL("select count(1) from t") + require.NoError(t, err) + var sb strings.Builder + restoreCtx := NewRestoreCtx(DefaultRestoreFlags, &sb) + sb.Reset() + stmts[0].Restore(restoreCtx) + require.Equal(t, "SELECT COUNT(1) FROM `t`", sb.String()) +}