From ee47bbc8ad983c635938896f8d2968a2f63082d8 Mon Sep 17 00:00:00 2001 From: Andy Arthur Date: Mon, 28 Jun 2021 14:17:20 -0700 Subject: [PATCH] added DoltDatabaseProvider --- go/cmd/dolt/commands/sqlserver/server.go | 21 +++----- go/cmd/dolt/dolt.go | 4 +- go/go.mod | 4 +- go/go.sum | 2 + go/libraries/doltcore/sqle/database.go | 8 ++-- .../doltcore/sqle/database_provider.go | 48 ++++++++++++++++++- 6 files changed, 65 insertions(+), 22 deletions(-) diff --git a/go/cmd/dolt/commands/sqlserver/server.go b/go/cmd/dolt/commands/sqlserver/server.go index ff3659a158..7c400b5e53 100644 --- a/go/cmd/dolt/commands/sqlserver/server.go +++ b/go/cmd/dolt/commands/sqlserver/server.go @@ -84,16 +84,6 @@ func Serve(ctx context.Context, version string, serverConfig ServerConfig, serve userAuth := auth.NewAudit(auth.NewNativeSingle(serverConfig.User(), serverConfig.Password(), permissions), auth.NewAuditLog(logrus.StandardLogger())) - c := sql.NewCatalog() - a := analyzer.NewBuilder(c).WithParallelism(serverConfig.QueryParallelism()).Build() - sqlEngine := sqle.New(c, a, nil) - - err := sqlEngine.Catalog.Register(dfunctions.DoltFunctions...) - - if err != nil { - return nil, err - } - var username string var email string var mrEnv env.MultiRepoEnv @@ -117,13 +107,16 @@ func Serve(ctx context.Context, version string, serverConfig ServerConfig, serve } dbs := commands.CollectDBs(mrEnv) + cat := sql.NewCatalogWithDbProvider(dsqle.NewDoltDatabaseProvider(dbs...)) + cat.AddDatabase(information_schema.NewInformationSchemaDatabase(cat)) - for _, db := range dbs { - sqlEngine.AddDatabase(db) + a := analyzer.NewBuilder(cat).WithParallelism(serverConfig.QueryParallelism()).Build() + sqlEngine := sqle.New(cat, a, nil) + + if err := sqlEngine.Catalog.Register(dfunctions.DoltFunctions...); err != nil { + return nil, err } - sqlEngine.AddDatabase(information_schema.NewInformationSchemaDatabase(sqlEngine.Catalog)) - portAsString := strconv.Itoa(serverConfig.Port()) hostPort := net.JoinHostPort(serverConfig.Host(), portAsString) diff --git a/go/cmd/dolt/dolt.go b/go/cmd/dolt/dolt.go index 179da6946a..d294b6103c 100644 --- a/go/cmd/dolt/dolt.go +++ b/go/cmd/dolt/dolt.go @@ -233,7 +233,7 @@ func runMain() int { restoreIO := cli.InitIO() defer restoreIO() - warnIfMaxFilesTooLow() + //warnIfMaxFilesTooLow() ctx := context.Background() dEnv := env.Load(ctx, env.GetCurrentUserHomeDir, filesys.LocalFS, doltdb.LocalDirDoltDB, Version) @@ -282,7 +282,7 @@ func runMain() int { return 1 } - err = reconfigIfTempFileMoveFails(dEnv) + //err = reconfigIfTempFileMoveFails(dEnv) if err != nil { cli.PrintErrln(color.RedString("Failed to setup the temporary directory. %v`", err)) diff --git a/go/go.mod b/go/go.mod index ab3e149e9f..c02d66f238 100644 --- a/go/go.mod +++ b/go/go.mod @@ -18,7 +18,7 @@ require ( github.com/denisbrodbeck/machineid v1.0.1 github.com/dolthub/dolt/go/gen/proto/dolt/services/eventsapi v0.0.0-20201005193433-3ee972b1d078 github.com/dolthub/fslock v0.0.2 - github.com/dolthub/go-mysql-server v0.10.1-0.20210623170540-c0b4e3e5599a + github.com/dolthub/go-mysql-server v0.10.1-0.20210624230211-b26209b377c5 github.com/dolthub/ishell v0.0.0-20210205014355-16a4ce758446 github.com/dolthub/mmap-go v1.0.4-0.20201107010347-f9f2a9588a66 github.com/dolthub/sqllogictest/go v0.0.0-20201107003712-816f3ae12d81 @@ -82,4 +82,6 @@ require ( replace github.com/dolthub/dolt/go/gen/proto/dolt/services/eventsapi => ./gen/proto/dolt/services/eventsapi +replace github.com/dolthub/go-mysql-server => ../../go-mysql-server + go 1.15 diff --git a/go/go.sum b/go/go.sum index b0ffe2c393..22453195c4 100644 --- a/go/go.sum +++ b/go/go.sum @@ -144,6 +144,8 @@ github.com/dolthub/fslock v0.0.2 h1:8vUh47iKovgrtXNrXVIzsIoWLlspoXg+3nslhUzgKSw= github.com/dolthub/fslock v0.0.2/go.mod h1:0i7bsNkK+XHwFL3dIsSWeXSV7sykVzzVr6+jq8oeEo0= github.com/dolthub/go-mysql-server v0.10.1-0.20210623170540-c0b4e3e5599a h1:ZJNcle93VqzlmKqUcmrB7gxoIS/XBQdjx0+1GhCHiEM= github.com/dolthub/go-mysql-server v0.10.1-0.20210623170540-c0b4e3e5599a/go.mod h1:51T7rtmujJjMfwvST6BxqQC4my/IpVbP7oLFGPO2x74= +github.com/dolthub/go-mysql-server v0.10.1-0.20210624230211-b26209b377c5 h1:zjQ8mWPAM/j2LWPV4IFEB/uAamfUJA2ahZSo1sEiOdQ= +github.com/dolthub/go-mysql-server v0.10.1-0.20210624230211-b26209b377c5/go.mod h1:51T7rtmujJjMfwvST6BxqQC4my/IpVbP7oLFGPO2x74= github.com/dolthub/ishell v0.0.0-20210205014355-16a4ce758446 h1:0ol5pj+QlKUKAtqs1LiPM3ZJKs+rHPgLSsMXmhTrCAM= github.com/dolthub/ishell v0.0.0-20210205014355-16a4ce758446/go.mod h1:dhGBqcCEfK5kuFmeO5+WOx3hqc1k3M29c1oS/R7N4ms= github.com/dolthub/mmap-go v1.0.4-0.20201107010347-f9f2a9588a66 h1:WRPDbpJWEnPxPmiuOTndT+lUWUeGjx6eoNOK9O4tQQQ= diff --git a/go/libraries/doltcore/sqle/database.go b/go/libraries/doltcore/sqle/database.go index caab11f82a..6fb33fe3fa 100644 --- a/go/libraries/doltcore/sqle/database.go +++ b/go/libraries/doltcore/sqle/database.go @@ -60,10 +60,10 @@ type Database struct { drw env.DocsReadWriter } -var _ sql.Database = (*Database)(nil) -var _ sql.TableCreator = (*Database)(nil) -var _ sql.TemporaryTableCreator = (*Database)(nil) -var _ sql.TemporaryTableDatabase = (*Database)(nil) +var _ sql.Database = Database{} +var _ sql.TableCreator = Database{} +var _ sql.TemporaryTableCreator = Database{} +var _ sql.TemporaryTableDatabase = Database{} // DisabledTransaction is a no-op transaction type that lets us feature-gate transaction logic changes type DisabledTransaction struct{} diff --git a/go/libraries/doltcore/sqle/database_provider.go b/go/libraries/doltcore/sqle/database_provider.go index 97ee941a40..49281483cb 100644 --- a/go/libraries/doltcore/sqle/database_provider.go +++ b/go/libraries/doltcore/sqle/database_provider.go @@ -2,8 +2,54 @@ package sqle +import ( + "github.com/dolthub/go-mysql-server/sql" +) type DoltDatabaseProvider struct { + databases map[string]sql.Database +} -} \ No newline at end of file +var _ sql.DatabaseProvider = DoltDatabaseProvider{} + +func NewDoltDatabaseProvider(databases ...Database) sql.DatabaseProvider { + dbs := make(map[string]sql.Database, len(databases)) + for _, db := range databases { + dbs[db.Name()] = db + } + + return DoltDatabaseProvider{databases: dbs} +} + +func (p DoltDatabaseProvider) Database(name string) (db sql.Database, err error) { + var ok bool + if db, ok = p.databases[name]; ok { + return db, nil + } + + return nil, sql.ErrDatabaseNotFound.New(name) +} + +func (p DoltDatabaseProvider) HasDatabase(name string) bool { + _, err := p.Database(name) + return err == nil +} + +func (p DoltDatabaseProvider) AllDatabases() (all []sql.Database) { + all = make([]sql.Database, len(p.databases)) + i := 0 + for _, db := range p.databases { + all[i] = db + i++ + } + return +} + +func (p DoltDatabaseProvider) AddDatabase(db sql.Database) { + p.databases[db.Name()] = db +} + +func (p DoltDatabaseProvider) DropDatabase(name string) { + delete(p.databases, name) +}