QuackDB is intentionally protocol-first, but it does not claim full DuckDB Quack protocol coverage yet. It speaks Quack protocol version 3, the version DuckDB 2.0 serves, and refuses servers that select another version. This matrix tracks the implemented surface, unsupported gaps, and the test style expected before a feature is treated as covered.
Message coverage
Quack message
Status
Coverage
Connection request
Supported
Version 3 range, client id, and heartbeat lease; codec tests and connection integration
Connection response
Supported
Negotiated lease; DuckDB 2.0 fixture and integration
Prepare request
Supported
Query UUID and inline row limit; query, prepare, and stream integration
Prepare response
Supported
DuckDB 2.0 fixtures and integration
Fetch request
Supported
Dense batch and acknowledged-prefix indexes; retried after lost connections
Fetch response
Supported
Chunk blob after the body and terminal batch count; DuckDB 2.0 fixtures
Send-data request
Supported
Native appends into scan_data_from_quack_client; codec tests and integration
Message, exception type, extra info, and invalidation flag; DuckDB 2.0 fixture
Disconnect
Supported
DBConnection disconnect cleanup
Vector encoding coverage
Vector encoding
Decode
Encode
Notes
Flat
Supported
Supported
Primary query and append path; strings use DuckDB 2.0's lengths-and-bytes layout and the pre-2.0 list layout still decodes
Constant
Supported
Not emitted
Decode expands constants to row values
Dictionary
Supported
Not emitted
Decode validates selection indexes
Sequence
Supported
Not emitted
Decode materializes generated values
Shredded
Supported
Not emitted
VARIANT columns read from storage; typed fields merge with unshredded leftovers
FSST
Unsupported
Unsupported
Raises explicit :unsupported_vector_type; QuackDB has an internal optional :fsst bridge, but current real-server probes with repeated long strings still return flat VARCHAR chunks over Quack, so the compressed wire payload shape is not exposed by current DuckDB releases
Unknown vector ids
Unsupported
Unsupported
Raises explicit :unknown_vector_type
Logical type coverage
DuckDB logical type family
Decode
Append encode
Notes
Booleans
Supported
Supported
Signed/unsigned integers
Supported
Supported
Includes hugeint/uhugeint
Floating point
Supported
Supported
Decimal
Supported
Supported
Width-dependent physical storage
VARCHAR/CHAR
Supported
Supported
Invalid UTF-8 raises explicit errors
BLOB
Supported
Supported
Raw bytes
UUID
Supported
Partial
Decode supported; append can encode integer storage but public UUID append ergonomics are not finalized
ENUM
Supported
Partial
Decode supported; append requires encoded enum index today
BIT
Supported
Partial
Decode to bit string; append expects DuckDB bit payload bytes
BIGNUM
Supported
Supported
Elixir integers; fixture covers zero, positive, and negative large values
Plain inserts, returning, insert-from-query, common upserts, on_conflict: :nothing, and explicit native append fast path covered
Ecto mutations and DDL
Partial
Schema update/delete, joined update_all, joined delete_all, rowid-filtered ordered/limited mutations, Repo.explain, transactions, and basic migrator-backed DDL covered where DuckDB SQL allows it
Conformance fixtures
Golden fixtures captured from a real DuckDB 2.0 server cover the handshake, typed errors, prepare and fetch responses, and VARIANT layouts. The older quack-ts chunks remain as decode checks for the pre-2.0 string layout. See fixtures.md for the fixture inventory and malformed fixtures.