tidb源码学习之ast包

基本结构 ast.go

基本结构

基本实现 base.go

和上图很类似,只是属于内部实现,提供了基本的能力,用于更细化的类型实现。 基本实现

函数调用 functions.go

分别为聚合函数,普通函数,转换函数

函数调用

可视化AST

为了方便理解AST,需要有个简单的可视化工具。

type astViewer struct {
	level int
}

// Enter implements ast.Visitor interface.
func (av *astViewer) Enter(inNode ast.Node) (outNode ast.Node, skipChildren bool) {
	fmt.Println(strings.Repeat("  ", av.level), reflect.TypeOf(inNode))
	av.level++
	return inNode, false
}

// Leave implements ast.Visitor interface.
func (av *astViewer) Leave(inNode ast.Node) (node ast.Node, ok bool) {
	av.level--
	return inNode, true
}

// How to use it.
node.Accept(&astViewer{})

DML语句 dml.go

dml语句类型

dml语句类型

dml语句还有不少内部结构,简单分类一下:

字段相关部分,其中WildCardField是一种特殊的SelectField,FieldList包括多个SelectField

字段

表相关部分,其中从外到里关系是TableRefsClause - Join - TableSource - TableName

表

条件相关部分,就不解释了

条件

DDL语句 ddl.go

ddl

表达式语句 expression.go

函数 functions.go

系统管理语句 misc.go