Skip to content

Commit b387d21

Browse files
author
James Cor
committed
fixing subqueries in stored procs
1 parent 65a75e2 commit b387d21

File tree

2 files changed

+11
-4
lines changed

2 files changed

+11
-4
lines changed

sql/analyzer/stored_procedures.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func loadStoredProcedures(ctx *sql.Context, a *Analyzer, n sql.Node, scope *plan
5252
return nil, err
5353
}
5454
for _, procedure := range procedures {
55-
proc := planbuilder.BuildProcedureHelper(ctx, a.Catalog, nil, database, nil, procedure)
55+
proc, _ := planbuilder.BuildProcedureHelper(ctx, a.Catalog, nil, database, nil, procedure)
5656
err = scope.Procedures.Register(database.Name(), proc)
5757
if err != nil {
5858
return nil, err

sql/planbuilder/proc.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ func (b *Builder) buildIfConditional(inScope *scope, n ast.IfStatementCondition,
226226
return outScope
227227
}
228228

229-
func BuildProcedureHelper(ctx *sql.Context, cat sql.Catalog, inScope *scope, db sql.Database, asOf sql.Expression, proc sql.StoredProcedureDetails) *plan.Procedure {
229+
func BuildProcedureHelper(ctx *sql.Context, cat sql.Catalog, inScope *scope, db sql.Database, asOf sql.Expression, proc sql.StoredProcedureDetails) (*plan.Procedure, *sql.QueryFlags) {
230230
// TODO: new builder necessary?
231231
b := New(ctx, cat, nil, nil)
232232
b.DisableAuth()
@@ -272,7 +272,7 @@ func BuildProcedureHelper(ctx *sql.Context, cat sql.Catalog, inScope *scope, db
272272
bodyScope.node,
273273
proc.CreatedAt,
274274
proc.ModifiedAt,
275-
)
275+
), b.qFlags
276276
}
277277

278278
func (b *Builder) buildCall(inScope *scope, c *ast.Call) (outScope *scope) {
@@ -303,6 +303,7 @@ func (b *Builder) buildCall(inScope *scope, c *ast.Call) (outScope *scope) {
303303
}
304304

305305
var proc *plan.Procedure
306+
var innerQFlags *sql.QueryFlags
306307
procName := c.ProcName.Name.String()
307308
esp, err := b.cat.ExternalStoredProcedure(b.ctx, procName, len(c.Params))
308309
if err != nil {
@@ -315,7 +316,13 @@ func (b *Builder) buildCall(inScope *scope, c *ast.Call) (outScope *scope) {
315316
procDetails, ok, err = spdb.GetStoredProcedure(b.ctx, procName)
316317
if err == nil {
317318
if ok {
318-
proc = BuildProcedureHelper(b.ctx, b.cat, inScope, db, asOf, procDetails)
319+
proc, innerQFlags = BuildProcedureHelper(b.ctx, b.cat, inScope, db, asOf, procDetails)
320+
// TODO: somewhat hacky way of preserving this flag
321+
// This is necessary so that the resolveSubqueries analyzer rule
322+
// will apply NodeExecBuilder to Subqueries in procedure body
323+
if innerQFlags.IsSet(sql.QFlagScalarSubquery) {
324+
b.qFlags.Set(sql.QFlagScalarSubquery)
325+
}
319326
} else {
320327
err = sql.ErrStoredProcedureDoesNotExist.New(procName)
321328
}

0 commit comments

Comments
 (0)