LuciferYang opened a new issue, #9639: URL: https://github.com/apache/paimon/issues/9639
### Search before asking - [x] I searched in the [issues](https://github.com/apache/paimon/issues) and found nothing similar. ### Paimon version master, `475be566f` (2.1-SNAPSHOT). ### Compute Engine Any engine using a REST catalog. Both ends of this JSON are in paimon-core: `RESTCatalog.listPartitionsByFilterPaged` serializes a predicate into `ListPartitionsByFilterRequest.filter`, and `TableQueryAuthResult.parsePredicate` reads the row-level filter out of `AuthTableQueryResponse.filter` on every scan. ### Minimal reproduce step Round-trip a predicate whose literal is a DATE, TIME, TIMESTAMP, TIMESTAMP_LTZ or DECIMAL through the predicate JSON: ```java Predicate p = builder.equal(0, DateTimeUtils.toInternal(LocalDate.of(2026, 1, 15))); JsonSerdeUtil.fromJson(JsonSerdeUtil.toFlatJson(p), Predicate.class); // java.lang.UnsupportedOperationException: Unexpected date literal of class java.util.ArrayList ``` `JsonSerdeUtil` registers Jackson's `JavaTimeModule` and does not disable `WRITE_DATES_AS_TIMESTAMPS`, so `LeafPredicate.serializeLiterals` hands it a `LocalDate` and it comes out as `[2026,1,15]`; a `BigDecimal` comes out as a JSON number. Reading back gives an `ArrayList` and a `Double`, and `PredicateBuilder.convertJavaObject` accepts neither: ```java case DATE: if (o instanceof java.sql.Date) { ... } else if (o instanceof java.sql.Timestamp) { ... } else if (o instanceof LocalDate) { ... } else { throw new UnsupportedOperationException("Unexpected date literal of class " + o.getClass()); } ``` DECIMAL is a `(BigDecimal) o` cast, so that one is a `ClassCastException`. So a partition filter on a DATE column, or a row-level filter carrying a DECIMAL, fails as soon as it crosses the REST boundary. There is no shape that works: the writer's own output is what the reader rejects. ### What doesn't meet your expectations? A predicate should survive its own serialization. These five types have no working representation at all today, which is why nothing depends on the current one. ### Anything else? `PredicateJsonSerdeTest` covers BIGINT, STRING and ARRAY literals, so none of the affected types were exercised. ### Are you willing to submit a PR? - [x] I'm willing to submit a PR! -- 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]
