From 5122c2decc4b54d4625dc88a9dd6d0d702e066f7 Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Mon, 16 Aug 2021 13:12:16 -0600 Subject: [PATCH] Refactor SQL planner to inside Server --- planner.go | 2 +- planner_test.go | 10 +--------- server.go | 11 ++++++++--- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/planner.go b/planner.go index daf4d8339..b8482a6af 100644 --- a/planner.go +++ b/planner.go @@ -100,7 +100,7 @@ func (p *Planner) planAggregateSelectStatement(ctx context.Context, stmt *sql2.S } func (p *Planner) planNonAggregateSelectStatement(ctx context.Context, stmt *sql2.SelectStatement) (_ StmtNode, err error) { - panic("TODO: Implement non-aggregate SELECT") + return nil, fmt.Errorf("cannot plan non-aggregate SELECT query") } type Stmt struct { diff --git a/planner_test.go b/planner_test.go index b1f57c131..e3ce18aa7 100644 --- a/planner_test.go +++ b/planner_test.go @@ -16,11 +16,9 @@ package pilosa_test import ( "context" - "strings" "testing" "github.com/molecula/featurebase/v2" - "github.com/molecula/featurebase/v2/sql2" "github.com/molecula/featurebase/v2/test" ) @@ -51,13 +49,7 @@ func TestPlanner_Count(t *testing.T) { // Parse SQL into AST. q := `SELECT COUNT(*) AS "count" FROM i` - st, err := sql2.NewParser(strings.NewReader(q)).ParseStatement() - if err != nil { - t.Fatal(err) - } - - // Generate a prepared statement with the execution plan. - stmt, err := pilosa.NewPlanner(c.GetNode(0).Server.Executor()).PlanStatement(context.Background(), st) + stmt, err := c.GetNode(0).Server.PlanSQL(context.Background(), q) if err != nil { t.Fatal(err) } diff --git a/server.go b/server.go index 1d98ffaef..c9b4d8d5e 100644 --- a/server.go +++ b/server.go @@ -35,6 +35,7 @@ import ( pnet "github.com/molecula/featurebase/v2/net" rbfcfg "github.com/molecula/featurebase/v2/rbf/cfg" "github.com/molecula/featurebase/v2/roaring" + "github.com/molecula/featurebase/v2/sql2" "github.com/molecula/featurebase/v2/stats" "github.com/molecula/featurebase/v2/storage" "github.com/molecula/featurebase/v2/topology" @@ -1346,9 +1347,13 @@ func (srv *Server) GetTransaction(ctx context.Context, id string, remote bool) ( return trns, nil } -// Executor returns the executor attached to the server. For testing only. -func (s *Server) Executor() *executor { - return s.executor +// PlanSQL parses and prepares a SQL statement. +func (s *Server) PlanSQL(ctx context.Context, q string) (*Stmt, error) { + st, err := sql2.NewParser(strings.NewReader(q)).ParseStatement() + if err != nil { + return nil, err + } + return NewPlanner(s.executor).PlanStatement(ctx, st) } // countOpenFiles on operating systems that support lsof.