Skip to content

Commit 5b27bf7

Browse files
authored
fix exists subqueries in stored procedures (#3050)
1 parent 064b824 commit 5b27bf7

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

enginetest/queries/procedure_queries.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2309,6 +2309,49 @@ end;
23092309
},
23102310
},
23112311
},
2312+
{
2313+
Name: "stored procedure with exists subquery",
2314+
SetUpScript: []string{
2315+
`
2316+
create procedure exists_proc1(in x int)
2317+
begin
2318+
select 1 where exists (select x);
2319+
end;
2320+
`,
2321+
`
2322+
create procedure exists_proc2(in x int)
2323+
begin
2324+
select exists (select x);
2325+
end;
2326+
`,
2327+
},
2328+
Assertions: []ScriptTestAssertion{
2329+
{
2330+
Query: "call exists_proc1(1);",
2331+
Expected: []sql.Row{
2332+
{1},
2333+
},
2334+
},
2335+
{
2336+
Query: "call exists_proc1(0);",
2337+
Expected: []sql.Row{
2338+
{1},
2339+
},
2340+
},
2341+
{
2342+
Query: "call exists_proc2(1);",
2343+
Expected: []sql.Row{
2344+
{true},
2345+
},
2346+
},
2347+
{
2348+
Query: "call exists_proc2(0);",
2349+
Expected: []sql.Row{
2350+
{true},
2351+
},
2352+
},
2353+
},
2354+
},
23122355
}
23132356

23142357
var ProcedureCallTests = []ScriptTest{

sql/procedures/interpreter_logic.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ func replaceVariablesInExpr(ctx *sql.Context, stack *InterpreterStack, expr ast.
140140
return nil, err
141141
}
142142
e.Expr = newExpr.(ast.Expr)
143+
case *ast.ExistsExpr:
144+
newSubquery, err := replaceVariablesInExpr(ctx, stack, e.Subquery, asOf)
145+
if err != nil {
146+
return nil, err
147+
}
148+
e.Subquery = newSubquery.(*ast.Subquery)
143149
case *ast.FuncExpr:
144150
for i := range e.Exprs {
145151
newExpr, err := replaceVariablesInExpr(ctx, stack, e.Exprs[i], asOf)

0 commit comments

Comments
 (0)