Compatibility layer overview (src/sydra/compat*)
This set of modules provides SydraDB’s PostgreSQL-compatibility “edges”:
- A minimal SQLSTATE mapping and error payload format
- A tiny, in-memory catalog snapshot builder (namespaces/relations/attributes/types)
- A PostgreSQL wire-protocol (
pgwire) listener that accepts clients likepsql - Translation telemetry (counters + JSONL event recorder)
- Test fixtures for SQL→sydraQL translation
Module map
- Root re-exports:
src/sydra/compat.zig - Telemetry:
- Counters:
src/sydra/compat/stats.zig - JSONL recorder:
src/sydra/compat/log.zig
- Counters:
- Errors:
- SQLSTATE subset + payload builder:
src/sydra/compat/sqlstate.zig
- SQLSTATE subset + payload builder:
- Catalog:
- Snapshot builder/store:
src/sydra/compat/catalog.zig
- Snapshot builder/store:
- Pgwire:
- Re-exports:
src/sydra/compat/wire.zig - Startup + message writers:
src/sydra/compat/wire/protocol.zig - Handshake/session metadata:
src/sydra/compat/wire/session.zig - Listener + query loop:
src/sydra/compat/wire/server.zig
- Re-exports:
- Fixtures:
- Translator test loader:
src/sydra/compat/fixtures/translator.zig
- Translator test loader:
See also
- Reference: PostgreSQL Compatibility (design notes)
- Query pipeline overview
How pgwire executes a query (happy path)
wire/protocol.readStartupparses the startup packet (and declines SSL).wire/session.performHandshakeresponds with:AuthenticationOk- multiple
ParameterStatus ReadyForQuery
wire/server.messageLoopreads frontend messages.- For a Simple Query (
Q) message,wire/server.handleSimpleQuerydoes:- SQL → sydraQL via
src/sydra/query/translator.zig - execution via
src/sydra/query/exec.zig - streams results as
RowDescription+DataRow* - emits
NoticeResponsediagnostics (schema, trace id, operator stats) - completes with
CommandCompleteandReadyForQuery
- SQL → sydraQL via
Key limitations (current code)
- SSL/TLS: not implemented (SSLRequest is declined).
- Cancel requests: not supported.
- Extended query protocol: not implemented (Parse message returns a
0A000error). - Types:
RowDescriptionuses a single “default” type mapping for all columns.
Code excerpt (root re-exports)
src/sydra/compat.zig
pub const stats = @import("compat/stats.zig");
pub const sqlstate = @import("compat/sqlstate.zig");
pub const clog = @import("compat/log.zig");
pub const fixtures = struct {
pub const translator = @import("compat/fixtures/translator.zig");
};
pub const catalog = @import("compat/catalog.zig");
pub const wire = @import("compat/wire.zig");