Skip to content

Commit 377b3ef

Browse files
rustyconoverclaude
andcommitted
pushdown: make FilterApplier HTTP-state-serializable
FilterApplier is held in several table-function producers' StreamState. Over HTTP that state is serialized into a continuation token, but FilterApplier had only a private 2-arg constructor and final fields, so the field-based CBOR serializer couldn't reconstruct it on /exchange. Add a no-arg constructor and drop final on filterBytes/joinKeysIpc (cached stays transient, re-decoded lazily). No behaviour change for the in-memory transports. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 40af24a commit 377b3ef

1 file changed

Lines changed: 11 additions & 2 deletions

File tree

vgi/src/main/java/farm/query/vgi/pushdown/FilterApplier.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,19 @@
1818
*/
1919
public final class FilterApplier {
2020

21-
private final byte[] filterBytes;
22-
private final List<byte[]> joinKeysIpc;
21+
// Non-final + a no-arg constructor so the HTTP transport's field-based CBOR
22+
// state serializer can round-trip a FilterApplier held in a producer's
23+
// StreamState across /init -> /exchange. cached is transient (re-decoded
24+
// lazily after a round-trip).
25+
private byte[] filterBytes;
26+
private List<byte[]> joinKeysIpc;
2327
private transient PushdownFilters cached;
2428

29+
/** No-arg constructor for state deserialization; {@link #from} is the API. */
30+
private FilterApplier() {
31+
this.joinKeysIpc = List.of();
32+
}
33+
2534
/**
2635
* Create an applier over the init-time pushdown payload; decoding is deferred
2736
* to first {@link #apply}.

0 commit comments

Comments
 (0)