HCM

Happy Coding Monkey

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字段部分