Skip to content

Commit

Permalink
Merge pull request #1864 from dolthub/andy/database-provider
Browse files Browse the repository at this point in the history
Andy/database provider
  • Loading branch information
andy-wm-arthur committed Jun 29, 2021
2 parents cd479ad + 1f1f776 commit c4411f9
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 23 deletions.
25 changes: 7 additions & 18 deletions go/cmd/dolt/commands/sqlserver/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -117,12 +107,15 @@ 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)

sqlEngine.AddDatabase(information_schema.NewInformationSchemaDatabase(sqlEngine.Catalog))
if err := sqlEngine.Catalog.Register(dfunctions.DoltFunctions...); err != nil {
return nil, err
}

portAsString := strconv.Itoa(serverConfig.Port())
hostPort := net.JoinHostPort(serverConfig.Host(), portAsString)
Expand Down Expand Up @@ -222,10 +215,6 @@ func newSessionBuilder(sqlEngine *sqle.Engine, username, email string, autocommi
}
}

func newDatabase(name string, dEnv *env.DoltEnv) dsqle.Database {
return dsqle.NewDatabase(name, dEnv.DbData())
}

func dbsAsDSQLDBs(dbs []sql.Database) []dsqle.Database {
dsqlDBs := make([]dsqle.Database, 0, len(dbs))

Expand Down
2 changes: 1 addition & 1 deletion go/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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.20210628232014-a94583cf4af7
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
Expand Down
6 changes: 6 additions & 0 deletions go/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,12 @@ 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/go-mysql-server v0.10.1-0.20210628224918-7a56adb6c97c h1:wTPo3H4Glg3xc3Oa2rDSbMgI223brfdL/VJa/O1eE50=
github.com/dolthub/go-mysql-server v0.10.1-0.20210628224918-7a56adb6c97c/go.mod h1:51T7rtmujJjMfwvST6BxqQC4my/IpVbP7oLFGPO2x74=
github.com/dolthub/go-mysql-server v0.10.1-0.20210628232014-a94583cf4af7 h1:AfDsXh0m2NNJpnWjt3naBLLPQ5PFqM4GXm6jQQKC8Rc=
github.com/dolthub/go-mysql-server v0.10.1-0.20210628232014-a94583cf4af7/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=
Expand Down
8 changes: 4 additions & 4 deletions go/libraries/doltcore/sqle/database.go
Original file line number Diff line number Diff line change
Expand Up @@ -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{}
Expand Down
69 changes: 69 additions & 0 deletions go/libraries/doltcore/sqle/database_provider.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// Copyright 2021 Dolthub, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package sqle

import (
"github.com/dolthub/go-mysql-server/sql"
)

type DoltDatabaseProvider struct {
databases map[string]sql.Database
}

var _ sql.DatabaseProvider = DoltDatabaseProvider{}

func NewDoltDatabaseProvider(databases ...Database) sql.MutableDatabaseProvider {
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
}

// TODO: dynamically provide databases for refs
// eg: "USE mydatabase/mybranch;"

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) {
i := 0
all = make([]sql.Database, len(p.databases))
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)
}

0 comments on commit c4411f9

Please sign in to comment.