SIGN IN SIGN UP

feat: ColumnPageStream trait — single contract for streaming + legacy inputs (#6406)

Extracts a `pub trait ColumnPageStream` from PR-4's concrete reader so PR-5
(legacy adapter) and PR-6 (streaming merge engine) can land in parallel
against a stable contract instead of one rewriting the other.

Trait shape:
  fn metadata(&self) -> &Arc<ParquetMetaData>
  async fn next_page(&mut self) -> Result<Option<Page>, ParquetReadError>

Same invariants PR-4 already guarantees: row-group-major /
column-major-within-RG / page-major-within-column yield order, idempotent
EOF, and I/O failures surface as ParquetReadError::Io rather than being
masked as decode errors.

Implements the trait for `StreamingParquetReader`. Promotes visibility
of `Page`, `ParquetReadError`, `RemoteByteSource`, `StreamingParquetReader`,
and `StreamingReaderConfig` from `pub(crate)` to `pub` so downstream
crates and PR-5/PR-6 can consume them.

Adds `test_streaming_reader_satisfies_column_page_stream_trait`: drains
the same fixture through both the concrete-typed and trait-object surfaces,
asserts identical (rg_idx, col_idx, page_idx_in_col, compressed_page_size)
sequences and idempotent EOF through the trait.

Pure refactor — no behavior change.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
G
George Talbot committed
8ff1095fa54d237b6efd3e5e3257a2c60b27d39e
Parent: e36ef6f