|
33 | 33 | import org.junit.jupiter.params.provider.MethodSource; |
34 | 34 |
|
35 | 35 | import java.math.BigDecimal; |
| 36 | +import java.math.BigInteger; |
36 | 37 | import java.nio.ByteBuffer; |
37 | 38 | import java.sql.Timestamp; |
38 | 39 | import java.time.LocalDate; |
|
43 | 44 | import java.util.HashSet; |
44 | 45 | import java.util.List; |
45 | 46 | import java.util.Map; |
| 47 | +import java.util.Random; |
46 | 48 | import java.util.Set; |
| 49 | +import java.util.UUID; |
47 | 50 | import java.util.stream.Collectors; |
48 | 51 | import java.util.stream.Stream; |
49 | 52 |
|
@@ -1989,6 +1992,145 @@ public void testToJavaDefaultValueConsistencyWithAvro() { |
1989 | 1992 | assertEquals(avroIntResult, hoodieIntResult); |
1990 | 1993 | } |
1991 | 1994 |
|
| 1995 | + @Test |
| 1996 | + public void testToJavaDefaultValueFixed() { |
| 1997 | + // Create a fixed schema with size 4 |
| 1998 | + HoodieSchema fixedSchema = HoodieSchema.createFixed("FixedType", null, null, 4); |
| 1999 | + byte[] defaultBytes = new byte[]{1, 2, 3, 4}; |
| 2000 | + HoodieSchemaField field = HoodieSchemaField.of("fixedField", |
| 2001 | + fixedSchema, |
| 2002 | + null, |
| 2003 | + defaultBytes); |
| 2004 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2005 | + assertArrayEquals(defaultBytes, (byte[]) result); |
| 2006 | + } |
| 2007 | + |
| 2008 | + @Test |
| 2009 | + public void testToJavaDefaultValueDecimal() { |
| 2010 | + // Create a decimal schema with precision 10 and scale 2 |
| 2011 | + HoodieSchema decimalSchema = HoodieSchema.createDecimal(10, 2); |
| 2012 | + byte[] decimalBytes = BigInteger.valueOf(12345).toByteArray(); |
| 2013 | + HoodieSchemaField field = HoodieSchemaField.of("decimalField", |
| 2014 | + decimalSchema, |
| 2015 | + null, |
| 2016 | + decimalBytes); |
| 2017 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2018 | + assertArrayEquals(decimalBytes, (byte[]) result); |
| 2019 | + } |
| 2020 | + |
| 2021 | + @Test |
| 2022 | + public void testToJavaDefaultValueTimeMillis() { |
| 2023 | + // Create time-millis schema |
| 2024 | + HoodieSchema timeSchema = HoodieSchema.createTimeMillis(); |
| 2025 | + // Time is stored as milliseconds since midnight |
| 2026 | + int defaultTime = 43200000; // 12:00:00 in millis |
| 2027 | + HoodieSchemaField field = HoodieSchemaField.of("timeField", |
| 2028 | + timeSchema, |
| 2029 | + null, |
| 2030 | + defaultTime); |
| 2031 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2032 | + assertEquals(defaultTime, result); |
| 2033 | + } |
| 2034 | + |
| 2035 | + @Test |
| 2036 | + public void testToJavaDefaultValueTimeMicros() { |
| 2037 | + // Create time-micros schema |
| 2038 | + HoodieSchema timeSchema = HoodieSchema.createTimeMicros(); |
| 2039 | + // Time is stored as microseconds since midnight |
| 2040 | + long defaultTime = 43200000000L; // 12:00:00 in micros |
| 2041 | + HoodieSchemaField field = HoodieSchemaField.of("timeField", |
| 2042 | + timeSchema, |
| 2043 | + null, |
| 2044 | + defaultTime); |
| 2045 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2046 | + assertEquals(defaultTime, result); |
| 2047 | + } |
| 2048 | + |
| 2049 | + @Test |
| 2050 | + public void testToJavaDefaultValueTimestampMillis() { |
| 2051 | + // Create timestamp-millis schema |
| 2052 | + HoodieSchema timestampSchema = HoodieSchema.createTimestampMillis(); |
| 2053 | + // Timestamp as milliseconds since epoch |
| 2054 | + long defaultTimestamp = 1609459200000L; // 2021-01-01 00:00:00 UTC |
| 2055 | + HoodieSchemaField field = HoodieSchemaField.of("timestampField", |
| 2056 | + timestampSchema, |
| 2057 | + null, |
| 2058 | + defaultTimestamp); |
| 2059 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2060 | + assertEquals(defaultTimestamp, result); |
| 2061 | + } |
| 2062 | + |
| 2063 | + @Test |
| 2064 | + public void testToJavaDefaultValueTimestampMicros() { |
| 2065 | + // Create timestamp-micros schema |
| 2066 | + HoodieSchema timestampSchema = HoodieSchema.createTimestampMicros(); |
| 2067 | + // Timestamp as microseconds since epoch |
| 2068 | + long defaultTimestamp = 1609459200000000L; // 2021-01-01 00:00:00 UTC in micros |
| 2069 | + HoodieSchemaField field = HoodieSchemaField.of("timestampField", |
| 2070 | + timestampSchema, |
| 2071 | + null, |
| 2072 | + defaultTimestamp); |
| 2073 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2074 | + assertEquals(defaultTimestamp, result); |
| 2075 | + } |
| 2076 | + |
| 2077 | + @Test |
| 2078 | + public void testToJavaDefaultValueDate() { |
| 2079 | + // Create date schema |
| 2080 | + HoodieSchema dateSchema = HoodieSchema.createDate(); |
| 2081 | + // Date is stored as days since epoch |
| 2082 | + int defaultDate = 18628; // 2021-01-01 |
| 2083 | + HoodieSchemaField field = HoodieSchemaField.of("dateField", |
| 2084 | + dateSchema, |
| 2085 | + null, |
| 2086 | + defaultDate); |
| 2087 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2088 | + assertEquals(defaultDate, result); |
| 2089 | + } |
| 2090 | + |
| 2091 | + @Test |
| 2092 | + public void testToJavaDefaultValueUUID() { |
| 2093 | + // Create UUID schema |
| 2094 | + HoodieSchema uuidSchema = HoodieSchema.createUUID(); |
| 2095 | + long seed = 123456L; |
| 2096 | + Random random = new Random(seed); |
| 2097 | + long mostSigBits = random.nextLong(); |
| 2098 | + long leastSigBits = random.nextLong(); |
| 2099 | + String defaultUuid = new UUID(mostSigBits, leastSigBits).toString(); |
| 2100 | + HoodieSchemaField field = HoodieSchemaField.of("uuidField", |
| 2101 | + uuidSchema, |
| 2102 | + null, |
| 2103 | + defaultUuid); |
| 2104 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2105 | + assertEquals(defaultUuid, result); |
| 2106 | + } |
| 2107 | + |
| 2108 | + @Test |
| 2109 | + public void testToJavaDefaultValueLocalTimestampMillis() { |
| 2110 | + // Create local-timestamp-millis schema |
| 2111 | + HoodieSchema localTimestampSchema = HoodieSchema.createLocalTimestampMillis(); |
| 2112 | + long defaultTimestamp = 1609459200000L; |
| 2113 | + HoodieSchemaField field = HoodieSchemaField.of("localTimestampField", |
| 2114 | + localTimestampSchema, |
| 2115 | + null, |
| 2116 | + defaultTimestamp); |
| 2117 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2118 | + assertEquals(defaultTimestamp, result); |
| 2119 | + } |
| 2120 | + |
| 2121 | + @Test |
| 2122 | + public void testToJavaDefaultValueLocalTimestampMicros() { |
| 2123 | + // Create local-timestamp-micros schema |
| 2124 | + HoodieSchema localTimestampSchema = HoodieSchema.createLocalTimestampMicros(); |
| 2125 | + long defaultTimestamp = 1609459200000000L; |
| 2126 | + HoodieSchemaField field = HoodieSchemaField.of("localTimestampField", |
| 2127 | + localTimestampSchema, |
| 2128 | + null, |
| 2129 | + defaultTimestamp); |
| 2130 | + Object result = HoodieSchemaUtils.toJavaDefaultValue(field); |
| 2131 | + assertEquals(defaultTimestamp, result); |
| 2132 | + } |
| 2133 | + |
1992 | 2134 | @Test |
1993 | 2135 | void testLogicalTypesRetainedAfterPruneWithNestedRecords() { |
1994 | 2136 | final String logicalTypeKey = "logicalType"; |
|
0 commit comments