spg-server 7.37.21

SPG daemon — listens for self-built wire-frame connections and PG-wire (libpq-compatible).
[package]
name         = "spg-server"
version      = { workspace = true }
edition      = { workspace = true }
authors      = { workspace = true }
license      = { workspace = true }
readme       = "README.md"
description  = "SPG daemon — listens for self-built wire-frame connections and PG-wire (libpq-compatible)."
repository   = { workspace = true }
categories   = ["database-implementations", "network-programming"]
keywords     = ["spg", "database", "server", "sql", "postgres"]

[[bin]]
name = "spg-server"
path = "src/main.rs"

# v7.13.0 (C5, mailrs round-5) — pg_isready-compatible health
# probe. Thin TCP-connect on the PG-wire port; exits 0 if the
# server accepts connections, 2 otherwise (matching PG's
# pg_isready return codes).
[[bin]]
name = "pg_isready"
path = "src/bin/pg_isready.rs"

[dependencies]
spg-wire     = { workspace = true }
# v6.1.1: pgwire's Extended Query path stores the parsed AST in
# the prepared-statement cache (`spg_sql::ast::Statement`), so
# spg-server depends on spg-sql directly. Pre-v6.1.1 only used
# the engine's opaque `execute(sql)` API.
spg-sql      = { workspace = true }
spg-engine   = { workspace = true }
spg-storage  = { workspace = true }
# v7.37.42-arena Phase 2 — pgwire allocates a per-query Bump arena
# and threads it into the SCALARSQ streaming executor so the row
# scratch + projection buffer live in the arena (bulk reset at
# query end instead of per-row Drop).
bumpalo      = { workspace = true }
spg-audit    = { workspace = true }
spg-crypto   = { workspace = true }
# v7.1 — manifest format extracted into a standalone crate so
# spg-embedded can read + write the same bytes spg-server does.
spg-manifest = { workspace = true }
# v7.39 (tz epic) — IANA timezone lookups (RFC 8536 TZif reader over
# the system zoneinfo; zero external dependencies).
spg-tzif     = { workspace = true }
# v4.33 ops three-pack uses POSIX FFI for:
#   - signal(SIGTERM/SIGINT) to drive graceful shutdown
#   - statvfs(2) to compute WAL volume free space for the disk water-mark
# Both are macOS + Linux. Each call site is wrapped in
# `#[allow(unsafe_code)]` and stays a tight FFI shim.
libc        = "0.2"
# v7.17.0 Phase 3.P0-77 — TLS for the MySQL-wire `CLIENT_SSL`
# mid-handshake upgrade. rustls is pure Rust (no system OpenSSL
# requirement); rcgen mints a runtime self-signed cert when no
# operator-supplied certificate path is configured via env.
rustls      = { version = "0.23", default-features = false, features = ["std", "logging", "tls12", "ring"] }
rcgen       = { version = "0.13", default-features = false, features = ["pem", "ring"] }

[dev-dependencies]
spg-audit   = { workspace = true }
# v4.33: e2e_graceful_shutdown sends SIGTERM via kill(2) — the
# child-process abstraction defaults to SIGKILL which would
# bypass the drain path under test.
libc        = "0.2"
# v7.17.0 Phase 3.P0-71 — the mysql_native_password e2e tests
# need to compute the client's auth_response (SHA1-based) to
# verify the server validates it correctly.
sha1        = { version = "0.10", default-features = false }
# v7.17.0 Phase 3.P0-72 — same shape for caching_sha2_password
# (SHA256-based fast path).
sha2        = { version = "0.10", default-features = false }
# v7.17.0 Phase 3.P0-77 — the SSL e2e test drives the client side
# of a TLS handshake against the server's self-signed cert.
rustls      = { version = "0.23", default-features = false, features = ["std", "logging", "tls12", "ring"] }
# v7.39 (TLS/SCRAM Phase 3) — the SCRAM-SHA-256-PLUS e2e drives the client side
# of the SASL exchange (PBKDF2 / HMAC / SHA-256 / base64) against the server.
spg-crypto  = { workspace = true }

[lints]
workspace = true