Adds tests/benchmarks/ with pytest-benchmark coverage of the hot codec paths and end-to-end SELECT/INSERT/pool/async round-trips. Establishes a committed baseline.json so PRs can be regression-checked at review via --benchmark-compare. * test_codec_perf.py (16): decode/encode_param/parse_tuple_payload micro-benchmarks - run without container, suitable for pre-merge CI. * test_select_perf.py (4): SELECT round-trips - 1-row latency floor, 10-row, 1k-row full fetch, parameterized. * test_insert_perf.py (3): single-row INSERT, executemany 100 / 1000. * test_pool_perf.py (3): cold connect, pool acquire/release, pool acquire + query + release. * test_async_perf.py (2): async round-trip overhead, 10x concurrent. * baseline.json: committed snapshot, 28 measurements. * benchmark pytest marker, gated off by default. * Makefile: bench / bench-codec / bench-save targets; test-integration excludes benchmarks for speed. Headline numbers (dev container loopback): * decode(int): 181 ns * parse_tuple 5 cols: 2.87 µs/row * SELECT 1 round-trip: 177 µs * Pool acquire+query+release: 295 µs * Cold connect: 11.2 ms (72x slower than pool) UTF-8 decode carries no measurable cost vs iso-8859-1 - confirms Phase 20 didn't regress anything. Total: 69 unit + 211 integration + 28 benchmark = 308 tests.
62 lines
975 B
Plaintext
62 lines
975 B
Plaintext
# Project-private context (per global CLAUDE.md rule: only add to private repos)
|
|
CLAUDE.md
|
|
|
|
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
*.so
|
|
.Python
|
|
build/
|
|
dist/
|
|
*.egg-info/
|
|
.eggs/
|
|
.installed.cfg
|
|
*.egg
|
|
|
|
# Virtual environments
|
|
.venv/
|
|
venv/
|
|
env/
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
# uv
|
|
.python-version
|
|
|
|
# IDE / editor
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
*~
|
|
|
|
# Test / lint caches
|
|
.pytest_cache/
|
|
.ruff_cache/
|
|
.mypy_cache/
|
|
.coverage
|
|
.coverage.*
|
|
htmlcov/
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Phase 0 build artifacts (decompiled JDBC, downloaded JARs)
|
|
# build/ already excluded by Python pattern above; we keep the directory for spike work
|
|
build/jdbc-src/
|
|
build/*.jar
|
|
|
|
# Wireshark / socat captures live IN the repo intentionally — they're spike deliverables.
|
|
# The global ~/.gitignore_global excludes *.log; negate that for our captures specifically:
|
|
!docs/CAPTURES/
|
|
!docs/CAPTURES/*.log
|
|
!docs/CAPTURES/*.pcap
|
|
!docs/CAPTURES/*.txt
|
|
|
|
# Java reference client build outputs
|
|
*.class
|
|
tests/benchmarks/.results/
|