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]

Reply via email to