mirror of
https://github.com/dolthub/dolt.git
synced 2026-03-18 17:50:48 -05:00
the best of both works...probably
This commit is contained in:
@@ -370,7 +370,7 @@ func getInitialDBStateWithDefaultBranch(ctx context.Context, db dsqle.SqlDatabas
|
||||
|
||||
// NewSqlEngineForEnv returns a SqlEngine configured for the environment provided, with a single root user
|
||||
func NewSqlEngineForEnv(ctx context.Context, dEnv *env.DoltEnv) (*SqlEngine, error) {
|
||||
mrEnv, err := env.MultiEnvForDirectory(ctx, dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(ctx, dEnv.FS, dEnv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -242,7 +242,7 @@ func rebaseSqlEngine(ctx context.Context, dEnv *env.DoltEnv, cm *doltdb.Commit)
|
||||
opts := editor.Options{Deaf: dEnv.DbEaFactory(), Tempdir: dEnv.TempTableFilesDir()}
|
||||
db := dsqle.NewDatabase(dbName, dEnv.DbData(), opts)
|
||||
|
||||
mrEnv, err := env.MultiEnvForDirectory(ctx, dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(ctx, dEnv.FS, dEnv)
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
@@ -50,7 +50,6 @@ import (
|
||||
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess"
|
||||
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/dtables"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/argparser"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/filesys"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/iohelp"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/osutil"
|
||||
)
|
||||
@@ -442,24 +441,11 @@ func getMultiRepoEnv(ctx context.Context, apr *argparser.ArgParseResults, dEnv *
|
||||
return nil, errhand.VerboseErrorFromError(err)
|
||||
}
|
||||
|
||||
mrEnv, err := env.MultiEnvForDirectory(ctx, dEnv.Config.WriteableConfig(), fs, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(ctx, fs, dEnv)
|
||||
if err != nil {
|
||||
return nil, errhand.VerboseErrorFromError(err)
|
||||
}
|
||||
|
||||
if dEnv.Valid() {
|
||||
if _, ok := fs.(*filesys.InMemFS); ok {
|
||||
mrEnv.AddEnv("dolt", dEnv)
|
||||
} else {
|
||||
path, err := dEnv.FS.Abs(".")
|
||||
if err != nil {
|
||||
return nil, errhand.VerboseErrorFromError(err)
|
||||
}
|
||||
dbName := filepath.Base(path)
|
||||
mrEnv.AddEnv(dbName, dEnv)
|
||||
}
|
||||
}
|
||||
|
||||
return mrEnv, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ import (
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"time"
|
||||
|
||||
@@ -34,7 +33,6 @@ import (
|
||||
"github.com/dolthub/dolt/go/libraries/doltcore/env"
|
||||
_ "github.com/dolthub/dolt/go/libraries/doltcore/sqle/dfunctions"
|
||||
"github.com/dolthub/dolt/go/libraries/doltcore/sqlserver"
|
||||
"github.com/dolthub/dolt/go/libraries/utils/filesys"
|
||||
)
|
||||
|
||||
// Serve starts a MySQL-compatible server. Returns any errors that were encountered.
|
||||
@@ -100,23 +98,10 @@ func Serve(
|
||||
}
|
||||
|
||||
// TODO: this should be the global config, probably?
|
||||
mrEnv, err = env.MultiEnvForDirectory(ctx, dEnv.Config.WriteableConfig(), fs, dEnv.Version)
|
||||
mrEnv, err = env.MultiEnvForDirectory(ctx, fs, dEnv)
|
||||
if err != nil {
|
||||
return err, nil
|
||||
}
|
||||
|
||||
if dEnv.Valid() {
|
||||
if _, ok := fs.(*filesys.InMemFS); ok {
|
||||
mrEnv.AddEnv("dolt", dEnv)
|
||||
} else {
|
||||
path, err := dEnv.FS.Abs(".")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
dbName := filepath.Base(path)
|
||||
mrEnv.AddEnv(dbName, dEnv)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if len(serverConfig.DataDir()) > 0 {
|
||||
fs, err = fs.WithWorkingDir(serverConfig.DataDir())
|
||||
|
||||
43
go/libraries/doltcore/env/multi_repo_env.go
vendored
43
go/libraries/doltcore/env/multi_repo_env.go
vendored
@@ -17,6 +17,7 @@ package env
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
@@ -216,14 +217,48 @@ func getRepoRootDir(path, pathSeparator string) string {
|
||||
// MultiEnvForDirectory returns a MultiRepoEnv for the directory rooted at the file system given
|
||||
func MultiEnvForDirectory(
|
||||
ctx context.Context,
|
||||
config config.ReadWriteConfig,
|
||||
fs filesys.Filesys,
|
||||
version string,
|
||||
dEnv *DoltEnv,
|
||||
) (*MultiRepoEnv, error) {
|
||||
mrEnv := &MultiRepoEnv{
|
||||
envs: make([]NamedEnv, 0),
|
||||
fs: fs,
|
||||
cfg: config,
|
||||
cfg: dEnv.Config.WriteableConfig(),
|
||||
}
|
||||
|
||||
if dEnv.Valid() {
|
||||
dbName := "dolt"
|
||||
if dEnv.RSLoadErr != nil {
|
||||
return nil, fmt.Errorf("error loading environment: %s", dEnv.RSLoadErr.Error())
|
||||
} else if dEnv.DBLoadError != nil {
|
||||
return nil, fmt.Errorf("error loading environment: %s", dEnv.DBLoadError.Error())
|
||||
} else if dEnv.CfgLoadErr != nil {
|
||||
return nil, fmt.Errorf("error loading environment: %s", dEnv.CfgLoadErr.Error())
|
||||
}
|
||||
u, err := earl.Parse(dEnv.urlStr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if u.Scheme == dbfactory.FileScheme {
|
||||
path, err := url.PathUnescape(u.Path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
path, err = dEnv.FS.Abs(path)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dirName := getRepoRootDir(path, string(os.PathSeparator))
|
||||
|
||||
if dirName != "" {
|
||||
dbName = dirToDBName(dirName)
|
||||
}
|
||||
}
|
||||
|
||||
mrEnv.AddEnv(dbName, dEnv)
|
||||
}
|
||||
|
||||
// TODO: need to know if current directory is a database
|
||||
@@ -240,7 +275,7 @@ func MultiEnvForDirectory(
|
||||
return false
|
||||
}
|
||||
|
||||
newEnv := Load(ctx, GetCurrentUserHomeDir, newFs, doltdb.LocalDirDoltDB, version)
|
||||
newEnv := Load(ctx, GetCurrentUserHomeDir, newFs, doltdb.LocalDirDoltDB, dEnv.Version)
|
||||
if newEnv.Valid() {
|
||||
mrEnv.AddEnv(dirToDBName(dir), newEnv)
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ func TestMultiEnvForDirectory(t *testing.T) {
|
||||
envPath := filepath.Join(rootPath, " test---name _ 123")
|
||||
dEnv := initRepoWithRelativePath(t, envPath, hdp)
|
||||
|
||||
mrEnv, err := MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, mrEnv.envs, 1)
|
||||
|
||||
@@ -124,7 +124,7 @@ func TestMultiEnvForDirectoryWithMultipleRepos(t *testing.T) {
|
||||
subEnv1 := initRepoWithRelativePath(t, filepath.Join(envPath, "abc"), hdp)
|
||||
subEnv2 := initRepoWithRelativePath(t, filepath.Join(envPath, "def"), hdp)
|
||||
|
||||
mrEnv, err := MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, mrEnv.envs, 3)
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ type sqlEngineTableReader struct {
|
||||
}
|
||||
|
||||
func NewSqlEngineReader(ctx context.Context, dEnv *env.DoltEnv, tableName string) (*sqlEngineTableReader, error) {
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ type SqlEngineTableWriter struct {
|
||||
}
|
||||
|
||||
func NewSqlEngineTableWriter(ctx context.Context, dEnv *env.DoltEnv, createTableSchema, rowOperationSchema schema.Schema, options *MoverOptions, statsCB noms.StatsCB) (*SqlEngineTableWriter, error) {
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ var _ enginetest.ValidatingHarness = (*DoltHarness)(nil)
|
||||
|
||||
func newDoltHarness(t *testing.T) *DoltHarness {
|
||||
dEnv := dtestutils.CreateTestEnv()
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
require.NoError(t, err)
|
||||
b := env.GetDefaultInitBranch(dEnv.Config)
|
||||
pro := sqle.NewDoltDatabaseProvider(b, mrEnv.FileSystem())
|
||||
@@ -322,7 +322,7 @@ func (d *DoltHarness) NewDatabaseProvider(dbs ...sql.Database) sql.MutableDataba
|
||||
// NewDatabases must be called before NewDatabaseProvider, we grab the DoltEnvs
|
||||
// previously created by NewDatabases and re-add them to the new MultiRepoEnv.
|
||||
dEnv := dtestutils.CreateTestEnv()
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
require.NoError(d.t, err)
|
||||
d.multiRepoEnv = mrEnv
|
||||
for _, db := range dbs {
|
||||
|
||||
@@ -94,7 +94,7 @@ func setupIndexes(t *testing.T, tableName, insertQuery string) (*sqle.Engine, *e
|
||||
cols: idxv2v1Cols,
|
||||
}
|
||||
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
require.NoError(t, err)
|
||||
b := env.GetDefaultInitBranch(dEnv.Config)
|
||||
pro := dsqle.NewDoltDatabaseProvider(b, mrEnv.FileSystem(), db)
|
||||
|
||||
@@ -308,7 +308,7 @@ func schemaToSchemaString(sch sql.Schema) (string, error) {
|
||||
func sqlNewEngine(dEnv *env.DoltEnv) (*sqle.Engine, error) {
|
||||
opts := editor.Options{Deaf: dEnv.DbEaFactory(), Tempdir: dEnv.TempTableFilesDir()}
|
||||
db := dsql.NewDatabase("dolt", dEnv.DbData(), opts)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ func setupBenchmark(t *testing.B, dEnv *env.DoltEnv) (*sql.Context, *engine.SqlE
|
||||
Autocommit: true,
|
||||
}
|
||||
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.Config.WriteableConfig(), dEnv.FS, dEnv.Version)
|
||||
mrEnv, err := env.MultiEnvForDirectory(context.Background(), dEnv.FS, dEnv)
|
||||
require.NoError(t, err)
|
||||
|
||||
eng, err := engine.NewSqlEngine(ctx, mrEnv, engine.FormatNull, config)
|
||||
|
||||
Reference in New Issue
Block a user