Skip to content

Commit 8aa882d

Browse files
committed
feat: Better error when panic happens in UnifiedDiff
1 parent c1375bb commit 8aa882d

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

plugin/diff.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,25 @@ func RecordsDiff(sc *arrow.Schema, have, want []arrow.Record) string {
1313
return TableDiff(array.NewTableFromRecords(sc, have), array.NewTableFromRecords(sc, want))
1414
}
1515

16+
func getUnifiedDiff(edits array.Edits, wantCol, haveCol arrow.Array) string {
17+
defer func() {
18+
if r := recover(); r != nil {
19+
wantDataType := wantCol.DataType()
20+
wantData := make([]string, wantCol.Len())
21+
for i := 0; i < wantCol.Len(); i++ {
22+
wantData[i] = wantCol.ValueStr(i)
23+
}
24+
haveDataType := haveCol.DataType()
25+
haveData := make([]string, haveCol.Len())
26+
for i := 0; i < haveCol.Len(); i++ {
27+
haveData[i] = haveCol.ValueStr(i)
28+
}
29+
panic(fmt.Errorf("panic in getUnifiedDiff: %s, want: [%s], have: [%s], want type: %s, have type: %s", r, strings.Join(wantData, ", "), strings.Join(haveData, ", "), wantDataType, haveDataType))
30+
}
31+
}()
32+
return edits.UnifiedDiff(wantCol, haveCol)
33+
}
34+
1635
func TableDiff(have, want arrow.Table) string {
1736
if array.TableApproxEqual(have, want, array.WithUnorderedMapKeys(true)) {
1837
return ""
@@ -39,7 +58,7 @@ func TableDiff(have, want arrow.Table) string {
3958
if err != nil {
4059
panic(fmt.Errorf("want: %v, have: %v, error: %w", wantCol.DataType(), haveCol.DataType(), err))
4160
}
42-
diff := edits.UnifiedDiff(wantCol, haveCol)
61+
diff := getUnifiedDiff(edits, wantCol, haveCol)
4362
if diff != "" {
4463
sb.WriteString(have.Schema().Field(i).Name)
4564
sb.WriteString(": ")

0 commit comments

Comments
 (0)