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]