fresh-borzoni opened a new pull request, #452:
URL: https://github.com/apache/fluss-rust/pull/452
## Summary
Adds Elixir client bindings via Rustler NIFs, following the same approach as
the Python and C++ bindings - wrapping the shared Rust client rather than
reimplementing the protocol. This PR covers log table operations (append +
scan).
## Approach
The NIF layer (`native/fluss_nif/`) bridges async Rust to the BEAM. One-shot
operations (connect, create table, subscribe, flush) run on dirty I/O
schedulers. The scanner poll path spawns a background thread and delivers
results as `{:fluss_records, records}` messages as this avoids holding dirty
scheduler threads during continuous consumption, which matters because the BEAM
only has 10 by default and a streaming consumer polls indefinitely.
Column names in result maps are interned as atoms once per poll call and
reused across all rows. Type conversions are symmetric, matching other
binding's approach.
Fire-and-forget writes work the same way as in Python and C++: `append/2`
returns a `WriteHandle` that can be ignored for throughput or waited on for
per-record acknowledgment.
## What's missing
Projection (the `TableScan` builder), batch scanning via Arrow
RecordBatches, partitioned table support, offset queries, and KV tables. These
are hopefully additive, nothing in this PR needs to change to support them.
Precompiled NIF binaries (`rustler_precompiled`) are also not included, so
building currently requires a Rust toolchain. CI/CD, docs also left for next
PRs.
--
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]