mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-21 11:39:10 -05:00
Refactor apr usage in sql.Exec
Having duling argument results was resulting in confusion, but not fully addressed yet.
This commit is contained in:
+39
-31
@@ -189,6 +189,12 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
|
||||
return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage)
|
||||
}
|
||||
|
||||
globalArgs := (*cliCtx).GlobalArgs()
|
||||
err = validateSqlArgs(globalArgs)
|
||||
if err != nil {
|
||||
return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage)
|
||||
}
|
||||
|
||||
// We need a username and password for many SQL commands, so set defaults if they don't exist
|
||||
dEnv.Config.SetFailsafes(env.DefaultFailsafeConfig)
|
||||
|
||||
@@ -198,13 +204,7 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
|
||||
username = user
|
||||
}
|
||||
|
||||
mrEnv, verr := getMultiRepoEnv(ctx, apr, dEnv)
|
||||
if verr != nil {
|
||||
return HandleVErrAndExitCode(verr, usage)
|
||||
}
|
||||
|
||||
// need to return cfgdirpath and error
|
||||
var cfgDirPath string
|
||||
// data-dir args come either from the global args or the subcommand args. We need to check both.
|
||||
var dataDir string
|
||||
if multiDbDir, ok := apr.GetValue(MultiDBDirFlag); ok {
|
||||
// When GlobalArgs migration is complete, drop this flag.
|
||||
@@ -212,10 +212,17 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
|
||||
} else if dataDirPath, ok := apr.GetValue(DataDirFlag); ok {
|
||||
// TODO: remove this once we remove the deprecated passing of data dir directly to subcommand.
|
||||
dataDir = dataDirPath
|
||||
} else if dataDirPath, ok := (*cliCtx).GlobalArgs().GetValue(DataDirFlag); ok {
|
||||
} else if dataDirPath, ok := globalArgs.GetValue(DataDirFlag); ok {
|
||||
dataDir = dataDirPath
|
||||
}
|
||||
|
||||
mrEnv, dataDir, verr := getMultiRepoEnv(ctx, dataDir, dEnv)
|
||||
if verr != nil {
|
||||
return HandleVErrAndExitCode(verr, usage)
|
||||
}
|
||||
|
||||
// need to return cfgdirpath and error
|
||||
var cfgDirPath string
|
||||
cfgDir, cfgDirSpecified := apr.GetValue(CfgDirFlag)
|
||||
if cfgDirSpecified {
|
||||
cfgDirPath = cfgDir
|
||||
@@ -271,10 +278,20 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
|
||||
}
|
||||
}
|
||||
|
||||
se, sqlCtx, err := newEngine(ctx, apr, cfgDirPath, privsFp, branchControlFilePath, username, mrEnv)
|
||||
format := engine.FormatTabular
|
||||
if formatSr, ok := apr.GetValue(FormatFlag); ok {
|
||||
var verr errhand.VerboseError
|
||||
format, verr = GetResultFormat(formatSr)
|
||||
if verr != nil {
|
||||
return HandleVErrAndExitCode(verr, usage)
|
||||
}
|
||||
}
|
||||
|
||||
se, sqlCtx, err := newEngine(ctx, format, cfgDirPath, privsFp, branchControlFilePath, username, mrEnv)
|
||||
if err != nil {
|
||||
return HandleVErrAndExitCode(errhand.VerboseErrorFromError(err), usage)
|
||||
}
|
||||
|
||||
defer se.Close()
|
||||
|
||||
if query, queryOK := apr.GetValue(QueryFlag); queryOK {
|
||||
@@ -342,7 +359,7 @@ func (cmd SqlCmd) Exec(ctx context.Context, commandStr string, args []string, dE
|
||||
|
||||
func newEngine(
|
||||
ctx context.Context,
|
||||
apr *argparser.ArgParseResults,
|
||||
format engine.PrintResultFormat,
|
||||
cfgDirPath string,
|
||||
privsFp string,
|
||||
branchControlFilePath string,
|
||||
@@ -350,15 +367,6 @@ func newEngine(
|
||||
mrEnv *env.MultiRepoEnv,
|
||||
) (*engine.SqlEngine, *sql.Context, error) {
|
||||
|
||||
format := engine.FormatTabular
|
||||
if formatSr, ok := apr.GetValue(FormatFlag); ok {
|
||||
var verr errhand.VerboseError
|
||||
format, verr = GetResultFormat(formatSr)
|
||||
if verr != nil {
|
||||
return nil, nil, verr
|
||||
}
|
||||
}
|
||||
|
||||
config := &engine.SqlEngineConfig{
|
||||
DoltCfgDirPath: cfgDirPath,
|
||||
PrivFilePath: privsFp,
|
||||
@@ -505,26 +513,26 @@ func execSaveQuery(ctx *sql.Context, dEnv *env.DoltEnv, se *engine.SqlEngine, ap
|
||||
}
|
||||
|
||||
// getMultiRepoEnv returns an appropriate MultiRepoEnv for this invocation of the command
|
||||
func getMultiRepoEnv(ctx context.Context, apr *argparser.ArgParseResults, dEnv *env.DoltEnv) (*env.MultiRepoEnv, errhand.VerboseError) {
|
||||
func getMultiRepoEnv(ctx context.Context, workingDir string, dEnv *env.DoltEnv) (mrEnv *env.MultiRepoEnv, resolvedDir string, verr errhand.VerboseError) {
|
||||
var err error
|
||||
fs := dEnv.FS
|
||||
|
||||
if dataDir, ok := apr.GetValue(MultiDBDirFlag); ok {
|
||||
fs, err = fs.WithWorkingDir(dataDir)
|
||||
} else if dataDir, ok := apr.GetValue(DataDirFlag); ok {
|
||||
fs, err = fs.WithWorkingDir(dataDir)
|
||||
if len(workingDir) > 0 {
|
||||
fs, err = fs.WithWorkingDir(workingDir)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, errhand.VerboseErrorFromError(err)
|
||||
return nil, "", errhand.VerboseErrorFromError(err)
|
||||
}
|
||||
|
||||
mrEnv, err := env.MultiEnvForDirectory(ctx, dEnv.Config.WriteableConfig(), fs, dEnv.Version, dEnv.IgnoreLockFile, dEnv)
|
||||
resolvedDir, err = fs.Abs("")
|
||||
if err != nil {
|
||||
return nil, errhand.VerboseErrorFromError(err)
|
||||
return nil, "", errhand.VerboseErrorFromError(err)
|
||||
}
|
||||
|
||||
return mrEnv, nil
|
||||
mrEnv, err = env.MultiEnvForDirectory(ctx, dEnv.Config.WriteableConfig(), fs, dEnv.Version, dEnv.IgnoreLockFile, dEnv)
|
||||
if err != nil {
|
||||
return nil, "", errhand.VerboseErrorFromError(err)
|
||||
}
|
||||
|
||||
return mrEnv, resolvedDir, nil
|
||||
}
|
||||
|
||||
func execBatch(
|
||||
|
||||
Reference in New Issue
Block a user