mirror of
https://github.com/dolthub/dolt.git
synced 2026-05-03 03:10:26 -05:00
Fixes and more tests
This commit is contained in:
@@ -346,9 +346,11 @@ func (i *dotDotCommiterator) Next(ctx context.Context) (hash.Hash, *doltdb.Commi
|
||||
}
|
||||
}
|
||||
|
||||
// If not invisible, return commit. Otherwise get next commit
|
||||
if !nextC.invisible {
|
||||
return nextC.hash, nextC.commit, nil
|
||||
}
|
||||
return i.Next(ctx)
|
||||
}
|
||||
|
||||
return hash.Hash{}, nil, io.EOF
|
||||
|
||||
@@ -161,35 +161,46 @@ func (ltf *LogTableFunction) WithExpressions(expression ...sql.Expression) (sql.
|
||||
ltf.secondRevisionExpr = expression[1]
|
||||
}
|
||||
|
||||
// validate the expressions
|
||||
if err := ltf.validateRevisionExpressions(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return ltf, nil
|
||||
}
|
||||
|
||||
func (ltf *LogTableFunction) validateRevisionExpressions() error {
|
||||
if ltf.revisionExpr != nil {
|
||||
if !sql.IsText(ltf.revisionExpr.Type()) {
|
||||
return nil, sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr.String())
|
||||
return sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr.String())
|
||||
}
|
||||
// Second revision must exist if first revision contains '^'
|
||||
if ltf.secondRevisionExpr == nil && strings.Contains(ltf.revisionExpr.String(), "^") {
|
||||
return sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr.String())
|
||||
}
|
||||
}
|
||||
|
||||
if ltf.secondRevisionExpr != nil {
|
||||
// Neither revision expression can contain '..' if two revisions provided
|
||||
if !sql.IsText(ltf.secondRevisionExpr.Type()) || strings.Contains(ltf.secondRevisionExpr.String(), "..") {
|
||||
return nil, sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.secondRevisionExpr.String())
|
||||
return sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.secondRevisionExpr.String())
|
||||
}
|
||||
if strings.Contains(ltf.revisionExpr.String(), "..") {
|
||||
return nil, sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr)
|
||||
return sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr)
|
||||
}
|
||||
}
|
||||
|
||||
if ltf.revisionExpr != nil && ltf.secondRevisionExpr != nil {
|
||||
// Both revisions cannot contain '^'
|
||||
if strings.Contains(ltf.revisionExpr.String(), "^") && strings.Contains(ltf.secondRevisionExpr.String(), "^") {
|
||||
return nil, sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr)
|
||||
return sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr)
|
||||
}
|
||||
// One revision must contain '^'
|
||||
if !strings.Contains(ltf.revisionExpr.String(), "^") && !strings.Contains(ltf.secondRevisionExpr.String(), "^") {
|
||||
return nil, sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr)
|
||||
return sql.ErrInvalidArgumentDetails.New(ltf.FunctionName(), ltf.revisionExpr)
|
||||
}
|
||||
}
|
||||
|
||||
return ltf, nil
|
||||
return nil
|
||||
}
|
||||
|
||||
// RowIter implements the sql.Node interface
|
||||
@@ -275,26 +286,26 @@ func (ltf *LogTableFunction) evaluateArguments() (string, string, error) {
|
||||
|
||||
// Gets revisionName and/or excludingRevisionName from sql expression
|
||||
func getRevisionsFromExpr(ctx *sql.Context, expr sql.Expression, canDot bool) (string, string, error) {
|
||||
commitVal, err := expr.Eval(ctx, nil)
|
||||
revisionVal, err := expr.Eval(ctx, nil)
|
||||
if err != nil {
|
||||
return "", "", err
|
||||
}
|
||||
|
||||
commitValStr, ok := commitVal.(string)
|
||||
revisionValStr, ok := revisionVal.(string)
|
||||
if !ok {
|
||||
return "", "", fmt.Errorf("received '%v' when expecting revision string", commitVal)
|
||||
return "", "", fmt.Errorf("received '%v' when expecting revision string", revisionVal)
|
||||
}
|
||||
|
||||
if canDot && strings.Contains(commitValStr, "..") {
|
||||
refs := strings.Split(commitValStr, "..")
|
||||
if canDot && strings.Contains(revisionValStr, "..") {
|
||||
refs := strings.Split(revisionValStr, "..")
|
||||
return refs[1], refs[0], nil
|
||||
}
|
||||
|
||||
if strings.Contains(commitValStr, "^") {
|
||||
return "", strings.TrimPrefix(commitValStr, "^"), nil
|
||||
if strings.Contains(revisionValStr, "^") {
|
||||
return "", strings.TrimPrefix(revisionValStr, "^"), nil
|
||||
}
|
||||
|
||||
return commitValStr, "", nil
|
||||
return revisionValStr, "", nil
|
||||
}
|
||||
|
||||
//------------------------------------
|
||||
@@ -348,7 +359,7 @@ func NewDotDotLogTableFunctionRowIter(ctx *sql.Context, ddb *doltdb.DoltDB, comm
|
||||
return nil, err
|
||||
}
|
||||
|
||||
exHash, err := commit.HashOf()
|
||||
exHash, err := excludingCommit.HashOf()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -4972,26 +4972,42 @@ var LogTableFunctionScriptTests = []queries.ScriptTest{
|
||||
Query: "SELECT * from dolt_log(@Commit1, 123);",
|
||||
ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
},
|
||||
// {
|
||||
// Query: "SELECT * from dolt_log(@Commit1..@Commit2, @Commit1);",
|
||||
// ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
// },
|
||||
// {
|
||||
// Query: "SELECT * from dolt_log(@Commit1, @Commit1..@Commit2);",
|
||||
// ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
// },
|
||||
{
|
||||
Query: "SELECT * from dolt_log('main..branch1', @Commit1);",
|
||||
ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log(@Commit1, 'main..branch1');",
|
||||
ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log(@Commit1, @Commit2);",
|
||||
ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
},
|
||||
// {
|
||||
// Query: "SELECT * from dolt_log(^@Commit1, ^@Commit2);",
|
||||
// ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
// },
|
||||
{
|
||||
Query: "SELECT * from dolt_log('^main', '^branch1');",
|
||||
ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log('^main');",
|
||||
ExpectedErr: sql.ErrInvalidArgumentDetails,
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log('fake-branch');",
|
||||
ExpectedErrStr: "branch not found: fake-branch",
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log('^fake-branch', 'main');",
|
||||
ExpectedErrStr: "branch not found: fake-branch",
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log('fake-branch', '^main');",
|
||||
ExpectedErrStr: "branch not found: fake-branch",
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log('main..fake-branch');",
|
||||
ExpectedErrStr: "branch not found: fake-branch",
|
||||
},
|
||||
{
|
||||
Query: "SELECT * from dolt_log(concat('fake', '-', 'branch'));",
|
||||
ExpectedErr: sqle.ErrInvalidNonLiteralArgument,
|
||||
@@ -5046,10 +5062,65 @@ var LogTableFunctionScriptTests = []queries.ScriptTest{
|
||||
Query: "SELECT count(*) from dolt_log('new-branch');",
|
||||
Expected: []sql.Row{{5}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
Name: "basic case with more than one revision or revision range",
|
||||
SetUpScript: []string{
|
||||
"create table t (pk int primary key, c1 varchar(20), c2 varchar(20));",
|
||||
"call dolt_add('.');",
|
||||
"set @Commit1 = dolt_commit('-am', 'creating table t');",
|
||||
|
||||
"insert into t values(1, 'one', 'two'), (2, 'two', 'three');",
|
||||
"set @Commit2 = dolt_commit('-am', 'inserting into t 2');",
|
||||
|
||||
"call dolt_checkout('-b', 'new-branch');",
|
||||
"insert into t values (3, 'three', 'four');",
|
||||
"set @Commit3 = dolt_commit('-am', 'inserting into t 3');",
|
||||
"insert into t values (4, 'four', 'five');",
|
||||
"set @Commit4 = dolt_commit('-am', 'inserting into t 4');",
|
||||
|
||||
"call dolt_checkout('main');",
|
||||
"insert into t values (5, 'five', 'six');",
|
||||
"set @Commit5 = dolt_commit('-am', 'inserting into t 5');",
|
||||
},
|
||||
Assertions: []queries.ScriptTestAssertion{
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('^main', 'new-branch');",
|
||||
Expected: []sql.Row{{2}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('main..new-branch');",
|
||||
Expected: []sql.Row{{2}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('new-branch', '^main');",
|
||||
Expected: []sql.Row{{2}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('^new-branch', 'main');",
|
||||
Expected: []sql.Row{{1}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('^main', 'main');",
|
||||
Expected: []sql.Row{{0}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('^main~', 'main');",
|
||||
Expected: []sql.Row{{1}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('^main', @Commit3);",
|
||||
Expected: []sql.Row{{1}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('^new-branch', @Commit5);",
|
||||
Expected: []sql.Row{{1}},
|
||||
},
|
||||
{
|
||||
Query: "SELECT count(*) from dolt_log('main..new-branch');",
|
||||
Expected: []sql.Row{{2}},
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user