Make num_data_conflicts nil when schema conflicts

This commit is contained in:
Taylor Bantle
2025-05-20 11:22:45 -07:00
parent f0748011e8
commit 431a1daba7
5 changed files with 62 additions and 28 deletions
+1 -1
View File
@@ -77,7 +77,7 @@ jobs:
TMPDIR=$gw/tmp
./${{ env.SCRIPT_DIR}}/setup.sh $TMPDIR $DATADIR
# small python script times merge, we suppres errcodes but print error messages
# small python script times merge, we suppress errcodes but print error messages
cd $TMPDIR
python3 -c "import time, subprocess, sys; start = time.time(); res=subprocess.run(['dolt', 'merge', '--squash', 'main'], capture_output=True); err = res.stdout + res.stderr if res.returncode != 0 else ''; latency = time.time() -start; print(latency); sys.stderr.write(str(err))" 1> lat.log 2>err.log
latency=$(cat lat.log)
@@ -44,8 +44,8 @@ type PreviewMergeConflictsSummaryTableFunction struct {
var previewMergeConflictsSummarySchema = sql.Schema{
&sql.Column{Name: "table", Type: types.Text, Nullable: false},
&sql.Column{Name: "num_data_conflicts", Type: types.Uint64, Nullable: false},
&sql.Column{Name: "num_schema_conflicts", Type: types.Uint64, Nullable: false},
&sql.Column{Name: "num_data_conflicts", Type: types.Uint64, Nullable: true},
&sql.Column{Name: "num_schema_conflicts", Type: types.Uint64, Nullable: true},
}
// NewInstance creates a new instance of TableFunction interface
@@ -198,7 +198,7 @@ func (pm *PreviewMergeConflictsSummaryTableFunction) RowIter(ctx *sql.Context, r
return nil, fmt.Errorf("unexpected database type: %T", pm.database)
}
tables, err := findTablesWithConflicts(ctx, sqledb, leftBranch, rightBranch)
tables, err := getTablesWithConflicts(ctx, sqledb, leftBranch, rightBranch)
if err != nil {
return nil, err
}
@@ -267,11 +267,20 @@ func (d *previewMergeConflictsSummaryTableFunctionRowIter) Close(context *sql.Co
}
func getRowFromConflict(conflict tableConflict) sql.Row {
return sql.Row{
row := sql.Row{
conflict.tableName.String(), // table
conflict.numDataConflicts, // num_conflicts
conflict.numSchemaConflicts, // num_schema_conflicts
}
if conflict.numDataConflicts != nil {
row = append(row, *conflict.numDataConflicts) // num_data_conflicts
} else {
row = append(row, nil)
}
if conflict.numSchemaConflicts != nil {
row = append(row, *conflict.numSchemaConflicts) // num_schema_conflicts
} else {
row = append(row, nil)
}
return row
}
func resolveBranchesToRoots(ctx *sql.Context, db dsess.SqlDatabase, leftBranch, rightBranch string) (doltdb.RootValue, doltdb.RootValue, doltdb.RootValue, error) {
@@ -320,11 +329,11 @@ func resolveBranchesToRoots(ctx *sql.Context, db dsess.SqlDatabase, leftBranch,
type tableConflict struct {
tableName doltdb.TableName
numDataConflicts uint64
numSchemaConflicts uint64
numDataConflicts *uint64
numSchemaConflicts *uint64
}
func findTablesWithConflicts(ctx *sql.Context, db dsess.SqlDatabase, baseBranch, mergeBranch string) ([]tableConflict, error) {
func getTablesWithConflicts(ctx *sql.Context, db dsess.SqlDatabase, baseBranch, mergeBranch string) ([]tableConflict, error) {
leftRoot, rightRoot, baseRoot, err := resolveBranchesToRoots(ctx, db, baseBranch, mergeBranch)
if err != nil {
return nil, err
@@ -368,8 +377,9 @@ func findTablesWithConflicts(ctx *sql.Context, db dsess.SqlDatabase, baseBranch,
if err != nil {
return nil, err
}
if schConflicts.Count() > 0 {
conflicted = append(conflicted, tableConflict{tblName, 0, uint64(schConflicts.Count())})
numSchemaConflicts := uint64(schConflicts.Count())
if numSchemaConflicts > 0 {
conflicted = append(conflicted, tableConflict{tableName: tblName, numSchemaConflicts: &numSchemaConflicts})
// Cannot calculate data conflicts if there are schema conflicts
continue
}
@@ -427,7 +437,7 @@ func findTablesWithConflicts(ctx *sql.Context, db dsess.SqlDatabase, baseBranch,
}
if numDataConflicts > 0 {
conflicted = append(conflicted, tableConflict{tblName, numDataConflicts, 0})
conflicted = append(conflicted, tableConflict{tableName: tblName, numSchemaConflicts: &numSchemaConflicts, numDataConflicts: &numDataConflicts})
}
}
@@ -4030,7 +4030,7 @@ var SchemaConflictScripts = []queries.ScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "SELECT * FROM dolt_preview_merge_conflicts_summary('main', 'other')",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('other')",
@@ -4062,7 +4062,7 @@ var SchemaConflictScripts = []queries.ScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "SELECT * FROM dolt_preview_merge_conflicts_summary('main', 'other')",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('other')",
@@ -1669,7 +1669,7 @@ var SchemaChangeTestsTypeChanges = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -1703,7 +1703,7 @@ var SchemaChangeTestsTypeChanges = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -1771,7 +1771,7 @@ var SchemaChangeTestsTypeChanges = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -1801,7 +1801,7 @@ var SchemaChangeTestsTypeChanges = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -1831,7 +1831,7 @@ var SchemaChangeTestsTypeChanges = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -2048,7 +2048,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(4)}},
Expected: []sql.Row{{"t", nil, uint64(4)}},
},
{
Query: "call dolt_merge('right');",
@@ -2093,7 +2093,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(7)}},
Expected: []sql.Row{{"t", nil, uint64(7)}},
},
{
Query: "call dolt_merge('right');",
@@ -2129,7 +2129,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -2162,7 +2162,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(2)}},
Expected: []sql.Row{{"t", nil, uint64(2)}},
},
{
Query: "call dolt_merge('right');",
@@ -2194,7 +2194,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -2221,7 +2221,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -2250,7 +2250,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -2282,7 +2282,7 @@ var SchemaChangeTestsSchemaConflicts = []MergeScriptTest{
Assertions: []queries.ScriptTestAssertion{
{
Query: "select * from dolt_preview_merge_conflicts_summary('main', 'right');",
Expected: []sql.Row{{"t", uint64(0), uint64(1)}},
Expected: []sql.Row{{"t", nil, uint64(1)}},
},
{
Query: "call dolt_merge('right');",
@@ -1046,6 +1046,10 @@ var DoltConflictHandlingTests = []queries.TransactionTest{
Query: "/* client b */ call dolt_commit('-am', 'commit on new-branch')",
SkipResultsCheck: true,
},
{
Query: "/* client b */ select * from dolt_preview_merge_conflicts_summary('new-branch', 'main')",
Expected: []sql.Row{{"test", uint64(1), uint64(0)}},
},
{
Query: "/* client b */ call dolt_merge('main')",
Expected: []sql.Row{{"", 0, 1, "conflicts found"}},
@@ -1137,6 +1141,10 @@ var DoltConflictHandlingTests = []queries.TransactionTest{
Query: "/* client b */ call dolt_commit('-am', 'commit on new-branch')",
SkipResultsCheck: true,
},
{
Query: "/* client b */ select * from dolt_preview_merge_conflicts_summary('new-branch', 'main')",
Expected: []sql.Row{{"test", uint64(1), uint64(0)}},
},
{
Query: "/* client b */ call dolt_merge('main')",
Expected: []sql.Row{{"", 0, 1, "conflicts found"}},
@@ -1226,6 +1234,10 @@ var DoltConflictHandlingTests = []queries.TransactionTest{
Query: "/* client b */ call dolt_commit('-am', 'commit on new-branch')",
SkipResultsCheck: true,
},
{
Query: "/* client b */ select * from dolt_preview_merge_conflicts_summary('new-branch', 'main')",
Expected: []sql.Row{{"test", uint64(1), uint64(0)}},
},
{
Query: "/* client b */ call dolt_merge('main')",
Expected: []sql.Row{{"", 0, 1, "conflicts found"}},
@@ -1459,6 +1471,14 @@ var DoltStoredProcedureTransactionTests = []queries.TransactionTest{
Query: "/* client b */ start transaction",
Expected: []sql.Row{},
},
{
Query: "/* client b */ select * from dolt_preview_merge_conflicts_summary('main', 'feature-branch')",
Expected: []sql.Row{{"test", uint64(1), uint64(0)}},
},
{
Query: "/* client a */ select * from dolt_preview_merge_conflicts_summary('main', 'feature-branch')",
Expected: []sql.Row{{"test", uint64(1), uint64(0)}},
},
{
Query: "/* client a */ CALL DOLT_MERGE('feature-branch')",
Expected: []sql.Row{{"", 0, 1, "conflicts found"}},
@@ -1507,6 +1527,10 @@ var DoltStoredProcedureTransactionTests = []queries.TransactionTest{
Query: "/* client a */ SET @@dolt_allow_commit_conflicts = 0",
Expected: []sql.Row{{}},
},
{
Query: "/* client a */ select * from dolt_preview_merge_conflicts_summary('main', 'feature-branch')",
Expected: []sql.Row{{"test", uint64(1), uint64(0)}},
},
{
Query: "/* client a */ CALL DOLT_MERGE('feature-branch')",
ExpectedErrStr: dsess.ErrUnresolvedConflictsAutoCommit.Error(),