From 019017d0909a17d6e85d519f5c3f4f52828fd509 Mon Sep 17 00:00:00 2001 From: Csaba Juhasz Date: Wed, 22 May 2024 20:39:45 +0200 Subject: [PATCH] =?UTF-8?q?HIVE-28273:=20Avoid=20getting=20NegativeArraySi?= =?UTF-8?q?zeException=20in=20HIVE-28249=20related=20tests=20(Csaba=20Juh?= =?UTF-8?q?=C3=A1sz=20reviewed=20by=20Stamatis=20Zampetakis)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close apache/hive#5258 --- ...stParquetTimestampsHive2Compatibility.java | 44 ++++--------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/serde/TestParquetTimestampsHive2Compatibility.java b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/serde/TestParquetTimestampsHive2Compatibility.java index ac0ced65af1b..cb75111dab3d 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/serde/TestParquetTimestampsHive2Compatibility.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/parquet/serde/TestParquetTimestampsHive2Compatibility.java @@ -26,12 +26,15 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import com.google.common.base.Strings; + import java.time.ZoneId; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.TimeZone; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; +import java.util.stream.IntStream; import java.util.stream.Stream; import static org.junit.Assert.assertEquals; @@ -258,46 +261,17 @@ private static Stream generateTimestampsAndZoneIds28thFeb() { } private static Stream generateJulianLeapYearTimestamps() { - return Stream.concat(Stream.generate(new Supplier() { - int i = 0; - - @Override - public String get() { - StringBuilder sb = new StringBuilder(29); - int year = ((i % 9999) + 1) * 100; - sb.append(zeros(4 - digits(year))); - sb.append(year); - sb.append("-03-01 00:00:00.000000001"); - i++; - return sb.toString(); - } - }) - // Exclude dates falling in the default Gregorian change date since legacy code does not handle that interval - // gracefully. It is expected that these do not work well when legacy APIs are in use. 0200-03-01 01:01:01.000000001 - .filter(s -> !s.startsWith("1582-10")).limit(3000), Stream.of("9999-12-31 23:59:59.999")); + return IntStream.range(1, 100) + .mapToObj(value -> Strings.padStart(String.valueOf(value * 100), 4, '0')) + .map(value -> value + "-03-01 00:00:00.000000001"); } private static Stream generateJulianLeapYearTimestamps28thFeb() { - return Stream.concat(Stream.generate(new Supplier() { - int i = 0; - - @Override - public String get() { - StringBuilder sb = new StringBuilder(29); - int year = ((i % 9999) + 1) * 100; - sb.append(zeros(4 - digits(year))); - sb.append(year); - sb.append("-02-28 00:00:00.000000001"); - i++; - return sb.toString(); - } - }) - // Exclude dates falling in the default Gregorian change date since legacy code does not handle that interval - // gracefully. It is expected that these do not work well when legacy APIs are in use. 0200-03-01 01:01:01.000000001 - .filter(s -> !s.startsWith("1582-10")).limit(3000), Stream.of("9999-12-31 23:59:59.999")); + return IntStream.range(1, 100) + .mapToObj(value -> Strings.padStart(String.valueOf(value * 100), 4, '0')) + .map(value -> value + "-02-28 00:00:00.000000001"); } - private static int digits(int number) { int digits = 0; do {