Return a consistent table ordering for diffs

This commit is contained in:
Zach Musgrave
2023-03-14 16:34:19 -07:00
parent 37d579ec41
commit fc79d40dba
3 changed files with 20 additions and 21 deletions
+10 -4
View File
@@ -523,16 +523,15 @@ func diffUserTables(ctx context.Context, dEnv *env.DoltEnv, dArgs *diffArgs) err
return errhand.VerboseErrorFromError(err)
}
doltSchemasChanged := false
for _, td := range tableDeltas {
if !shouldPrintTableDelta(dArgs.tableSet, td) {
continue
}
if isDoltSchemasTable(td) {
verr := diffDoltSchemasTable(sqlCtx, sqlEng, dArgs, dw)
if verr != nil {
return verr
}
// save dolt_schemas table diff for last in diff output
doltSchemasChanged = true
} else {
verr := diffUserTable(sqlCtx, td, sqlEng, dArgs, dw)
if verr != nil {
@@ -541,6 +540,13 @@ func diffUserTables(ctx context.Context, dEnv *env.DoltEnv, dArgs *diffArgs) err
}
}
if doltSchemasChanged {
verr := diffDoltSchemasTable(sqlCtx, sqlEng, dArgs, dw)
if verr != nil {
return verr
}
}
err = dw.Close(ctx)
if err != nil {
return errhand.VerboseErrorFromError(err)
+2 -17
View File
@@ -271,28 +271,13 @@ func (t tabularDiffWriter) WriteTableSchemaDiff(ctx context.Context, toRoot *dol
}
func (t tabularDiffWriter) WriteTriggerDiff(ctx context.Context, triggerName, oldDefn, newDefn string) error {
var diffString string
if newDefn == "" {
diffString = "DROP TRIGGER " + sql.QuoteIdentifier(triggerName)
} else if oldDefn == "" {
diffString = oldDefn
} else {
diffString = textdiff.LineDiff(oldDefn, newDefn)
}
diffString := textdiff.LineDiff(oldDefn, newDefn)
cli.Println(diffString)
return nil
}
func (t tabularDiffWriter) WriteViewDiff(ctx context.Context, viewName, oldDefn, newDefn string) error {
var diffString string
if newDefn == "" {
diffString = "DROP VIEW " + sql.QuoteIdentifier(viewName)
} else if oldDefn == "" {
diffString = oldDefn
} else {
diffString = textdiff.LineDiff(oldDefn, newDefn)
}
diffString := textdiff.LineDiff(oldDefn, newDefn)
cli.Println(diffString)
return nil
}
@@ -159,6 +159,14 @@ func GetTableDeltas(ctx context.Context, fromRoot, toRoot *doltdb.RootValue) (de
return nil, err
}
// Make sure we always return the same order of deltas
sort.Slice(deltas, func(i, j int) bool {
if deltas[i].FromName == deltas[j].FromName {
return deltas[i].ToName < deltas[j].ToName
}
return deltas[i].FromName < deltas[j].FromName
})
return deltas, nil
}