在 github.com/dolthub/go-mysql-server/sql/plan 库中,plan 目录下的文件主要包括以下几个:
plan.go:定义了 Plan 接口,表示查询执行计划。该接口包含了获取执行器、获取输入计划、获取输出计划等方法。
explain.go:定义了 ExplainPlan 结构体和相关方法,用于生成查询执行计划的说明文档。
node.go:定义了 Node 接口和相关结构体。Node 表示一个节点,每个节点都可以连接到其他节点上。Node 的实现类似于二叉树,其中一些节点是叶子节点(例如 Table 节点),而其他节点则具有左右儿子节点(例如 Join 节点)。
factory.go:定义了 PlanFactory 接口和相关结构体。PlanFactory 用于创建新的 Plan 实例,并提供创建不同类型 Plan 的方法。
result.go:定义了 ResultPlan 和 RowIter 接口及其实现类。ResultPlan 表示返回结果的查询执行计划,RowIter 用于迭代行结果集并返回 Row 实例。
walk.go:定义了 Walk 方法及其实现类。Walk 方法遍历整个查询执行计划,并调用回调函数处理每个节点。
这些文件一起组成了 Go MySQL Server 中的查询执行计划模块,在 SQL 查询解析后生成相应的执行计划,并将其转换为可以被底层存储引擎使用的格式。