huaxingao commented on code in PR #13195:
URL: https://github.com/apache/iceberg/pull/13195#discussion_r2595897528


##########
core/src/test/java/org/apache/iceberg/expressions/TestInclusiveMetricsEvaluatorWithExtract.java:
##########
@@ -683,4 +688,349 @@ public void testIntegerNotIn() {
         .as("Should read: id above upper bound (85 > 79, 86 > 79)")
         .isTrue();
   }
+
+  private static final List<Arguments> DATEANDTIMESTAMPTYPESEQPARAMETERS =
+      List.of(
+          Arguments.of(
+              Types.TimestampNanoType.withoutZone().toString(),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456789",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  false),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-21T00:00:01.123456789",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-31T00:00:01.123456",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456789",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  false),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  false),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  true),
+              Arguments.of(
+                  "1970-03-21T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  true),
+              Arguments.of(
+                  "1970-03-31T00:00:00.000000000",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  true),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  false)),
+          Arguments.of(
+              Types.DateType.get().toString(),
+              Arguments.of(
+                  "1970-01-11",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  false),
+              Arguments.of(
+                  "1970-01-31",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-21",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-31",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-04-01",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456"),
+                  false),
+              Arguments.of(
+                  "1970-01-11",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  false),
+              Arguments.of(
+                  "1970-01-31",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-21",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-31",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-04-01",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  false)),
+          Arguments.of(
+              Types.TimestampType.withoutZone().toString(),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  false),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-21T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-03-31T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  true),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"),
+                  false),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  false),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  true),
+              Arguments.of(
+                  "1970-03-21T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  true),
+              Arguments.of(
+                  "1970-03-31T00:00:00.000000",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  true),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"),
+                  false)));
+
+  @ParameterizedTest
+  @FieldSource("DATEANDTIMESTAMPTYPESEQPARAMETERS")
+  public void testDateAndTimestampTypesEq(String variantType, Arguments args) {
+    // lower bounds
+    Map<Integer, ByteBuffer> lowerBounds =
+        ImmutableMap.of(
+            2,
+            VariantTestUtil.variantBuffer(
+                Map.of("$['event_timestamp']", (VariantValue) args.get()[1])));
+    // upper bounds
+    Map<Integer, ByteBuffer> upperBounds =
+        ImmutableMap.of(
+            2,
+            VariantTestUtil.variantBuffer(
+                Map.of("$['event_timestamp']", (VariantValue) args.get()[2])));
+
+    DataFile file =
+        new TestDataFile("file.parquet", Row.of(), 50, null, null, null, 
lowerBounds, upperBounds);
+    Expression expr = equal(extract("variant", "$.event_timestamp", 
variantType), args.get()[0]);
+    assertThat(shouldRead(expr, file)).isEqualTo(args.get()[3]);
+  }
+
+  private static final List<Arguments> DATEANDTIMESTAMPTYPESNOTEQPARAMETERS =
+      List.of(
+          Arguments.of(
+              Types.TimestampNanoType.withoutZone().toString(),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-01T00:00:01.123456",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-31T00:00:01.123456",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-03-01T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-03-31T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456789",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31"))),
+          Arguments.of(
+              Types.DateType.get().toString(),
+              Arguments.of(
+                  "1970-01-31",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-01",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-31",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-04-01",
+                  Variants.ofIsoTimestampntz("1970-01-31T00:00:01.123456"),
+                  Variants.ofIsoTimestampntz("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-01-11",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-01",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-01-31",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-31",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-04-01",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"))),
+          Arguments.of(
+              Types.TimestampType.withoutZone().toString(),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-03-01T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-03-31T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456",
+                  Variants.ofIsoDate("1970-01-31"),
+                  Variants.ofIsoDate("1970-03-31")),
+              Arguments.of(
+                  "1970-01-11T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-01-31T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-01T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-03-31T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456")),
+              Arguments.of(
+                  "1970-04-01T00:00:01.123456",
+                  
Variants.ofIsoTimestampntzNanos("1970-01-31T00:00:01.123456"),
+                  
Variants.ofIsoTimestampntzNanos("1970-03-31T00:00:01.123456"))));
+
+  @ParameterizedTest
+  @FieldSource("DATEANDTIMESTAMPTYPESNOTEQPARAMETERS")
+  public void testDateAndTimestampTypesNotEq(String variantType, Arguments 
args) {
+    // lower bounds
+    Map<Integer, ByteBuffer> lowerBounds =
+        ImmutableMap.of(
+            2,
+            VariantTestUtil.variantBuffer(
+                Map.of("$['event_timestamp']", (VariantValue) args.get()[1])));
+    // upper bounds
+    Map<Integer, ByteBuffer> upperBounds =
+        ImmutableMap.of(
+            2,
+            VariantTestUtil.variantBuffer(
+                Map.of("$['event_timestamp']", (VariantValue) args.get()[2])));
+
+    DataFile file =
+        new TestDataFile("file.parquet", Row.of(), 50, null, null, null, 
lowerBounds, upperBounds);
+    Expression expr = notEqual(extract("variant", "$.event_timestamp", 
variantType), args.get()[0]);
+    assertThat(shouldRead(expr, file)).as("Should read: many possible 
timestamps" + expr).isTrue();
+  }
+
+  @Test
+  public void testUUIDEq() {
+    UUID uuid = UUID.randomUUID();
+    // lower bounds
+    Map<Integer, ByteBuffer> lowerBounds =
+        ImmutableMap.of(
+            2, VariantTestUtil.variantBuffer(Map.of("$['event_uuid']", 
Variants.ofUUID(uuid))));
+    // upper bounds
+    Map<Integer, ByteBuffer> upperBounds =
+        ImmutableMap.of(
+            2, VariantTestUtil.variantBuffer(Map.of("$['event_uuid']", 
Variants.ofUUID(uuid))));
+    DataFile file =
+        new TestDataFile("file.parquet", Row.of(), 50, null, null, null, 
lowerBounds, upperBounds);
+    Expression expr = equal(extract("variant", "$.event_uuid", 
PhysicalType.UUID.name()), uuid);
+    assertThat(shouldRead(expr, file)).as("Should read: many possible 
timestamps" + expr).isTrue();

Review Comment:
   nit: `many possible timestamps` -> `many possible UUIDs`



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to