Skip to content

Commit 6e5d21a

Browse files
authored
fix declare cursors in triggers (#2865)
1 parent c290aec commit 6e5d21a

File tree

3 files changed

+39
-2
lines changed

3 files changed

+39
-2
lines changed

enginetest/queries/trigger_queries.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3389,6 +3389,38 @@ for each row
33893389
},
33903390
},
33913391
},
3392+
3393+
{
3394+
Name: "trigger with cursor",
3395+
SetUpScript: []string{
3396+
"create table t1 (i int, j int);",
3397+
"insert into t1 values (1, 2);",
3398+
"create table t2 (i int, j int);",
3399+
`
3400+
create trigger trig before insert on t2
3401+
for each row
3402+
begin
3403+
declare v1 int;
3404+
declare cur cursor for select i from t1;
3405+
open cur;
3406+
fetch cur into v1;
3407+
set new.j = v1;
3408+
end;
3409+
`,
3410+
},
3411+
Assertions: []ScriptTestAssertion{
3412+
{
3413+
Query: "insert into t2 values (1, 0);",
3414+
Expected: []sql.Row{
3415+
{types.NewOkResult(1)},
3416+
},
3417+
},
3418+
{
3419+
Query: "select * from t2;",
3420+
Expected: []sql.Row{{1, 1}},
3421+
},
3422+
},
3423+
},
33923424
}
33933425

33943426
var TriggerCreateInSubroutineTests = []ScriptTest{

sql/analyzer/triggers.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -339,7 +339,12 @@ func applyTrigger(ctx *sql.Context, a *Analyzer, originalNode, n sql.Node, scope
339339
}
340340
return n.WithSource(newSource), transform.NewTree, nil
341341
case expression.ProcedureReferencable:
342-
return n.WithParamReference(pRef), transform.NewTree, nil
342+
newParamRef := n.WithParamReference(pRef)
343+
newNode, _, err := transform.NodeWithOpaque(newParamRef, assignProcRef)
344+
if err != nil {
345+
return nil, transform.SameTree, err
346+
}
347+
return newNode, transform.NewTree, nil
343348
default:
344349
return assignProcRef(node)
345350
}

sql/rowexec/dml_iters.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ func prependRowInPlanForTriggerExecution(row sql.Row) func(c transform.Context)
193193
case *plan.Project:
194194
// Only prepend rows for projects that aren't the input to inserts and other triggers
195195
switch c.Parent.(type) {
196-
case *plan.InsertInto, *plan.Into, *plan.TriggerExecutor:
196+
case *plan.InsertInto, *plan.Into, *plan.TriggerExecutor, *plan.DeclareCursor:
197197
return n, transform.SameTree, nil
198198
default:
199199
return plan.NewPrependNode(n, row), transform.NewTree, nil

0 commit comments

Comments
 (0)