Skip to content

feat(java): let a read request name what it wants pushed down - #971

Open
keksmd wants to merge 1 commit into
apache:mainfrom
keksmd:java-io-api-read-request
Open

feat(java): let a read request name what it wants pushed down#971
keksmd wants to merge 1 commit into
apache:mainfrom
keksmd:java-io-api-read-request

Conversation

@keksmd

@keksmd keksmd commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Adds the request-side value types for a pushdown-capable read: Projection, RowRange, Filter, ComparisonOperator, Literal, ReadRequest, and the ReadCapability enum a physical reader declares support for.

This is the next slice after #961 (merged) — it only describes what a caller can ask a reader to push down. It does not add a reader, a result type, or IO. That's the follow-up PR.

Focused verify: mvn --no-transfer-progress -f maven-projects/pom.xml -pl io-api -am spotless:check and clean verify -Dspotless.check.skip=true — clean, tests green.

@keksmd

keksmd commented Sep 1, 2026

Copy link
Copy Markdown
Contributor Author

cc @SemyonSinchenko @SYaoJun — next slice after #961 (merged). Green CI.

@keksmd

keksmd commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

@SemyonSinchenko @SYaoJun this is the read half of the IO API you reviewed in #961, so it may be easiest to look at with that context. Rebased on current main, no conflicts, CI green.

It adds the request vocabulary only: projection, optional row range, optional predicate and limit. No query AST and no Arrow dependency in the public surface.

A physical read is not only a URI. A caller knows which columns it needs,
which source rows, which values, and how many rows are enough - and a backend
that learns all four up front can skip work that a caller would otherwise have
to discard after the fact.

Add the request half of the read API: an ordered projection, a half-open row
range, an AND conjunction of column filters over immutable scalars, and a row
limit. A request also reports which of those hints it actually carries, so a
backend can answer for each one instead of guessing.

Constraint: filter literals stay immutable and lossless. NaN, infinity, and
sub-millisecond timestamps are refused rather than silently compared against a
value a stored format cannot represent.
@keksmd
keksmd force-pushed the java-io-api-read-request branch from 7d920aa to 72abab9 Compare September 9, 2026 11:42
@keksmd

keksmd commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (now including #966 and #968) and force-pushed, so CI here runs against what would actually merge rather than the older base. Locally mvn -pl io-api -am clean verify gives 53 tests, 0 failures, 0 errors, 0 skipped.

@keksmd

keksmd commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

@SemyonSinchenko when you have a moment — this one is green and rebased on current main. It is the smaller half of the read contract: the request object plus the pushdown vocabulary, no behaviour yet.

I cannot add reviewers on this repo, so a ping is the only lever I have. Merging this before #972 keeps that one down to a single commit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant