|
29 | 29 |
|
30 | 30 | import java.math.BigDecimal; |
31 | 31 | import java.time.LocalDate; |
| 32 | +import java.time.LocalDateTime; |
32 | 33 | import java.util.Arrays; |
33 | | -import java.util.Base64; |
34 | 34 | import java.util.Collections; |
35 | 35 |
|
36 | 36 | import static org.junit.jupiter.api.Assertions.assertFalse; |
37 | 37 | import static org.junit.jupiter.api.Assertions.assertNotNull; |
38 | | -import static org.junit.jupiter.api.Assertions.assertThrows; |
39 | 38 | import static org.junit.jupiter.api.Assertions.assertTrue; |
40 | 39 |
|
41 | 40 | /** Tests for {@link FilterPredicateConverter}. */ |
@@ -132,79 +131,56 @@ public void testIsNullFunctionConversion() { |
132 | 131 |
|
133 | 132 | @Test |
134 | 133 | public void testLiteralConversions() { |
135 | | - // BOOLEAN from string |
| 134 | + // BOOLEAN from boolean |
136 | 135 | Predicate boolEq = |
137 | 136 | FilterPredicateConverter.toPredicate( |
138 | 137 | new TransformFilter( |
139 | 138 | new FieldFilterTransform(0, "b", DataTypes.BOOLEAN()), |
140 | 139 | LeafFilterFunction.EQUAL, |
141 | | - Collections.singletonList("true"))); |
| 140 | + Collections.singletonList(true))); |
142 | 141 | assertNotNull(boolEq); |
143 | 142 | assertTrue(boolEq.test(GenericRow.of(true))); |
144 | 143 | assertFalse(boolEq.test(GenericRow.of(false))); |
145 | 144 |
|
146 | | - // VARBINARY/BINARY from base64 string |
147 | | - byte[] bytes = new byte[] {1, 2, 3}; |
148 | | - String b64 = Base64.getEncoder().encodeToString(bytes); |
149 | | - Predicate bytesEq = |
150 | | - FilterPredicateConverter.toPredicate( |
151 | | - new TransformFilter( |
152 | | - new FieldFilterTransform(0, "c", DataTypes.VARBINARY(3)), |
153 | | - LeafFilterFunction.EQUAL, |
154 | | - Collections.singletonList(b64))); |
155 | | - assertNotNull(bytesEq); |
156 | | - assertTrue(bytesEq.test(GenericRow.of(bytes))); |
157 | | - assertFalse(bytesEq.test(GenericRow.of(new byte[] {1, 2, 4}))); |
158 | | - |
159 | | - // DECIMAL from string |
| 145 | + // DECIMAL from BigDecimal |
160 | 146 | Decimal expectedDec = Decimal.fromBigDecimal(new BigDecimal("12.34"), 10, 2); |
161 | 147 | Predicate decEq = |
162 | 148 | FilterPredicateConverter.toPredicate( |
163 | 149 | new TransformFilter( |
164 | 150 | new FieldFilterTransform(0, "d", DataTypes.DECIMAL(10, 2)), |
165 | 151 | LeafFilterFunction.EQUAL, |
166 | | - Collections.singletonList("12.34"))); |
| 152 | + Collections.singletonList(new BigDecimal("12.34")))); |
167 | 153 | assertNotNull(decEq); |
168 | 154 | assertTrue(decEq.test(GenericRow.of(expectedDec))); |
169 | 155 | assertFalse( |
170 | 156 | decEq.test(GenericRow.of(Decimal.fromBigDecimal(new BigDecimal("12.35"), 10, 2)))); |
171 | 157 |
|
172 | | - // DATE from ISO string -> epoch day int |
| 158 | + // DATE from LocalDate -> epoch day int |
173 | 159 | LocalDate date = LocalDate.parse("2025-12-23"); |
174 | 160 | int epochDay = (int) date.toEpochDay(); |
175 | 161 | Predicate dateEq = |
176 | 162 | FilterPredicateConverter.toPredicate( |
177 | 163 | new TransformFilter( |
178 | 164 | new FieldFilterTransform(0, "e", DataTypes.DATE()), |
179 | 165 | LeafFilterFunction.EQUAL, |
180 | | - Collections.singletonList("2025-12-23"))); |
| 166 | + Collections.singletonList(date))); |
181 | 167 | assertNotNull(dateEq); |
182 | 168 | assertTrue(dateEq.test(GenericRow.of(epochDay))); |
183 | 169 | assertFalse(dateEq.test(GenericRow.of(epochDay + 1))); |
184 | 170 |
|
185 | | - // TIMESTAMP from string (java.sql.Timestamp.valueOf compatible) |
186 | | - Timestamp ts = Timestamp.fromEpochMillis(1_700_000_000_000L); |
187 | | - String tsString = ts.toSQLTimestamp().toString(); |
| 171 | + // TIMESTAMP from LocalDateTime |
| 172 | + LocalDateTime dateTime = LocalDateTime.of(2025, 12, 23, 12, 34, 56, 789_000_000); |
| 173 | + Timestamp ts = Timestamp.fromLocalDateTime(dateTime); |
188 | 174 | Predicate tsEq = |
189 | 175 | FilterPredicateConverter.toPredicate( |
190 | 176 | new TransformFilter( |
191 | 177 | new FieldFilterTransform(0, "f", DataTypes.TIMESTAMP_MILLIS()), |
192 | 178 | LeafFilterFunction.EQUAL, |
193 | | - Collections.singletonList(tsString))); |
| 179 | + Collections.singletonList(dateTime))); |
194 | 180 | assertNotNull(tsEq); |
195 | 181 | assertTrue(tsEq.test(GenericRow.of(ts))); |
196 | | - assertFalse(tsEq.test(GenericRow.of(Timestamp.fromEpochMillis(ts.getMillisecond() + 1)))); |
197 | | - } |
198 | | - |
199 | | - @Test |
200 | | - public void testDecimalOverflowThrows() { |
201 | | - TransformFilter rest = |
202 | | - new TransformFilter( |
203 | | - new FieldFilterTransform(0, "d", DataTypes.DECIMAL(2, 0)), |
204 | | - LeafFilterFunction.EQUAL, |
205 | | - Collections.singletonList("123")); |
206 | | - |
207 | | - assertThrows( |
208 | | - IllegalArgumentException.class, () -> FilterPredicateConverter.toPredicate(rest)); |
| 182 | + assertFalse( |
| 183 | + tsEq.test( |
| 184 | + GenericRow.of(Timestamp.fromLocalDateTime(dateTime.plusNanos(1_000_000))))); |
209 | 185 | } |
210 | 186 | } |
0 commit comments