featurebase/sql3/planner/compilepredict.go
Pat Okeeffe 284f62dcb9
create model, create function... all the goodies (#2264)
* create function, create/drop model; re-introduced limit; added COPY; var(); corr()

* review feedback
2023-04-04 17:44:29 -05:00

50 lines
1.3 KiB
Go

// Copyright 2022 Molecula Corp. All rights reserved.
package planner
import (
"context"
"github.com/featurebasedb/featurebase/v3/sql3"
"github.com/featurebasedb/featurebase/v3/sql3/parser"
"github.com/featurebasedb/featurebase/v3/sql3/planner/types"
)
// compilePredictStatement compiles a parser.PredictStatement AST into a PlanOperator
func (p *ExecutionPlanner) compilePredictStatement(ctx context.Context, stmt *parser.PredictStatement) (types.PlanOperator, error) {
// go get the model
modelName := parser.IdentName(stmt.ModelName)
// does the model exist
obj, err := p.getModelByName(modelName)
if err != nil {
return nil, err
}
if obj == nil {
return nil, sql3.NewErrInternalf("model '%s' not found", modelName)
}
selOp, err := p.compileSelectStatement(stmt.InputQuery, true)
if err != nil {
return nil, err
}
predict := NewPlanOpPredict(p, obj, selOp)
predict.AddWarning("🦖 here there be dragons! PREDICT statement is experimental.")
query := NewPlanOpQuery(p, predict, p.sql)
return query, nil
}
func (p *ExecutionPlanner) analyzePredictStatement(ctx context.Context, stmt *parser.PredictStatement) error {
// analyze the select
_, err := p.analyzeSelectStatement(ctx, stmt.InputQuery)
if err != nil {
return err
}
return nil
}