Skip to content
Merged
Show file tree
Hide file tree
Changes from 27 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
03a21be
small refactor for dolt merge
jycor Apr 15, 2025
2dfe538
partial implementation and tests
jycor Apr 16, 2025
dfdcc17
implement and test dolt_diverge
jycor Apr 16, 2025
c9049e2
revert engine testg
jycor Apr 16, 2025
cac827c
[ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/upda…
jycor Apr 16, 2025
9afbac8
more tests
jycor Apr 16, 2025
370b202
more refactoring
jycor Apr 17, 2025
49bbdaa
Merge branch 'james/diverge' of github.com:dolthub/dolt into james/di…
jycor Apr 17, 2025
aab5d67
rename and use commitwalk
Apr 18, 2025
e8f2325
more tests
Apr 18, 2025
9d8848c
adding more complicated test
Apr 18, 2025
729f528
[ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/upda…
jycor Apr 18, 2025
e6110aa
Addional test with complicated history
macneale4 Apr 21, 2025
9b65333
merge with main
May 1, 2025
5a40973
fix merge with main
May 2, 2025
d93e111
debugging
May 2, 2025
ed360e5
testing
May 6, 2025
d7aad36
Merge branch 'main' into james/diverge
May 6, 2025
deda322
fix
May 6, 2025
059ce83
[ga-format-pr] Run go/utils/repofmt/format_repo.sh and go/Godeps/upda…
jycor May 6, 2025
493028d
restore test functions
May 6, 2025
c98d334
Merge branch 'james/diverge' of github.com:dolthub/dolt into james/di…
May 30, 2025
7da5aaa
Merge branch 'main' into james/diverge
May 30, 2025
0e4376e
fix and add tests
May 30, 2025
be07f60
merge with main
May 30, 2025
d5641d7
feedback
Jun 2, 2025
0cc520c
return correct error
Jun 2, 2025
6999fa4
use CommitClosure instead
Jun 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 2 additions & 20 deletions go/libraries/doltcore/sqle/dfunctions/has_ancestor.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,19 +69,10 @@ func (a *HasAncestor) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
if err != nil {
return nil, err
}

cs, err := doltdb.NewCommitSpec(headStr.(string))
headCommit, err = resolveRefSpec(ctx, headRef, ddb, headStr.(string))
if err != nil {
return nil, err
}
optCmt, err := ddb.Resolve(ctx, cs, headRef)
if err != nil {
return nil, fmt.Errorf("error during has_ancestor check: ref not found '%s'", headStr)
}
headCommit, ok = optCmt.ToCommit()
if !ok {
return nil, doltdb.ErrGhostCommitEncountered
}
}

var ancCommit *doltdb.Commit
Expand All @@ -94,19 +85,10 @@ func (a *HasAncestor) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
if err != nil {
return nil, err
}
cs, err := doltdb.NewCommitSpec(ancStr.(string))
ancCommit, err = resolveRefSpec(ctx, headRef, ddb, ancStr.(string))
if err != nil {
return nil, err
}
optCmt, err := ddb.Resolve(ctx, cs, headRef)
if err != nil {
return nil, fmt.Errorf("error during has_ancestor check: ref not found '%s'", ancStr)
}
ancCommit, ok = optCmt.ToCommit()
if !ok {
return nil, doltdb.ErrGhostCommitEncountered
}

}

headHash, err := headCommit.HashOf()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (

"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
"github.com/dolthub/dolt/go/libraries/doltcore/merge"
"github.com/dolthub/dolt/go/libraries/doltcore/ref"
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess"
)

Expand All @@ -40,6 +41,21 @@ func NewMergeBase(left, right sql.Expression) sql.Expression {

// Eval implements the sql.Expression interface.
func (d MergeBase) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
sess := dsess.DSessFromSess(ctx.Session)
dbName := ctx.GetCurrentDatabase()
dbData, ok := sess.GetDbData(ctx, dbName)
if !ok {
return nil, sql.ErrDatabaseNotFound.New(dbName)
}
doltDB, ok := sess.GetDoltDB(ctx, dbName)
if !ok {
return nil, sql.ErrDatabaseNotFound.New(dbName)
}
headRef, err := dbData.Rsr.CWBHeadRef(ctx)
if err != nil {
return nil, err
}

leftSpec, err := d.Left().Eval(ctx, row)
if err != nil {
return nil, err
Expand All @@ -48,7 +64,6 @@ func (d MergeBase) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
if err != nil {
return nil, err
}

if leftSpec == nil || rightSpec == nil {
return nil, nil
}
Expand All @@ -57,13 +72,16 @@ func (d MergeBase) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
if !ok {
return nil, errors.New("left value is not a string")
}

rightStr, ok := rightSpec.(string)
if !ok {
return nil, errors.New("right value is not a string")
}

left, right, err := resolveRefSpecs(ctx, leftStr, rightStr)
left, err := resolveRefSpec(ctx, headRef, doltDB, leftStr)
if err != nil {
return nil, err
}
right, err := resolveRefSpec(ctx, headRef, doltDB, rightStr)
if err != nil {
return nil, err
}
Expand All @@ -76,52 +94,20 @@ func (d MergeBase) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
return mergeBase.String(), nil
}

func resolveRefSpecs(ctx *sql.Context, leftSpec, rightSpec string) (left, right *doltdb.Commit, err error) {
lcs, err := doltdb.NewCommitSpec(leftSpec)
if err != nil {
return nil, nil, err
}
rcs, err := doltdb.NewCommitSpec(rightSpec)
func resolveRefSpec(ctx *sql.Context, headRef ref.DoltRef, doltDB *doltdb.DoltDB, spec string) (*doltdb.Commit, error) {
cs, err := doltdb.NewCommitSpec(spec)
if err != nil {
return nil, nil, err
}

sess := dsess.DSessFromSess(ctx.Session)
dbName := ctx.GetCurrentDatabase()

dbData, ok := sess.GetDbData(ctx, dbName)
if !ok {
return nil, nil, sql.ErrDatabaseNotFound.New(dbName)
}
doltDB, ok := sess.GetDoltDB(ctx, dbName)
if !ok {
return nil, nil, sql.ErrDatabaseNotFound.New(dbName)
}

headRef, err := dbData.Rsr.CWBHeadRef(ctx)
if err != nil {
return nil, nil, err
}

optCmt, err := doltDB.Resolve(ctx, lcs, headRef)
if err != nil {
return nil, nil, err
}
left, ok = optCmt.ToCommit()
if !ok {
return nil, nil, doltdb.ErrGhostCommitEncountered
return nil, err
}

optCmt, err = doltDB.Resolve(ctx, rcs, headRef)
optCmt, err := doltDB.Resolve(ctx, cs, headRef)
if err != nil {
return nil, nil, err
return nil, err
}
right, ok = optCmt.ToCommit()
commit, ok := optCmt.ToCommit()
if !ok {
return nil, nil, doltdb.ErrGhostCommitEncountered
return nil, doltdb.ErrGhostCommitEncountered
}

return
return commit, err
}

// String implements the sql.Expression interface.
Expand Down
Loading
Loading