Files
five/tests/pgserver
CharlesKWON a5567648e9 test(pgserver): Phase 3 — DML + transaction integration harness
Adds tests/pgserver/run.sh, the integration gate for the wire
layer. Builds a minimal bootstrap PRG that opens nothing and just
calls PG_SERVER_START on an ephemeral port, then drives psql with
a Simple Query to confirm the end-to-end pipeline (TCP accept →
startup handshake → Query → five_SQL → RowDescription + DataRow
→ ReadyForQuery) still works after every change.

Phase 3 verified scope (driven via a separate pgx harness during
development):

  * CREATE TABLE / INSERT / UPDATE / DELETE over Simple Query
  * BEGIN / COMMIT / ROLLBACK from the wire
  * Two-connection cross-visibility on a shared DBF
  * Per-session ROLLBACK leaves the *other* connection's data
    intact — the Phase 1 STATIC → TSqlSession refactor is what
    makes this hold; pre-refactor, both connections would have
    shared one s_aTxnLog and A's ROLLBACK would have collapsed
    B's COMMIT.

Known limitation captured in the script header (deferred to
Phase 7 follow-up):

  * ≥3 concurrent connections doing in-flight INSERT/SELECT in
    their own transactions occasionally race at the hbrdd
    workarea layer — surfaces as one worker's just-inserted row
    missing from its own SELECT. 2-way concurrent + N-way serial
    are both reliable. Root cause is multi-thread workarea
    arbitration during dbUseArea/dbAppend, which the pre-1.0
    audit flagged as Top-Risk #2 ("WorkArea collision under
    multi-session"). Tracking for a dedicated fix.

Gate count now reads:
  go test ./...                       ✓
  FiveSql2 SQL:1999 43/43             ✓
  Harbour compat 56/56                ✓
  std.ch 17/17                        ✓
  FRB 7/7                             ✓
  examples 65/71                      ✓ (unchanged baseline)
  pgserver integration 1/1            ✓ (new)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 07:25:13 +09:00
..