Summary
The copy module is sync-only — import_csv, export_csv, import_text, export_text are all defined under impl Connection and have no async counterparts on AsyncConnection. Async users either block-on-thread or fall back to the Arrow path. The underlying primitives (AsyncClient::copy_in / copy_out) already exist, so this is plumbing, not new protocol work.
Current state
All four CSV/text COPY methods live in hyperdb-api/src/copy.rs:
AsyncConnection exposes none of these. Original gap analysis: §4 of docs/RUST_API_GAP_ANALYSIS.md (predecessor repo).
Proposed work
Backwards compatibility
Purely additive. New methods on AsyncConnection only.
Performance note
The plumbing path is AsyncClient::copy_in/copy_out (already implemented). The async wrappers should stream through chunked I/O without buffering the full CSV — match the streaming behavior of the sync versions.
Summary
The
copymodule is sync-only —import_csv,export_csv,import_text,export_textare all defined underimpl Connectionand have no async counterparts onAsyncConnection. Async users either block-on-thread or fall back to the Arrow path. The underlying primitives (AsyncClient::copy_in/copy_out) already exist, so this is plumbing, not new protocol work.Current state
All four CSV/text COPY methods live in hyperdb-api/src/copy.rs:
Connection::export_csv— copy.rs:276Connection::export_text— copy.rs:320Connection::export_csv_string— copy.rs:365Connection::import_csv— copy.rs:401Connection::import_csv_with_header— copy.rs:415Connection::import_text— copy.rs:460AsyncConnectionexposes none of these. Original gap analysis: §4 ofdocs/RUST_API_GAP_ANALYSIS.md(predecessor repo).Proposed work
AsyncConnection:export_csv,export_text,export_csv_string,import_csv,import_csv_with_header,import_text. Useimpl AsyncRead/AsyncWrite(fromtokio::io) instead ofstd::io::Read/Write.TestConnectionpatterns inhyperdb-api/tests/).hyperdb-api/examples/demonstrating async CSV import + export.Backwards compatibility
Purely additive. New methods on
AsyncConnectiononly.Performance note
The plumbing path is
AsyncClient::copy_in/copy_out(already implemented). The async wrappers should stream through chunked I/O without buffering the full CSV — match the streaming behavior of the sync versions.