SQL语句解析为AST
2019-04-02
TiDB中的SQL Parser模块现在独立为一个库了,在其他项目也可以很方便的调用。
一个例子:
AST
解析出来是如下的样子:
L-0 *ast.SelectStmt SELECT t1.a, t2.b FROM t1 JOIN t2 ON t1.id = t2.fid WHERE t1.c>100
L-1 *ast.TableRefsClause
L-2 *ast.Join
L-3 *ast.TableSource
L-4 *ast.TableName
L-3 *ast.TableSource
L-4 *ast.TableName
L-3 *ast.OnCondition
L-4 *ast.BinaryOperationExpr
L-5 *ast.ColumnNameExpr
L-6 *ast.ColumnName
L-5 *ast.ColumnNameExpr
L-6 *ast.ColumnName
L-1 *ast.BinaryOperationExpr
L-2 *ast.ColumnNameExpr
L-3 *ast.ColumnName
L-2 *driver.ValueExpr
L-1 *ast.FieldList
L-2 *ast.SelectField t1.a
L-3 *ast.ColumnNameExpr
L-4 *ast.ColumnName
L-2 *ast.SelectField t2.b
L-3 *ast.ColumnNameExpr
L-4 *ast.ColumnName
SELECT语句被解析为三部分(L-1), TableRefsClause对应FROM语句部分,BinaryOperationExpr对应WHERE语句部分,FieldList对应Select字段部分