1 Star 1 Fork 0

听见安静 / vds

Create your Gitee Account
Explore and code with more than 14 million developers,Free private repositories !:)
Sign up
文件
Clone or Download
project.go 1.55 KB
Copy Edit Raw Blame History
// project.go Project 算子:按投影表达式列表重写输出行
package executor
import (
"gitee.com/bigant/vds/internal/sql/planner"
)
// ProjectOp SELECT 投影算子
type ProjectOp struct {
params []interface{}
// child 输入算子
child Operator
// plan 物理投影节点(含表达式列表和输出 Schema)
plan *planner.PhysicalProject
// ctx 执行上下文,子查询投影表达式时需要(可为 nil)
ctx *ExecContext
}
// NewProjectOp 创建 Project 算子
func NewProjectOp(child Operator, plan *planner.PhysicalProject, params []interface{}) *ProjectOp {
return &ProjectOp{child: child, params: params, plan: plan}
}
// NewProjectOpCtx 创建带执行上下文的 Project 算子
func NewProjectOpCtx(child Operator, plan *planner.PhysicalProject, params []interface{}, ctx *ExecContext) *ProjectOp {
return &ProjectOp{child: child, params: params, plan: plan, ctx: ctx}
}
// Open 初始化子算子
func (op *ProjectOp) Open() error {
return op.child.Open()
}
// Next 从子算子拉取一行,按投影表达式重写后返回
func (op *ProjectOp) Next() (Row, *planner.Schema, error) {
row, _, err := op.child.Next()
if err != nil {
return nil, nil, err
}
if row == nil {
return nil, nil, nil
}
projected := make(Row, len(op.plan.Exprs))
for i, e := range op.plan.Exprs {
v, err := Eval(e, row, op.params, op.ctx)
if err != nil {
return nil, nil, err
}
projected[i] = v
}
return projected, op.plan.OutputCols, nil
}
// Close 关闭子算子
func (op *ProjectOp) Close() error {
return op.child.Close()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/bigant/vds.git
git@gitee.com:bigant/vds.git
bigant
vds
vds
v1.2.7

Search