MCPcopy Create free account
hub / github.com/dolthub/doltgresql / BuildRowIter

Method BuildRowIter

server/node/trigger_execution.go:77–126  ·  view source on GitHub ↗

BuildRowIter implements the interface sql.ExecBuilderNode.

(ctx *sql.Context, b sql.NodeExecBuilder, r sql.Row)

Source from the content-addressed store, hash-verified

75
76// BuildRowIter implements the interface sql.ExecBuilderNode.
77func (te *TriggerExecution) BuildRowIter(ctx *sql.Context, b sql.NodeExecBuilder, r sql.Row) (sql.RowIter, error) {
78 sourceIter, err := b.Build(ctx, te.Source, r)
79 if err != nil {
80 return nil, err
81 }
82 // If there are no triggers, then we'll just return the source iter
83 if len(te.Triggers) == 0 {
84 return sourceIter, nil
85 }
86 trigFuncs := make([]framework.InterpretedFunction, len(te.Triggers))
87 whens := make([]framework.InterpretedFunction, len(te.Triggers))
88 for i, trig := range te.Triggers {
89 trigFuncs[i], err = te.loadTriggerFunction(ctx, trig)
90 if err != nil {
91 return nil, err
92 }
93 // If we have a WHEN expression, then we need to build a "function" to execute the expression
94 if len(trig.When) > 0 {
95 whens[i] = framework.InterpretedFunction{
96 ID: trigFuncs[i].ID, // Assign the same ID just so we have a valid one for later
97 ReturnType: pgtypes.Bool,
98 Statements: trig.When,
99 }
100 }
101 }
102
103 tgOp := ""
104 switch te.Source.(type) {
105 case *plan.InsertInto:
106 tgOp = "INSERT"
107 case *plan.Update:
108 tgOp = "UPDATE"
109 case *plan.DeleteFrom:
110 tgOp = "DELETE"
111 case *plan.Truncate:
112 tgOp = "TRUNCATE"
113 }
114
115 return &triggerExecutionIter{
116 functions: trigFuncs,
117 whens: whens,
118 split: te.Split,
119 treturn: te.Return,
120 runner: te.Runner.Runner,
121 sch: te.Sch,
122 source: sourceIter,
123 tgOp: tgOp,
124 timing: te.Timing,
125 }, nil
126}
127
128// Schema implements the interface sql.ExecBuilderNode.
129func (te *TriggerExecution) Schema(ctx *sql.Context) sql.Schema {

Callers

nothing calls this directly

Calls 2

loadTriggerFunctionMethod · 0.95
BuildMethod · 0.45

Tested by

no test coverage detected