diff --git a/bats/diff.bats b/bats/diff.bats index c57ed45234..1feec817a3 100644 --- a/bats/diff.bats +++ b/bats/diff.bats @@ -131,6 +131,40 @@ teardown() { [[ ! "$output" =~ "+ | 0" ]] || false } +@test "diff with index and foreign key changes" { + dolt sql < " + sqlfmt.FmtIndex(idxDiff.To)) + cli.Println("< " + sqlfmt.FmtIndex(idxDiff.From)) + cli.Println("> " + sqlfmt.FmtIndex(idxDiff.To)) } } @@ -508,17 +510,17 @@ func tabularSchemaDiff(ctx context.Context, td diff.TableDelta, fromSchemas, toS switch fkDiff.DiffType { case diff.SchDiffNone: parentSch := toSchemas[fkDiff.To.ReferencedTableName] - cli.Println(" " + sqlfmt.FmtForeignKey(fkDiff.To, toSch, parentSch)) + cli.Println(" " + sqlfmt.FmtForeignKey(fkDiff.To, toSch, parentSch)) case diff.SchDiffAdded: parentSch := toSchemas[fkDiff.To.ReferencedTableName] - cli.Println(color.GreenString("+ " + sqlfmt.FmtForeignKey(fkDiff.To, toSch, parentSch))) + cli.Println(color.GreenString("+ " + sqlfmt.FmtForeignKey(fkDiff.To, toSch, parentSch))) case diff.SchDiffRemoved: parentSch := toSchemas[fkDiff.From.ReferencedTableName] - cli.Println(color.RedString("- " + sqlfmt.FmtForeignKey(fkDiff.From, fromSch, parentSch))) + cli.Println(color.RedString("- " + sqlfmt.FmtForeignKey(fkDiff.From, fromSch, parentSch))) case diff.SchDiffModified: fromParent, toParent := fromSchemas[fkDiff.From.ReferencedTableName], toSchemas[fkDiff.To.ReferencedTableName] - cli.Println("< " + sqlfmt.FmtForeignKey(fkDiff.From, fromSch, fromParent)) - cli.Println("> " + sqlfmt.FmtForeignKey(fkDiff.To, toSch, toParent)) + cli.Println("< " + sqlfmt.FmtForeignKey(fkDiff.From, fromSch, fromParent)) + cli.Println("> " + sqlfmt.FmtForeignKey(fkDiff.To, toSch, toParent)) } } diff --git a/go/libraries/doltcore/diff/diffs.go b/go/libraries/doltcore/diff/diffs.go index 4a20b62ad6..731a2a3f20 100644 --- a/go/libraries/doltcore/diff/diffs.go +++ b/go/libraries/doltcore/diff/diffs.go @@ -16,7 +16,6 @@ package diff import ( "context" - "reflect" "sort" "github.com/liquidata-inc/dolt/go/libraries/doltcore/doltdb" @@ -410,7 +409,7 @@ func (td TableDelta) IsRename() bool { } func (td TableDelta) HasFKChanges() bool { - return fkSlicesAreEqual(td.FromFks, td.ToFks) + return !fkSlicesAreEqual(td.FromFks, td.ToFks) } // GetSchemas returns the table's schema at the fromRoot and toRoot, or schema.Empty if the table did not exist. @@ -474,7 +473,7 @@ func fkSlicesAreEqual(from, to []doltdb.ForeignKey) bool { }) for i := range from { - if !reflect.DeepEqual(from[i], to[i]) { + if !from[i].DeepEquals(to[i]) { return false } } diff --git a/go/libraries/doltcore/diff/schema_diff.go b/go/libraries/doltcore/diff/schema_diff.go index b22f68a0d5..2cf4086197 100644 --- a/go/libraries/doltcore/diff/schema_diff.go +++ b/go/libraries/doltcore/diff/schema_diff.go @@ -110,6 +110,7 @@ func DiffSchIndexes(fromSch, toSch schema.Schema) (diffs []IndexDifference) { DiffType: SchDiffRemoved, From: fromIdx, }) + return false, nil } d := IndexDifference{ @@ -129,7 +130,7 @@ func DiffSchIndexes(fromSch, toSch schema.Schema) (diffs []IndexDifference) { _ = toSch.Indexes().Iter(func(toIdx schema.Index) (stop bool, err error) { // if we've seen this index, skip for _, d := range diffs { - if d.To.Equals(toIdx) { + if d.To != nil && d.To.Equals(toIdx) { return false, nil } }