This is an automated email from the ASF dual-hosted git repository.

zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-go.git


The following commit(s) were added to refs/heads/main by this push:
     new 9eeb22515 test(rest): check residuals on more scan-planning parity 
rows (#2247)
9eeb22515 is described below

commit 9eeb22515e7c3713ff4f376967b622e1ec1a85bc
Author: Revanth <[email protected]>
AuthorDate: Wed Oct 21 15:47:34 2026 -0500

    test(rest): check residuals on more scan-planning parity rows (#2247)
---
 catalog/rest/scan_planning_parity_test.go | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/catalog/rest/scan_planning_parity_test.go 
b/catalog/rest/scan_planning_parity_test.go
index 32fe956cf..4a640a243 100644
--- a/catalog/rest/scan_planning_parity_test.go
+++ b/catalog/rest/scan_planning_parity_test.go
@@ -78,14 +78,14 @@ func TestScanPlanningLocalRemoteParity(t *testing.T) {
                {name: "long", filter: 
iceberg.EqualTo(iceberg.Reference("big"), int64(9007199254740993)), wantFiles: 
3, wantDeletes: 1},
                {name: "none", filter: iceberg.AlwaysFalse{}, wantFiles: 0},
                {name: "partition", filter: 
iceberg.EqualTo(iceberg.Reference("tenant"), int32(1)), wantFiles: 2, 
wantDeletes: 1, wantResidual: iceberg.AlwaysTrue{}},
-               {name: "metrics", filter: 
iceberg.GreaterThan(iceberg.Reference("renamed"), int64(25)), wantFiles: 2, 
wantDeletes: 1},
-               {name: "and residual", filter: 
iceberg.NewAnd(iceberg.EqualTo(iceberg.Reference("tenant"), int32(1)), 
iceberg.GreaterThan(iceberg.Reference("renamed"), int64(25))), wantFiles: 1, 
wantDeletes: 1},
+               {name: "metrics", filter: 
iceberg.GreaterThan(iceberg.Reference("renamed"), int64(25)), wantFiles: 2, 
wantDeletes: 1, wantResidual: iceberg.GreaterThan(iceberg.Reference("renamed"), 
int64(25))},
+               {name: "and residual", filter: 
iceberg.NewAnd(iceberg.EqualTo(iceberg.Reference("tenant"), int32(1)), 
iceberg.GreaterThan(iceberg.Reference("renamed"), int64(25))), wantFiles: 1, 
wantDeletes: 1, wantResidual: iceberg.GreaterThan(iceberg.Reference("renamed"), 
int64(25))},
                {name: "or", filter: 
iceberg.NewOr(iceberg.EqualTo(iceberg.Reference("tenant"), int32(2)), 
iceberg.LessThan(iceberg.Reference("renamed"), int64(15))), wantFiles: 3, 
wantDeletes: 1},
-               {name: "set", filter: iceberg.IsIn(iceberg.Reference("tenant"), 
int32(1), int32(3)), wantFiles: 2, wantDeletes: 1},
+               {name: "set", filter: iceberg.IsIn(iceberg.Reference("tenant"), 
int32(1), int32(3)), wantFiles: 2, wantDeletes: 1, wantResidual: 
iceberg.AlwaysTrue{}},
                {name: "not set", filter: 
iceberg.NotIn(iceberg.Reference("tenant"), int32(1), int32(3)), wantFiles: 1, 
wantDeletes: 1},
-               {name: "not", filter: 
iceberg.NewNot(iceberg.EqualTo(iceberg.Reference("tenant"), int32(1))), 
wantFiles: 1, wantDeletes: 1},
+               {name: "not", filter: 
iceberg.NewNot(iceberg.EqualTo(iceberg.Reference("tenant"), int32(1))), 
wantFiles: 1, wantDeletes: 1, wantResidual: iceberg.AlwaysTrue{}},
                {name: "null", filter: 
iceberg.IsNull(iceberg.Reference("tenant")), wantFiles: 0},
-               {name: "case insensitive", filter: 
iceberg.EqualTo(iceberg.Reference("TENANT"), int32(1)), insensitive: true, 
wantFiles: 2, wantDeletes: 1},
+               {name: "case insensitive", filter: 
iceberg.EqualTo(iceberg.Reference("TENANT"), int32(1)), insensitive: true, 
wantFiles: 2, wantDeletes: 1, wantResidual: iceberg.AlwaysTrue{}},
                {name: "historical schema", filter: 
iceberg.GreaterThan(iceberg.Reference("value"), int32(25)), snapshot: 10, 
wantFiles: 2},
                {name: "tag schema", filter: 
iceberg.GreaterThan(iceberg.Reference("value"), int32(25)), ref: "old", 
wantFiles: 2},
                {name: "branch current schema", filter: 
iceberg.GreaterThan(iceberg.Reference("renamed"), int64(25)), ref: "history", 
wantFiles: 2},
@@ -140,7 +140,17 @@ func TestScanPlanningLocalRemoteParity(t *testing.T) {
                                        assert.Len(t, task.DeleteFiles, 
tc.wantDeletes)
                                        assert.Len(t, task.EqualityDeleteFiles, 
tc.wantDeletes)
                                        if tc.wantResidual != nil {
-                                               assert.Equal(t, 
tc.wantResidual, task.Residual)
+                                               // Bind both sides, as 
assertPlanningParity does: a wire
+                                               // residual is unbound and a 
nil one means the filter.
+                                               residual := task.Residual
+                                               if residual == nil {
+                                                       residual = tc.filter
+                                               }
+                                               want, err := 
bindParityResidual(schema, tc.wantResidual, !tc.insensitive)
+                                               require.NoError(t, err)
+                                               got, err := 
bindParityResidual(schema, residual, !tc.insensitive)
+                                               require.NoError(t, err)
+                                               assert.Truef(t, 
want.Equals(got), "residual for %s: want %s, got %s", task.File.FilePath(), 
want, got)
                                        }
                                }
                        })

Reply via email to