the best of both works...probably

This commit is contained in:
James Cor
2022-07-11 16:40:53 -07:00
parent 04dbd89c7a
commit 0c0216859f
12 changed files with 52 additions and 46 deletions

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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())

View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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)