Fetch the repository succeeded.
// 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()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。