@@ -16,6 +16,7 @@ package generatedexpr
16
16
17
17
import (
18
18
"fmt"
19
+ "sync"
19
20
20
21
"github.com/pingcap/errors"
21
22
"github.com/pingcap/tidb/pkg/meta/model"
@@ -53,14 +54,18 @@ func (nr *nameResolver) Leave(inNode ast.Node) (node ast.Node, ok bool) {
53
54
return inNode , true
54
55
}
55
56
57
+ var parserPool = & sync.Pool {New : func () any { return parser .New () }}
58
+
56
59
// ParseExpression parses an ExprNode from a string.
57
60
// When TiDB loads infoschema from TiKV, `GeneratedExprString`
58
61
// of `ColumnInfo` is a string field, so we need to parse
59
62
// it into ast.ExprNode. This function is for that.
60
63
func ParseExpression (expr string ) (node ast.ExprNode , err error ) {
61
64
expr = fmt .Sprintf ("select %s" , expr )
62
65
charset , collation := charset .GetDefaultCharsetAndCollate ()
63
- stmts , _ , err := parser .New ().ParseSQL (expr ,
66
+ parse := parserPool .Get ().(* parser.Parser )
67
+ defer parserPool .Put (parse )
68
+ stmts , _ , err := parse .ParseSQL (expr ,
64
69
parser .CharsetConnection (charset ),
65
70
parser .CollationConnection (collation ))
66
71
if err == nil {
0 commit comments