Skip to content

Commit

Permalink
use parser interface in engine
Browse files Browse the repository at this point in the history
  • Loading branch information
jennifersp committed May 3, 2024
1 parent 05b2b24 commit 8775be2
Show file tree
Hide file tree
Showing 15 changed files with 35 additions and 33 deletions.
1 change: 1 addition & 0 deletions go/cmd/dolt/commands/diff.go
Original file line number Diff line number Diff line change
Expand Up @@ -882,6 +882,7 @@ func getTableSchemaAtRef(queryist cli.Queryist, sqlCtx *sql.Context, tableName s
// schemaFromCreateTableStmt returns a schema for the CREATE TABLE statement given
// TODO: this is substantially incorrect, doesn't handle primary key ordering, probably other things too
func schemaFromCreateTableStmt(createTableStmt string) (schema.Schema, error) {
// TODO: need to use parser from the engine
parsed, err := ast.Parse(createTableStmt)
if err != nil {
return nil, err
Expand Down
5 changes: 1 addition & 4 deletions go/cmd/dolt/commands/dump.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import (

"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/plan"
"github.com/dolthub/go-mysql-server/sql/planbuilder"
"github.com/fatih/color"

"github.com/dolthub/dolt/go/cmd/dolt/cli"
Expand Down Expand Up @@ -436,10 +435,8 @@ func dumpViews(ctx *sql.Context, engine *engine.SqlEngine, root *doltdb.RootValu
sqlMode = s
}
}

opts := sql.NewSqlModeFromString(sqlMode).ParserOptions()
// We used to store just the SELECT part of a view, but now we store the entire CREATE VIEW statement
cv, err := planbuilder.ParseWithOptions(ctx, engine.GetUnderlyingEngine().Analyzer.Catalog, row[fragColIdx].(string), opts)
cv, err := engine.GetUnderlyingEngine().ParseAndBuildQueryWithOptions(ctx, nil, row[fragColIdx].(string), sql.NewSqlModeFromString(sqlMode).ParserOptions())
if err != nil {
return err
}
Expand Down
2 changes: 2 additions & 0 deletions go/cmd/dolt/commands/engine/sqlengine.go
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ type SqlEngineConfig struct {
ClusterController *cluster.Controller
BinlogReplicaController binlogreplication.BinlogReplicaController
EventSchedulerStatus eventscheduler.SchedulerStatus
Parser sql.Parser
}

// NewSqlEngine returns a SqlEngine
Expand Down Expand Up @@ -145,6 +146,7 @@ func NewSqlEngine(
engine := gms.New(analyzer.NewBuilder(pro).WithParallelism(parallelism).Build(), &gms.Config{
IsReadOnly: config.IsReadOnly,
IsServerLocked: config.IsServerLocked,
Parser: config.Parser,
}).WithBackgroundThreads(bThreads)

config.ClusterController.SetIsStandbyCallback(func(isStandby bool) {
Expand Down
2 changes: 1 addition & 1 deletion go/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ require (
github.com/cespare/xxhash v1.1.0
github.com/creasty/defaults v1.6.0
github.com/dolthub/flatbuffers/v23 v23.3.3-dh.2
github.com/dolthub/go-mysql-server v0.18.2-0.20240501203024-7d4da487f95c
github.com/dolthub/go-mysql-server v0.18.2-0.20240503172935-378eaeccc4f9
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63
github.com/dolthub/swiss v0.1.0
github.com/goccy/go-json v0.10.2
Expand Down
4 changes: 2 additions & 2 deletions go/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -183,8 +183,8 @@ github.com/dolthub/fslock v0.0.3 h1:iLMpUIvJKMKm92+N1fmHVdxJP5NdyDK5bK7z7Ba2s2U=
github.com/dolthub/fslock v0.0.3/go.mod h1:QWql+P17oAAMLnL4HGB5tiovtDuAjdDTPbuqx7bYfa0=
github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e h1:kPsT4a47cw1+y/N5SSCkma7FhAPw7KeGmD6c9PBZW9Y=
github.com/dolthub/go-icu-regex v0.0.0-20230524105445-af7e7991c97e/go.mod h1:KPUcpx070QOfJK1gNe0zx4pA5sicIK1GMikIGLKC168=
github.com/dolthub/go-mysql-server v0.18.2-0.20240501203024-7d4da487f95c h1:kJZjlSnxfH7VdAE4cGup79KrcdG16slDGWZ7W0STDNg=
github.com/dolthub/go-mysql-server v0.18.2-0.20240501203024-7d4da487f95c/go.mod h1:T6EEu2iQoasR13Ovtp44yDn+rXQOBgh3BACPZMxSF/8=
github.com/dolthub/go-mysql-server v0.18.2-0.20240503172935-378eaeccc4f9 h1:3cYp7znIi2O4xjpM6sD2adoS9RJGOqb5nuH5ACz62qM=
github.com/dolthub/go-mysql-server v0.18.2-0.20240503172935-378eaeccc4f9/go.mod h1:T6EEu2iQoasR13Ovtp44yDn+rXQOBgh3BACPZMxSF/8=
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63 h1:OAsXLAPL4du6tfbBgK0xXHZkOlos63RdKYS3Sgw/dfI=
github.com/dolthub/gozstd v0.0.0-20240423170813-23a2903bca63/go.mod h1:lV7lUeuDhH5thVGDCKXbatwKy2KW80L4rMT46n+Y2/Q=
github.com/dolthub/ishell v0.0.0-20221214210346-d7db0b066488 h1:0HHu0GWJH0N6a6keStrHhUAK5/o9LVfkh44pvsV4514=
Expand Down
1 change: 1 addition & 0 deletions go/libraries/doltcore/merge/merge_schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -1354,6 +1354,7 @@ func isCheckReferenced(sch schema.Schema, chk schema.Check) (bool, error) {
// ColumnsFromCheckDefinition retrieves the Column Names referenced by a CheckDefinition
func ColumnsFromCheckDefinition(ctx *sql.Context, def *sql.CheckDefinition) ([]string, error) {
// Evaluate the CheckDefinition to get evaluated Expression
// TODO: need to use parser from the engine
parseStr := fmt.Sprintf("select %s", def.CheckExpression)
parsed, err := ast.Parse(parseStr)
if err != nil {
Expand Down
3 changes: 1 addition & 2 deletions go/libraries/doltcore/mvdata/engine_table_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
sqle "github.com/dolthub/go-mysql-server"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/plan"
"github.com/dolthub/go-mysql-server/sql/planbuilder"

"github.com/dolthub/dolt/go/cmd/dolt/commands/engine"
"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
Expand Down Expand Up @@ -66,7 +65,7 @@ func NewSqlEngineReader(ctx context.Context, dEnv *env.DoltEnv, tableName string
}
sqlCtx.SetCurrentDatabase(mrEnv.GetFirstDatabase())

ret, err := planbuilder.Parse(sqlCtx, se.GetUnderlyingEngine().Analyzer.Catalog, fmt.Sprintf("show create table `%s`", tableName))
ret, err := se.GetUnderlyingEngine().ParseAndBuildQuery(sqlCtx, nil, fmt.Sprintf("show create table `%s`", tableName))
if err != nil {
return nil, err
}
Expand Down
2 changes: 1 addition & 1 deletion go/libraries/doltcore/mvdata/engine_table_writer.go
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ func (s *SqlEngineTableWriter) getInsertNode(inputChannel chan sql.Row, replace
}

insert := fmt.Sprintf("insert into `%s` (%s) VALUES (%s)%s", s.tableName, colNames, values, duplicate)
parsed, err := planbuilder.Parse(s.sqlCtx, s.se.GetUnderlyingEngine().Analyzer.Catalog, insert)
parsed, err := s.se.GetUnderlyingEngine().ParseAndBuildQuery(s.sqlCtx, nil, insert)
if err != nil {
return nil, fmt.Errorf("error constructing import query '%s': %w", insert, err)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ import (
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/binlogreplication"
"github.com/dolthub/go-mysql-server/sql/mysql_db"
"github.com/dolthub/go-mysql-server/sql/planbuilder"
"github.com/dolthub/go-mysql-server/sql/rowexec"
"github.com/dolthub/go-mysql-server/sql/types"
"github.com/dolthub/vitess/go/mysql"
Expand Down Expand Up @@ -876,7 +875,7 @@ func convertVitessJsonExpressionString(ctx *sql.Context, value sqltypes.Value) (
return nil, fmt.Errorf("unable to access running SQL server")
}

node, err := planbuilder.Parse(ctx, server.Engine.Analyzer.Catalog, "SELECT "+strValue)
node, err := server.Engine.ParseAndBuildQuery(ctx, nil, "SELECT "+strValue)
if err != nil {
return nil, err
}
Expand Down
29 changes: 18 additions & 11 deletions go/libraries/doltcore/sqle/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -1309,7 +1309,7 @@ func (db Database) GetViewDefinition(ctx *sql.Context, viewName string) (sql.Vie
return sql.ViewDefinition{}, false, nil
}

views, viewDef, found, err := getViewDefinitionFromSchemaFragmentsOfView(ctx, tbl.(*WritableDoltTable), viewName)
views, viewDef, found, err := getViewDefinitionFromSchemaFragmentsOfView(ctx, db.getCatalog(ctx), tbl.(*WritableDoltTable), viewName)
if err != nil {
return sql.ViewDefinition{}, false, err
}
Expand All @@ -1320,7 +1320,7 @@ func (db Database) GetViewDefinition(ctx *sql.Context, viewName string) (sql.Vie
return viewDef, found, nil
}

func getViewDefinitionFromSchemaFragmentsOfView(ctx *sql.Context, tbl *WritableDoltTable, viewName string) ([]sql.ViewDefinition, sql.ViewDefinition, bool, error) {
func getViewDefinitionFromSchemaFragmentsOfView(ctx *sql.Context, cat *analyzer.Catalog, tbl *WritableDoltTable, viewName string) ([]sql.ViewDefinition, sql.ViewDefinition, bool, error) {
fragments, err := getSchemaFragmentsOfType(ctx, tbl, viewFragment)
if err != nil {
return nil, sql.ViewDefinition{}, false, err
Expand All @@ -1330,19 +1330,26 @@ func getViewDefinitionFromSchemaFragmentsOfView(ctx *sql.Context, tbl *WritableD
var viewDef sql.ViewDefinition
var views = make([]sql.ViewDefinition, len(fragments))
for i, fragment := range fragments {
cv, err := sqlparser.ParseWithOptions(fragments[i].fragment,
sql.NewSqlModeFromString(fragment.sqlMode).ParserOptions())
cv, _, _, err := cat.GetParser().ParseWithOptions(fragments[i].fragment, ';', false, sql.NewSqlModeFromString(fragment.sqlMode).ParserOptions())
if err != nil {
return nil, sql.ViewDefinition{}, false, err
}

createView, ok := cv.(*sqlparser.DDL)
if ok {
selectStr := fragments[i].fragment[createView.SubStatementPositionStart:createView.SubStatementPositionEnd]
views[i] = sql.ViewDefinition{Name: fragments[i].name, TextDefinition: selectStr,
CreateViewStatement: fragments[i].fragment, SqlMode: fragment.sqlMode}
views[i] = sql.ViewDefinition{
Name: fragments[i].name,
TextDefinition: selectStr,
CreateViewStatement: fragments[i].fragment,
SqlMode: fragment.sqlMode,
}
} else {
views[i] = sql.ViewDefinition{Name: fragments[i].name, TextDefinition: fragments[i].fragment, CreateViewStatement: fmt.Sprintf("CREATE VIEW %s AS %s", fragments[i].name, fragments[i].fragment)}
views[i] = sql.ViewDefinition{
Name: fragments[i].name,
TextDefinition: fragments[i].fragment,
CreateViewStatement: fmt.Sprintf("CREATE VIEW %s AS %s", fragments[i].name, fragments[i].fragment),
}
}

if strings.ToLower(fragment.name) == strings.ToLower(viewName) {
Expand All @@ -1364,7 +1371,7 @@ func (db Database) AllViews(ctx *sql.Context) ([]sql.ViewDefinition, error) {
return nil, nil
}

views, _, _, err := getViewDefinitionFromSchemaFragmentsOfView(ctx, tbl.(*WritableDoltTable), "")
views, _, _, err := getViewDefinitionFromSchemaFragmentsOfView(ctx, db.getCatalog(ctx), tbl.(*WritableDoltTable), "")
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -1533,9 +1540,9 @@ func (db Database) doltSchemaTableHash(ctx *sql.Context) (hash.Hash, error) {

// createEventDefinitionFromFragment creates an EventDefinition instance from the schema fragment |frag|.
func (db Database) createEventDefinitionFromFragment(ctx *sql.Context, frag schemaFragment) (*sql.EventDefinition, error) {
catalog := db.getCatalog(ctx)
sqlMode := sql.NewSqlModeFromString(frag.sqlMode)
parsed, err := planbuilder.ParseWithOptions(ctx, catalog, updateEventStatusTemporarilyForNonDefaultBranch(db.revision, frag.fragment), sqlMode.ParserOptions())
b := planbuilder.New(ctx, db.getCatalog(ctx))
b.SetParserOptions(sql.NewSqlModeFromString(frag.sqlMode).ParserOptions())
parsed, _, _, err := b.Parse(updateEventStatusTemporarilyForNonDefaultBranch(db.revision, frag.fragment), false)
if err != nil {
return nil, err
}
Expand Down
3 changes: 1 addition & 2 deletions go/libraries/doltcore/sqle/enginetest/dolt_branch_queries.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@ import (
"github.com/dolthub/go-mysql-server/enginetest/queries"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/plan"
"github.com/dolthub/go-mysql-server/sql/planbuilder"
"github.com/dolthub/go-mysql-server/sql/transform"
"github.com/dolthub/go-mysql-server/sql/types"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -603,7 +602,7 @@ func TestIndexedAccess(t *testing.T, e enginetest.QueryEngine, harness enginetes
}

func analyzeQuery(ctx *sql.Context, e enginetest.QueryEngine, query string) (sql.Node, error) {
parsed, err := planbuilder.Parse(ctx, e.EngineAnalyzer().Catalog, query)
parsed, err := e.ParseAndBuildQuery(ctx, nil, query)
if err != nil {
return nil, err
}
Expand Down
4 changes: 1 addition & 3 deletions go/libraries/doltcore/sqle/enginetest/testgen_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,6 @@ import (
"strings"
"testing"

"github.com/dolthub/go-mysql-server/sql/planbuilder"

"github.com/dolthub/go-mysql-server/enginetest"
"github.com/dolthub/go-mysql-server/enginetest/queries"
"github.com/dolthub/go-mysql-server/enginetest/scriptgen/setup"
Expand All @@ -47,7 +45,7 @@ func TestGenNewFormatQueryPlans(t *testing.T) {
for _, tt := range queries.PlanTests {
_, _ = w.WriteString("\t{\n")
ctx := enginetest.NewContextWithEngine(harness, engine)
parsed, err := planbuilder.Parse(ctx, engine.EngineAnalyzer().Catalog, tt.Query)
parsed, err := engine.ParseAndBuildQuery(ctx, nil, tt.Query)
require.NoError(t, err)

node, err := engine.EngineAnalyzer().Analyze(ctx, parsed, nil)
Expand Down
3 changes: 2 additions & 1 deletion go/libraries/doltcore/sqle/index/key_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,8 @@ func parseCreateTable(ctx *sql.Context, tableName string, sch schema.Schema) (*p
parseCtx := sql.NewEmptyContext()
parseCtx.SetCurrentDatabase("mydb")

pseudoAnalyzedQuery, err := planbuilder.Parse(parseCtx, catalog, query)
b := planbuilder.New(parseCtx, catalog)
pseudoAnalyzedQuery, _, _, err := b.Parse(query, false)
if err != nil {
return nil, err
}
Expand Down
3 changes: 1 addition & 2 deletions go/libraries/doltcore/sqle/index/mergeable_indexes_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
sqle "github.com/dolthub/go-mysql-server"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/plan"
"github.com/dolthub/go-mysql-server/sql/planbuilder"
"github.com/dolthub/go-mysql-server/sql/transform"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
Expand Down Expand Up @@ -1564,7 +1563,7 @@ func TestMergeableIndexesNulls(t *testing.T) {
}

func ReadRangesFromQuery(ctx *sql.Context, eng *sqle.Engine, query string) ([]*noms.ReadRange, error) {
parsed, err := planbuilder.Parse(ctx, eng.Analyzer.Catalog, query)
parsed, err := eng.ParseAndBuildQuery(ctx, nil, query)
if err != nil {
return nil, err
}
Expand Down
3 changes: 1 addition & 2 deletions go/libraries/doltcore/sqle/sqlutil/schema.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ import (
sqle "github.com/dolthub/go-mysql-server"
"github.com/dolthub/go-mysql-server/sql"
"github.com/dolthub/go-mysql-server/sql/plan"
"github.com/dolthub/go-mysql-server/sql/planbuilder"

"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
"github.com/dolthub/dolt/go/libraries/doltcore/schema"
Expand All @@ -30,7 +29,7 @@ import (
// ParseCreateTableStatement will parse a CREATE TABLE ddl statement and use it to create a Dolt Schema. A RootValue
// is used to generate unique tags for the Schema
func ParseCreateTableStatement(ctx *sql.Context, root *doltdb.RootValue, engine *sqle.Engine, query string) (string, schema.Schema, error) {
parsed, err := planbuilder.Parse(ctx, engine.Analyzer.Catalog, query)
parsed, err := engine.ParseAndBuildQuery(ctx, nil, query)
if err != nil {
return "", nil, err
}
Expand Down

0 comments on commit 8775be2

Please sign in to comment.