Uh oh!
There was an error while loading. Please reload this page.
[spec] Support parsing REST catalog Predicate and Transform JSON - #500
Conversation
5b21096 to
87f5fb1CompareJingsongLi
commented
Jul 13, 2026
Incompatible with Java legitimate wire format: Java will generate 'LEAF+transform=NULL+function=TRUS/FALSE', which Rust currently explicitly rejects. The result is a failed valid query auth condition (fail closed, not unauthorized, but will erroneously reject the query). |
87f5fb1 to
0d97e2cCompare0d97e2c to
107b726Compareplusplusjiajia
commented
Jul 25, 2026
@JingsongLi Thanks for catching this! Fixed — TRUE/FALSE leaves with the NULL transform now parse to AlwaysTrue/AlwaysFalse, with the PredicateJsonSerdeTest wire strings pinned in tests. |
Uh oh!
There was an error while loading. Please reload this page.
Purpose
Deserialize the REST catalog's serialized
PredicateandTransformJSON(the row filter / column masking a
query-auth.enabledtable returns) intospec::Predicate/spec::Transform. Parse-only — needed by the query-authenforcement follow-up.
Changes
Predicate::from_rest_json+collect_leaf_field_indicesspec::Transform/TransformInput+Transform::from_rest_json+collect_field_indicesconversion. Tests pin wire strings from Java's
PredicateJsonSerdeTest/TransformJsonSerdeTest.Scope
Structural parsing only, following the crate's existing pattern for
REST-serialized payloads (
Schemauses#[derive(Deserialize)]; the sharedDataTypeparser already accepts lenient type strings for schema columns).It does not replicate the Java parser bit-for-bit:
CASTis parsed structurally; cast applicability is checked where the maskis applied (arrow cast + output-type equality), not here.
LIKEuses SQL escape semantics; row-filter evaluation reuses the sharedresidual evaluator (
arrow/residual.rs), soFloat/Double.compareToandLIKE _edge semantics are Arrow's — a documented limitation