Documentation
¶
Overview ¶
agg.go 实现聚合算子 AggOp(GROUP BY + COUNT/SUM/AVG/MAX/MIN + HAVING)
analyze.go ANALYZE TABLE 算子——采集列级统计信息和直方图(OPT-1)
build.go 将 PhysicalPlan 组装为 Operator 执行树
coerce.go 写入前的类型强制转换。 INSERT/UPDATE 的列值在 Eval 之后、encoder 编码之前经过此层, 将字符串、float64 等外部类型按目标列类型转为存储所需的 Go 类型。
count_stats.go — COUNT(*) fast path: read from TableStats, fall back to table scan.
ddl.go CreateTable/DropTable/CreateIndex/DropIndex 算子
delete.go Delete 算子:删除子算子输出的所有行
distinct.go SELECT DISTINCT 去重算子
dual.go DualScan 算子:产生一行空行(用于 SELECT expr 无 FROM 场景)
evaluator.go 表达式求值器(对 Row 中的一行数据进行求值)
Package executor 实现 VDS SQL 层的 Volcano 模型执行器。
每个算子实现 Operator 接口(Open/Next/Close),组成执行树。 执行树由 planner.PhysicalPlan 直接映射而来(M1 无规则重写)。
explain.go EXPLAIN 算子:渲染物理计划树为文本行
filter.go Filter 算子:对子算子的输出按谓词过滤
fk.go FOREIGN KEY 引用完整性检查(完整实现)。 支持:INSERT/UPDATE 子表检查、DELETE/UPDATE 父表检查、
ON DELETE/UPDATE CASCADE/SET NULL/RESTRICT、 多列复合 FK、引用 UNIQUE 索引列(不仅限于 PK)。
funcs.go 内置函数注册表与求值器 — 字符串函数 / CASE WHEN
index_maint.go 二级索引维护辅助函数(INSERT/UPDATE/DELETE 时调用)
index_scan.go IndexScan 算子:扫描二级索引区间,回表读完整行(或覆盖索引直接返回)
insert.go Insert 算子:写入单行数据
join.go 实现 Nested Loop Join 算子(支持 INNER / LEFT OUTER / RIGHT OUTER)
json_funcs.go JSON 类型辅助函数:序列化、路径提取、类型判断
metadata.go 元数据查询算子:SHOW TABLES / SHOW COLUMNS / INFORMATION_SCHEMA 虚拟扫描
multi_get.go MultiGetOp 算子——IN 子句多点查优化(OPT-2)
partial_index.go 部分索引运行时过滤:MatchIndexFilter 供 index_maint 使用
project.go Project 算子:按投影表达式列表重写输出行
savepoint.go SAVEPOINT / ROLLBACK TO / RELEASE 算子
scan.go TableScan 算子:支持全表扫描、点查和范围扫描,逐行解码为 Row
setop.go UNION / INTERSECT / EXCEPT 集合运算算子
P2-SQ-15:优化方向说明 ——
当前实现将左右子查询全量物化到内存后用 hash-set 合并。 一个更成熟的优化方向是: - 若两侧均为独立的全表扫描 / 索引扫描,可用 goroutine 并行收集行; - 对于 ORDER BY + LIMIT 场景,可实现流式合并(merge-join 变体)避免全量物化。 当前仅实现了最基础的并行收集优化(见 materialize 中的 go-func 并发)。
sort.go 实现 ORDER BY 排序算子(SortOp)和 LIMIT/OFFSET 截断算子(LimitOp)
subquery.go 子查询求值器:标量子查询 / IN (SELECT) / EXISTS (SELECT)
update.go Update 算子:按子算子输出的行集批量更新
vm.go — 表达式字节码虚拟机(M2)
Index ¶
- Constants
- func CheckConstraints(row []types.Value, table *catalog.TableDesc) error
- func CoerceAssignments(assignments map[int]types.Value, table *catalog.TableDesc) error
- func CoerceRow(row []types.Value, table *catalog.TableDesc) error
- func Eval(e expr.Expression, row Row, params []interface{}, ctx ...*ExecContext) (retVal interface{}, retErr error)
- func ExecVM(prog *VMProgram, row Row, params []interface{}) (interface{}, error)
- func MatchIndexFilter(idx catalog.IndexDesc, row Row, params []interface{}) bool
- type AggOp
- type AlterTableOp
- type AnalyzeOp
- type CountStatsOp
- type CreateIndexOp
- type CreateTableOp
- type CreateViewOp
- type DeleteOp
- type DistinctOp
- type DropIndexOp
- type DropTableOp
- type DropViewOp
- type DualScanOp
- type ExecContext
- type ExplainOp
- type FilterOp
- type IndexScanOp
- type InfoSchemaColumnsOp
- type InfoSchemaTablesOp
- type InfoSchemaViewsOp
- type InsertOp
- type LimitOp
- type MultiGetOp
- type NLJOp
- type Operator
- type ProjectOp
- type ReleaseSavepointOp
- type RollbackToSavepointOp
- type Row
- type SavepointOp
- type Scanner
- type SetOpOp
- type ShowColumnsOp
- type ShowTablesOp
- type SortOp
- type TableScanOp
- type TruncateTableOp
- type UpdateOp
- type VMInstruction
- type VMProgram
Constants ¶
const MaxSortRows = 1000000
MaxSortRows 排序算子允许的最大行数(M-SQL-3 修复:防止恶意 ORDER BY 导致内存溢出) 可通过配置项覆盖,默认 1000000 行(约 100MB,假设每行 100 字节)
Variables ¶
This section is empty.
Functions ¶
func CheckConstraints ¶ added in v1.1.6
CheckConstraints 对一行值校验 CHECK 约束表达式。 table.CheckExprs 中存储的是 expr.Expression(以 interface{} 包装)。 返回第一个失败的约束错误,全部通过返回 nil。
func CoerceAssignments ¶ added in v1.1.1
CoerceAssignments 将 UPDATE SET 赋值结果按目标列类型强制转换,并校验 NOT NULL 约束。 assignments 为 colIndex → value 的映射,原地修改。
func CoerceRow ¶ added in v1.1.1
CoerceRow 将一行值按目标表列类型做强制转换,并校验 NOT NULL 约束。 仅转换类型不匹配但语义兼容的情况(如字符串 → Timestamp int64)。 原地修改 row,若转换失败或违反非空约束则返回错误。
func Eval ¶
func Eval(e expr.Expression, row Row, params []interface{}, ctx ...*ExecContext) (retVal interface{}, retErr error)
Eval 对 row 求值一个表达式,返回 Go 原生值。 params 为 SQL 占位符 ? 的绑定值(M2 新增,可为 nil)。 ctx 为可选的执行上下文,子查询求值时需要(其他情况传 nil 或省略)。 比较操作返回 bool;NULL 传播:任何操作数为 nil 时返回 nil。 内置 panic 恢复:表达式求值中可能发生除零、类型断言等 panic,统一转为 error 返回。
Types ¶
type AggOp ¶
type AggOp struct {
// contains filtered or unexported fields
}
AggOp 聚合算子:一次性拉取全部输入行,按 GroupBys 分组,计算聚合值
type AlterTableOp ¶ added in v1.1.6
type AlterTableOp struct {
// contains filtered or unexported fields
}
AlterTableOp ALTER TABLE 算子(ADD/DROP COLUMN)
func NewAlterTableOp ¶ added in v1.1.6
func NewAlterTableOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalAlterTable) *AlterTableOp
NewAlterTableOp 创建 AlterTable 算子
func (*AlterTableOp) Close ¶ added in v1.1.6
func (op *AlterTableOp) Close() error
func (*AlterTableOp) Next ¶ added in v1.1.6
func (op *AlterTableOp) Next() (Row, *planner.Schema, error)
func (*AlterTableOp) Open ¶ added in v1.1.6
func (op *AlterTableOp) Open() error
type AnalyzeOp ¶
type AnalyzeOp struct {
// contains filtered or unexported fields
}
AnalyzeOp ANALYZE TABLE 算子:扫描全表,计算每列的 NDV/Min/Max/NullCount。
func NewAnalyzeOp ¶
func NewAnalyzeOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalAnalyze) *AnalyzeOp
NewAnalyzeOp 创建 ANALYZE 算子
type CountStatsOp ¶
type CountStatsOp struct {
// contains filtered or unexported fields
}
CountStatsOp COUNT(*) 快速路径算子。 优先从内存统计缓存读取行数;缓存未命中时从磁盘加载; 磁盘也无数据时回退到全表扫描。
func NewCountStatsOp ¶
func NewCountStatsOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalCountStats) *CountStatsOp
func (*CountStatsOp) Close ¶
func (op *CountStatsOp) Close() error
func (*CountStatsOp) Open ¶
func (op *CountStatsOp) Open() error
type CreateIndexOp ¶
type CreateIndexOp struct {
// contains filtered or unexported fields
}
CreateIndexOp CREATE INDEX 算子:更新元数据 + 全表扫描回填索引条目
func NewCreateIndexOp ¶
func NewCreateIndexOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalCreateIndex) *CreateIndexOp
func (*CreateIndexOp) Close ¶
func (op *CreateIndexOp) Close() error
func (*CreateIndexOp) Open ¶
func (op *CreateIndexOp) Open() error
type CreateTableOp ¶
type CreateTableOp struct {
// contains filtered or unexported fields
}
CreateTableOp CREATE TABLE 算子
func NewCreateTableOp ¶
func NewCreateTableOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalCreateTable) *CreateTableOp
NewCreateTableOp 创建 CreateTable 算子
type CreateViewOp ¶ added in v1.1.6
type CreateViewOp struct {
// contains filtered or unexported fields
}
CreateViewOp CREATE VIEW 算子
func NewCreateViewOp ¶ added in v1.1.6
func NewCreateViewOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalCreateView) *CreateViewOp
NewCreateViewOp 创建 CreateViewOp 算子
func (*CreateViewOp) Close ¶ added in v1.1.6
func (op *CreateViewOp) Close() error
func (*CreateViewOp) Next ¶ added in v1.1.6
func (op *CreateViewOp) Next() (Row, *planner.Schema, error)
Next 执行一次建视图操作
func (*CreateViewOp) Open ¶ added in v1.1.6
func (op *CreateViewOp) Open() error
type DeleteOp ¶
type DeleteOp struct {
// contains filtered or unexported fields
}
DeleteOp DELETE 算子
func NewDeleteOp ¶
func NewDeleteOp(txn engine.Transaction, cat *catalog.Catalog, child Operator, plan *planner.PhysicalDelete) *DeleteOp
NewDeleteOp 创建 Delete 算子 cat 用于删除完成后维护 RowCount 统计信息
type DistinctOp ¶ added in v1.2.0
type DistinctOp struct {
// contains filtered or unexported fields
}
DistinctOp SELECT DISTINCT 去重算子。 SkipDedup 为 true 时(优化器已判定底层唯一索引保证唯一性),直接透传子算子输出, 跳过内存 hash-set 去重。
func NewDistinctOp ¶ added in v1.2.0
func NewDistinctOp(child Operator, plan *planner.PhysicalDistinct) *DistinctOp
NewDistinctOp 创建 DistinctOp 算子。
func (*DistinctOp) Close ¶ added in v1.2.0
func (op *DistinctOp) Close() error
func (*DistinctOp) Next ¶ added in v1.2.0
func (op *DistinctOp) Next() (Row, *planner.Schema, error)
func (*DistinctOp) Open ¶ added in v1.2.0
func (op *DistinctOp) Open() error
type DropIndexOp ¶
type DropIndexOp struct {
// contains filtered or unexported fields
}
DropIndexOp DROP INDEX 算子:清理索引条目 + 更新元数据
func NewDropIndexOp ¶
func NewDropIndexOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalDropIndex) *DropIndexOp
func (*DropIndexOp) Close ¶
func (op *DropIndexOp) Close() error
func (*DropIndexOp) Open ¶
func (op *DropIndexOp) Open() error
type DropTableOp ¶
type DropTableOp struct {
// contains filtered or unexported fields
}
DropTableOp DROP TABLE 算子
func NewDropTableOp ¶
func NewDropTableOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalDropTable) *DropTableOp
NewDropTableOp 创建 DropTable 算子
type DropViewOp ¶ added in v1.1.6
type DropViewOp struct {
// contains filtered or unexported fields
}
DropViewOp DROP VIEW 算子
func NewDropViewOp ¶ added in v1.1.6
func NewDropViewOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalDropView) *DropViewOp
NewDropViewOp 创建 DropViewOp 算子
func (*DropViewOp) Close ¶ added in v1.1.6
func (op *DropViewOp) Close() error
func (*DropViewOp) Next ¶ added in v1.1.6
func (op *DropViewOp) Next() (Row, *planner.Schema, error)
Next 执行一次删视图操作
func (*DropViewOp) Open ¶ added in v1.1.6
func (op *DropViewOp) Open() error
type DualScanOp ¶ added in v1.1.6
type DualScanOp struct {
// contains filtered or unexported fields
}
DualScanOp 虚拟单行扫描算子,产生一行空的 Row 后返回 EOF
func (*DualScanOp) Close ¶ added in v1.1.6
func (op *DualScanOp) Close() error
func (*DualScanOp) Next ¶ added in v1.1.6
func (op *DualScanOp) Next() (Row, *planner.Schema, error)
func (*DualScanOp) Open ¶ added in v1.1.6
func (op *DualScanOp) Open() error
type ExecContext ¶
type ExecContext struct {
// Txn 当前事务(必填)
Txn engine.Transaction
// Cat Catalog 实例(必填,用于 DDL 操作和统计信息更新)
Cat *catalog.Catalog
// Ctx 请求上下文,用于取消传播。nil 时等同于 context.Background()。
// 长时间运行的算子(如全表扫描、排序)应周期性检查 Ctx.Done() 并返回 context.Canceled。
Ctx context.Context
// Params SQL 占位符 ? 的绑定值,按出现顺序索引(M2 新增,可为 nil)
Params []interface{}
// NamedParams 命名参数的绑定值(P2-SQ-07 新增,可为 nil)。
// key 为参数名(如 "name" 对应 @name),value 为绑定值。
// 命名参数与位置参数可混合使用:位置参数走 Params,命名参数走 NamedParams。
NamedParams map[string]interface{}
// Debugf 诊断回调(可选)。设置后,执行器在关键路径输出调试信息。nil 时无开销。
Debugf func(format string, args ...interface{})
}
ExecContext 执行器上下文,贯穿整棵执行树。 M2 新增:携带参数绑定值(Params),支持 Prepared Statement 风格占位符替换。 P2-SQ-07:新增 NamedParams 支持命名参数(如 @name)绑定。
type ExplainOp ¶ added in v1.1.6
type ExplainOp struct {
// contains filtered or unexported fields
}
ExplainOp EXPLAIN 算子,执行一次后返回计划文本行,之后返回 nil(结束)
func NewExplainOp ¶ added in v1.1.6
func NewExplainOp(plan *planner.PhysicalExplain) *ExplainOp
NewExplainOp 创建 Explain 算子
type FilterOp ¶
type FilterOp struct {
// contains filtered or unexported fields
}
FilterOp WHERE 过滤算子
func NewFilterOp ¶
func NewFilterOp(child Operator, plan *planner.PhysicalFilter, params []interface{}) *FilterOp
NewFilterOp 创建 Filter 算子
func NewFilterOpCtx ¶ added in v1.1.6
func NewFilterOpCtx(child Operator, plan *planner.PhysicalFilter, params []interface{}, ctx *ExecContext) *FilterOp
NewFilterOpCtx 创建带执行上下文的 Filter 算子(子查询场景使用)
type IndexScanOp ¶
type IndexScanOp struct {
// contains filtered or unexported fields
}
IndexScanOp 二级索引扫描算子。
普通模式:扫索引区间 → 取主键编码 → MakeRowKey 回表点查 → 解码完整行 → 列投影 覆盖模式(Covering=true):直接从索引 key 解码各列值,跳过回表(零 I/O 放大)
索引 key 格式:
- 唯一索引:prefix(6B) + colsEncoded,value = pkBytes
- 非唯一索引:prefix(6B) + colsEncoded + pkEncoded,value = 占位字节
func NewIndexScanOp ¶
func NewIndexScanOp(txn engine.Transaction, plan *planner.PhysicalIndexScan) *IndexScanOp
func (*IndexScanOp) Close ¶
func (op *IndexScanOp) Close() error
func (*IndexScanOp) Open ¶
func (op *IndexScanOp) Open() error
type InfoSchemaColumnsOp ¶ added in v1.1.6
type InfoSchemaColumnsOp struct {
// contains filtered or unexported fields
}
InfoSchemaColumnsOp INFORMATION_SCHEMA.COLUMNS 虚拟扫描算子
func NewInfoSchemaColumnsOp ¶ added in v1.1.6
func NewInfoSchemaColumnsOp(cat *catalog.Catalog, txn engine.Transaction, filterTable string) *InfoSchemaColumnsOp
NewInfoSchemaColumnsOp 创建 InfoSchemaColumnsOp
func (*InfoSchemaColumnsOp) Close ¶ added in v1.1.6
func (op *InfoSchemaColumnsOp) Close() error
func (*InfoSchemaColumnsOp) Next ¶ added in v1.1.6
func (op *InfoSchemaColumnsOp) Next() (Row, *planner.Schema, error)
func (*InfoSchemaColumnsOp) Open ¶ added in v1.1.6
func (op *InfoSchemaColumnsOp) Open() error
type InfoSchemaTablesOp ¶ added in v1.1.6
type InfoSchemaTablesOp struct {
// contains filtered or unexported fields
}
InfoSchemaTablesOp INFORMATION_SCHEMA.TABLES 虚拟扫描算子
func NewInfoSchemaTablesOp ¶ added in v1.1.6
func NewInfoSchemaTablesOp(cat *catalog.Catalog, txn engine.Transaction) *InfoSchemaTablesOp
NewInfoSchemaTablesOp 创建 InfoSchemaTablesOp
func (*InfoSchemaTablesOp) Close ¶ added in v1.1.6
func (op *InfoSchemaTablesOp) Close() error
func (*InfoSchemaTablesOp) Next ¶ added in v1.1.6
func (op *InfoSchemaTablesOp) Next() (Row, *planner.Schema, error)
func (*InfoSchemaTablesOp) Open ¶ added in v1.1.6
func (op *InfoSchemaTablesOp) Open() error
type InfoSchemaViewsOp ¶ added in v1.1.9
type InfoSchemaViewsOp struct {
// contains filtered or unexported fields
}
InfoSchemaViewsOp INFORMATION_SCHEMA.VIEWS 虚拟扫描算子
func NewInfoSchemaViewsOp ¶ added in v1.1.9
func NewInfoSchemaViewsOp(cat *catalog.Catalog, txn engine.Transaction) *InfoSchemaViewsOp
NewInfoSchemaViewsOp 创建 InfoSchemaViewsOp
func (*InfoSchemaViewsOp) Close ¶ added in v1.1.9
func (op *InfoSchemaViewsOp) Close() error
func (*InfoSchemaViewsOp) Next ¶ added in v1.1.9
func (op *InfoSchemaViewsOp) Next() (Row, *planner.Schema, error)
func (*InfoSchemaViewsOp) Open ¶ added in v1.1.9
func (op *InfoSchemaViewsOp) Open() error
type InsertOp ¶
type InsertOp struct {
LastInsertId int64 // 最后插入的 AUTO_INCREMENT 值(无自增列时为 0)
// contains filtered or unexported fields
}
InsertOp INSERT 写入算子(支持单行和多行)
func NewInsertOp ¶
func NewInsertOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalInsert, params []interface{}, namedParams ...map[string]interface{}) *InsertOp
type LimitOp ¶
type LimitOp struct {
// contains filtered or unexported fields
}
LimitOp LIMIT/OFFSET 算子:跳过 Offset 行后返回至多 Count 行
func NewLimitOp ¶
func NewLimitOp(child Operator, plan *planner.PhysicalLimit) *LimitOp
NewLimitOp 创建 LimitOp
type MultiGetOp ¶
type MultiGetOp struct {
// contains filtered or unexported fields
}
MultiGetOp 多点查算子:对 WHERE pk IN (v1, v2, ...) 的每个值执行一次 txn.Get()。
func NewMultiGetOp ¶
func NewMultiGetOp(txn engine.Transaction, plan *planner.PhysicalMultiGet) *MultiGetOp
NewMultiGetOp 创建 MultiGetOp
type NLJOp ¶
type NLJOp struct {
// contains filtered or unexported fields
}
NLJOp Nested Loop Join:对每条左行重新扫描全部右行,找到匹配的行拼接输出 RIGHT JOIN 通过交换左右算子并在输出时交换列位置来实现
type Operator ¶
type Operator interface {
// Open 初始化算子,建立资源(如打开游标)。
// 在第一次调用 Next 之前必须调用 Open。
Open() error
// Next 返回下一行数据和输出 Schema。
// 当没有更多数据时返回 (nil, nil, nil)(EOF 信号)。
Next() (Row, *planner.Schema, error)
// Close 释放算子持有的资源。
Close() error
}
Operator Volcano 模型算子接口
func Build ¶
func Build(ctx *ExecContext, plan planner.PhysicalPlan) (Operator, error)
Build 将物理执行计划递归转换为 Operator 执行树(M2:使用 ExecContext)
type ProjectOp ¶
type ProjectOp struct {
// contains filtered or unexported fields
}
ProjectOp SELECT 投影算子
func NewProjectOp ¶
func NewProjectOp(child Operator, plan *planner.PhysicalProject, params []interface{}) *ProjectOp
NewProjectOp 创建 Project 算子
func NewProjectOpCtx ¶ added in v1.1.6
func NewProjectOpCtx(child Operator, plan *planner.PhysicalProject, params []interface{}, ctx *ExecContext) *ProjectOp
NewProjectOpCtx 创建带执行上下文的 Project 算子
type ReleaseSavepointOp ¶ added in v1.1.6
type ReleaseSavepointOp struct {
// contains filtered or unexported fields
}
ReleaseSavepointOp 释放保存点算子
func NewReleaseSavepointOp ¶ added in v1.1.6
func NewReleaseSavepointOp(txn engine.Transaction, name string) *ReleaseSavepointOp
NewReleaseSavepointOp 创建 ReleaseSavepointOp
func (*ReleaseSavepointOp) Close ¶ added in v1.1.6
func (op *ReleaseSavepointOp) Close() error
func (*ReleaseSavepointOp) Next ¶ added in v1.1.6
func (op *ReleaseSavepointOp) Next() (Row, *planner.Schema, error)
func (*ReleaseSavepointOp) Open ¶ added in v1.1.6
func (op *ReleaseSavepointOp) Open() error
type RollbackToSavepointOp ¶ added in v1.1.6
type RollbackToSavepointOp struct {
// contains filtered or unexported fields
}
RollbackToSavepointOp 回滚到保存点算子
func NewRollbackToSavepointOp ¶ added in v1.1.6
func NewRollbackToSavepointOp(txn engine.Transaction, name string) *RollbackToSavepointOp
NewRollbackToSavepointOp 创建 RollbackToSavepointOp
func (*RollbackToSavepointOp) Close ¶ added in v1.1.6
func (op *RollbackToSavepointOp) Close() error
func (*RollbackToSavepointOp) Next ¶ added in v1.1.6
func (op *RollbackToSavepointOp) Next() (Row, *planner.Schema, error)
func (*RollbackToSavepointOp) Open ¶ added in v1.1.6
func (op *RollbackToSavepointOp) Open() error
type Row ¶
type Row []interface{}
Row 一行数据,每个元素对应 Schema 中同位置的列值。 nil 表示 NULL。
提供三层访问接口:
便捷层: row.Int(0), row.Str(1) — 90% 场景 安全层: row.Scan(&id, &name) — 多列解码 性能层: row[0].(int64) — 热路径
type SavepointOp ¶ added in v1.1.6
type SavepointOp struct {
// contains filtered or unexported fields
}
SavepointOp 创建保存点算子
func NewSavepointOp ¶ added in v1.1.6
func NewSavepointOp(txn engine.Transaction, name string) *SavepointOp
NewSavepointOp 创建 SavepointOp
func (*SavepointOp) Close ¶ added in v1.1.6
func (op *SavepointOp) Close() error
func (*SavepointOp) Next ¶ added in v1.1.6
func (op *SavepointOp) Next() (Row, *planner.Schema, error)
func (*SavepointOp) Open ¶ added in v1.1.6
func (op *SavepointOp) Open() error
type Scanner ¶ added in v1.1.6
type Scanner interface {
// Scan 将当前列值赋值给接收者。src 为 nil 时表示 NULL。
Scan(src interface{}) error
}
Scanner SQL 行扫描接口,与 database/sql.Scanner 语义一致。 实现了 Scanner 的类型可用于 Row.Scan() 和 RowResult.Scan(), 实现自定义 NULL 处理逻辑。
type SetOpOp ¶ added in v1.1.6
type SetOpOp struct {
// contains filtered or unexported fields
}
SetOpOp 集合运算算子(UNION / INTERSECT / EXCEPT)。 左右两侧子算子先全量物化,再按语义合并。
func NewSetOpOp ¶ added in v1.1.6
func NewSetOpOp(plan *planner.PhysicalSetOp, left, right Operator) *SetOpOp
NewSetOpOp 创建集合运算算子(仅支持二元,左右两个输入)。
type ShowColumnsOp ¶ added in v1.1.6
type ShowColumnsOp struct {
// contains filtered or unexported fields
}
ShowColumnsOp SHOW COLUMNS FROM t 算子
func NewShowColumnsOp ¶ added in v1.1.6
func NewShowColumnsOp(cat *catalog.Catalog, txn engine.Transaction, tableName string) *ShowColumnsOp
NewShowColumnsOp 创建 ShowColumnsOp
func (*ShowColumnsOp) Close ¶ added in v1.1.6
func (op *ShowColumnsOp) Close() error
func (*ShowColumnsOp) Next ¶ added in v1.1.6
func (op *ShowColumnsOp) Next() (Row, *planner.Schema, error)
func (*ShowColumnsOp) Open ¶ added in v1.1.6
func (op *ShowColumnsOp) Open() error
type ShowTablesOp ¶ added in v1.1.6
type ShowTablesOp struct {
// contains filtered or unexported fields
}
ShowTablesOp SHOW TABLES 算子:从 catalog 读取所有表名
func NewShowTablesOp ¶ added in v1.1.6
func NewShowTablesOp(cat *catalog.Catalog, txn engine.Transaction) *ShowTablesOp
NewShowTablesOp 创建 ShowTablesOp
func (*ShowTablesOp) Close ¶ added in v1.1.6
func (op *ShowTablesOp) Close() error
func (*ShowTablesOp) Next ¶ added in v1.1.6
func (op *ShowTablesOp) Next() (Row, *planner.Schema, error)
func (*ShowTablesOp) Open ¶ added in v1.1.6
func (op *ShowTablesOp) Open() error
type SortOp ¶
type SortOp struct {
// contains filtered or unexported fields
}
SortOp ORDER BY 算子:一次性拉取所有输入行,按 OrderItems 排序后逐行返回
type TableScanOp ¶
type TableScanOp struct {
// contains filtered or unexported fields
}
TableScanOp 表扫描算子,根据 PhysicalTableScan.Mode 选择扫描方式:
- ScanModeFull:全表扫,遍历 [tablePrefix, tablePrefixEnd)
- ScanModePoint:点查,扫描 [KeyRange.Start, KeyRange.End](Start==End)
- ScanModeRange:范围扫,扫描 [KeyRange.Start, KeyRange.End]
func NewTableScanOp ¶
func NewTableScanOp(txn engine.Transaction, plan *planner.PhysicalTableScan, ctx context.Context, debugf func(string, ...interface{})) *TableScanOp
NewTableScanOp 创建 TableScan 算子
func (*TableScanOp) Next ¶
func (op *TableScanOp) Next() (Row, *planner.Schema, error)
Next 返回下一行,无数据时返回 nil。 Point/Range 模式:当当前 key > endKey 时提前终止。 每 100 行检查一次 ctx.Done(),支持查询取消。
func (*TableScanOp) Open ¶
func (op *TableScanOp) Open() error
Open 根据扫描模式创建迭代器,定位到起始位置。
- Full:扫描整个表命名空间
- Point/Range:扫描 KeyRange 指定的闭区间(存储层 Scan 使用半开区间,endKey+1 近似)
type TruncateTableOp ¶ added in v1.1.6
type TruncateTableOp struct {
// contains filtered or unexported fields
}
TruncateTableOp TRUNCATE TABLE 算子:删除表中所有行(含索引条目),重置行数统计。
func NewTruncateTableOp ¶ added in v1.1.6
func NewTruncateTableOp(txn engine.Transaction, cat *catalog.Catalog, plan *planner.PhysicalTruncateTable) *TruncateTableOp
NewTruncateTableOp 创建 TruncateTable 算子
func (*TruncateTableOp) Close ¶ added in v1.1.6
func (op *TruncateTableOp) Close() error
func (*TruncateTableOp) Next ¶ added in v1.1.6
func (op *TruncateTableOp) Next() (Row, *planner.Schema, error)
func (*TruncateTableOp) Open ¶ added in v1.1.6
func (op *TruncateTableOp) Open() error
type UpdateOp ¶
type UpdateOp struct {
// contains filtered or unexported fields
}
UpdateOp UPDATE 算子(全量更新匹配行)
func NewUpdateOp ¶
func NewUpdateOp(txn engine.Transaction, cat *catalog.Catalog, child Operator, plan *planner.PhysicalUpdate, params []interface{}, namedParams ...map[string]interface{}) *UpdateOp
type VMInstruction ¶
type VMInstruction struct {
Op vmOp
Arg int
}