mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-23 10:27:34 -06:00
Return not found for non-existent DB refs
This commit is contained in:
@@ -16,11 +16,13 @@ package sqle
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/dolthub/dolt/go/store/datas"
|
||||
"github.com/dolthub/go-mysql-server/sql"
|
||||
|
||||
"github.com/dolthub/dolt/go/cmd/dolt/cli"
|
||||
@@ -794,6 +796,7 @@ func (p DoltDatabaseProvider) databaseForRevision(ctx *sql.Context, revisionQual
|
||||
if !ok {
|
||||
return nil, false, nil
|
||||
}
|
||||
|
||||
db, err := revisionDbForCommit(ctx, srcDb.(Database), rev, requestedName)
|
||||
if err != nil {
|
||||
return nil, false, err
|
||||
@@ -814,12 +817,12 @@ func (p DoltDatabaseProvider) databaseForRevision(ctx *sql.Context, revisionQual
|
||||
func revisionDbType(ctx *sql.Context, srcDb dsess.SqlDatabase, revSpec string) (revType dsess.RevisionType, resolvedRevSpec string, err error) {
|
||||
resolvedRevSpec, err = resolveAncestorSpec(ctx, revSpec, srcDb.DbData().Ddb)
|
||||
if err != nil {
|
||||
return 0, "", err
|
||||
return dsess.RevisionTypeNone, "", err
|
||||
}
|
||||
|
||||
caseSensitiveBranchName, isBranch, err := isBranch(ctx, srcDb, resolvedRevSpec)
|
||||
if err != nil {
|
||||
return 0, "", err
|
||||
return dsess.RevisionTypeNone, "", err
|
||||
}
|
||||
|
||||
if isBranch {
|
||||
@@ -828,7 +831,7 @@ func revisionDbType(ctx *sql.Context, srcDb dsess.SqlDatabase, revSpec string) (
|
||||
|
||||
isTag, err := isTag(ctx, srcDb, resolvedRevSpec)
|
||||
if err != nil {
|
||||
return 0, "", err
|
||||
return dsess.RevisionTypeNone, "", err
|
||||
}
|
||||
|
||||
if isTag {
|
||||
@@ -836,12 +839,40 @@ func revisionDbType(ctx *sql.Context, srcDb dsess.SqlDatabase, revSpec string) (
|
||||
}
|
||||
|
||||
if doltdb.IsValidCommitHash(resolvedRevSpec) {
|
||||
return dsess.RevisionTypeCommit, resolvedRevSpec, nil
|
||||
// IsValidCommitHash just checks a regex, we need to see if the commit actually exists
|
||||
valid, err := isValidCommitHash(ctx, srcDb, resolvedRevSpec)
|
||||
if err != nil {
|
||||
return 0, "", err
|
||||
}
|
||||
|
||||
if valid {
|
||||
return dsess.RevisionTypeCommit, resolvedRevSpec, nil
|
||||
}
|
||||
}
|
||||
|
||||
return dsess.RevisionTypeNone, "", nil
|
||||
}
|
||||
|
||||
func isValidCommitHash(ctx *sql.Context, db dsess.SqlDatabase, commitHash string) (bool, error) {
|
||||
cs, err := doltdb.NewCommitSpec(commitHash)
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
for _, ddb := range db.DoltDatabases() {
|
||||
_, err = ddb.Resolve(ctx, cs, nil)
|
||||
if errors.Is(err, datas.ErrCommitNotFound) {
|
||||
continue
|
||||
} else if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
||||
return true, nil
|
||||
}
|
||||
|
||||
return false, nil
|
||||
}
|
||||
|
||||
func initialDbState(ctx context.Context, db dsess.SqlDatabase, branch string) (dsess.InitialDbState, error) {
|
||||
rsr := db.DbData().Rsr
|
||||
ddb := db.DbData().Ddb
|
||||
|
||||
@@ -2590,6 +2590,38 @@ var DoltCheckoutScripts = []queries.ScriptTest{
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "Using non-existent refs",
|
||||
SetUpScript: []string{
|
||||
"create table t (a int primary key, b int);",
|
||||
"insert into t values (1, 1);",
|
||||
"call dolt_commit('-Am', 'creating table t');",
|
||||
"call dolt_branch('b1');",
|
||||
"call dolt_tag('tag1');",
|
||||
},
|
||||
Assertions: []queries.ScriptTestAssertion{
|
||||
{
|
||||
Query: "use mydb/b1",
|
||||
Expected: []sql.Row{},
|
||||
},
|
||||
{
|
||||
Query: "use mydb/b2",
|
||||
ExpectedErrStr: "database not found: mydb/b2",
|
||||
},
|
||||
{
|
||||
Query: "use mydb/tag1",
|
||||
Expected: []sql.Row{},
|
||||
},
|
||||
{
|
||||
Query: "use mydb/tag2",
|
||||
ExpectedErrStr: "database not found: mydb/tag2",
|
||||
},
|
||||
{
|
||||
Query: "use mydb/h4jks5lomp9u41r6902knn0pfr7lsgth",
|
||||
ExpectedErrStr: "database not found: mydb/h4jks5lomp9u41r6902knn0pfr7lsgth",
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
var DoltInfoSchemaScripts = []queries.ScriptTest{
|
||||
|
||||
@@ -333,7 +333,7 @@ func LoadCommitAddr(ctx context.Context, vr types.ValueReader, addr hash.Hash) (
|
||||
return nil, err
|
||||
}
|
||||
if v == nil {
|
||||
return nil, errors.New("target commit not found")
|
||||
return nil, ErrCommitNotFound
|
||||
}
|
||||
return CommitFromValue(vr.Format(), v)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user