Quack protocol coverage

Copy Markdown View Source

QuackDB is intentionally protocol-first, but it does not claim full DuckDB Quack protocol coverage yet. This matrix tracks the implemented surface, unsupported gaps, and the test style expected before a feature is treated as covered.

Message coverage

Quack messageStatusCoverage
Connection requestSupportedCodec tests and connection integration
Connection responseSupportedCodec tests and connection integration
Prepare requestSupportedQuery, prepare, and stream integration
Prepare responseSupportedQuery, prepare, and stream integration
Fetch requestSupportedStreaming/fetch continuation tests
Fetch responseSupportedStreaming/fetch continuation tests
Append requestSupportedNative append integration and quack-ts encode fixtures
Success responseSupportedAppend and disconnect paths
Error responseSupportedQuery, append, and transport error tests
DisconnectSupportedDBConnection disconnect cleanup

Vector encoding coverage

Vector encodingDecodeEncodeNotes
FlatSupportedSupportedPrimary query and append path
ConstantSupportedNot emittedDecode expands constants to row values
DictionarySupportedNot emittedDecode validates selection indexes
SequenceSupportedNot emittedDecode materializes generated values
FSSTUnsupportedUnsupportedRaises explicit :unsupported_vector_type; QuackDB has an internal optional :fsst bridge, but DuckDB currently flattens FSST vectors before Quack serialization and the compressed wire payload shape is not exposed by current DuckDB releases
Unknown vector idsUnsupportedUnsupportedRaises explicit :unknown_vector_type

Logical type coverage

DuckDB logical type familyDecodeAppend encodeNotes
BooleansSupportedSupported
Signed/unsigned integersSupportedSupportedIncludes hugeint/uhugeint
Floating pointSupportedSupported
DecimalSupportedSupportedWidth-dependent physical storage
VARCHAR/CHARSupportedSupportedInvalid UTF-8 raises explicit errors
BLOBSupportedSupportedRaw bytes
UUIDSupportedPartialDecode supported; append can encode integer storage but public UUID append ergonomics are not finalized
ENUMSupportedPartialDecode supported; append requires encoded enum index today
BITSupportedPartialDecode to bit string; append expects DuckDB bit payload bytes
BIGNUMSupportedSupportedElixir integers; fixture covers zero, positive, and negative large values
DATE/TIME/TIMESTAMP/TIMESTAMPTZSupportedSupportedCalendar-aware append encoding
TIME_NSSupportedSupportedQuackDB.NanosecondTime
TIMESTAMP_NSSupportedSupportedQuackDB.NanosecondTimestamp
TIME WITH TIME ZONESupportedSupportedQuackDB.TimeWithTimeZone
INTERVALSupportedSupportedQuackDB.Interval
LISTSupportedSupportedNested values covered by real integration
STRUCTSupportedSupportedString-key maps on decode
ARRAYSupportedSupportedFixed-size metadata is encoded/decoded
MAPSupportedSupportedDecodes to maps; duplicate keys follow Map.put/3 semantics
SQLNULLPartialPartialCovered as ordinary null values, not all standalone logical-type edge cases
UNIONUnsupportedUnsupportedShould raise explicit unsupported errors
VARIANTUnsupportedUnsupportedShould raise explicit unsupported errors
ANY/TEMPLATE/LAMBDA/POINTERUnsupportedUnsupportedProtocol metadata reserved/unsupported
AGGREGATE_STATEUnsupportedUnsupportedMetadata not implemented
Extension/custom typesUnsupportedUnsupportedMetadata not implemented
GEOMETRYPartialPartialDecoded as WKB-compatible bytes from DuckDB spatial geometry values; semantic geometry structs are not implemented

DBConnection and client coverage

FeatureStatusCoverage
Query executionSupportedUnit and integration
Prepare/executeSupportedUnit and integration
Streaming/fetch continuationSupportedUnit and integration
TransactionsSupportedUnit and integration
Native row appendSupportedUnit and integration
Native column appendSupportedUnit and integration
Ecto raw SQLSupportedUnit and integration
Ecto analytical readsPartialBroad SQL-generation and integration coverage
Ecto insert/insert_allCoveredPlain inserts, returning, insert-from-query, common upserts, on_conflict: :nothing, and explicit native append fast path covered
Ecto mutations and DDLPartialSchema 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

Current cross-implementation fixtures compare QuackDB's append/data chunk encoding byte-for-byte with quack-ts for scalar and nested chunks. See docs/protocol/fixtures.md for the fixture inventory and backlog.