Skip to content

Commit 6ffe4b8

Browse files
authored
fix AS OF clause panic for certain expressions (#2779)
1 parent 29d5096 commit 6ffe4b8

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

enginetest/queries/queries.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10751,6 +10751,10 @@ var ErrorQueries = []QueryErrorTest{
1075110751
Query: "SELECT i FROM myhistorytable AS OF MAX(i)",
1075210752
ExpectedErr: sql.ErrInvalidAsOfExpression,
1075310753
},
10754+
{
10755+
Query: "SELECT i FROM myhistorytable AS OF (SELECT 1)",
10756+
ExpectedErrStr: "invalid AS OF expression type",
10757+
},
1075410758
{
1075510759
Query: "SELECT pk FROM one_pk WHERE pk > ?",
1075610760
ExpectedErr: sql.ErrUnboundPreparedStatementVariable,

sql/plan/subquery.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,10 @@ func (s *Subquery) evalMultiple(ctx *sql.Context, row sql.Row) ([]interface{}, e
349349
return nil, err
350350
}
351351

352+
if s.b == nil {
353+
return nil, fmt.Errorf("attempted to evaluate uninitialized subquery")
354+
}
355+
352356
iter, err := s.b.Build(ctx, q, row)
353357
if err != nil {
354358
return nil, err
@@ -434,6 +438,10 @@ func (s *Subquery) HasResultRow(ctx *sql.Context, row sql.Row) (bool, error) {
434438
return false, err
435439
}
436440

441+
if s.b == nil {
442+
return false, fmt.Errorf("attempted to evaluate uninitialized subquery")
443+
}
444+
437445
iter, err := s.b.Build(ctx, q, row)
438446
if err != nil {
439447
return false, err

sql/planbuilder/show.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,10 @@ func (b *Builder) buildAsOfExpr(inScope *scope, time ast.Expr) sql.Expression {
615615
err := sql.ErrInvalidAsOfExpression.New(v)
616616
b.handleErr(err)
617617
}
618+
case *ast.ConvertExpr:
619+
case ast.InjectedExpr:
618620
default:
621+
b.handleErr(fmt.Errorf("invalid AS OF expression type"))
619622
}
620623
return b.buildScalar(b.newScope(), time)
621624
}

0 commit comments

Comments
 (0)