Bug Fixes
Prepared statement lost mid-batch due to cache eviction (#167). A client sending multiple prepared statements in one batch could hit prepared statement "DOORMAN_X" does not exist (error 26000) if a new statement pushed an already-bound one out of the server-side LRU cache. The eviction closed the statement on PostgreSQL before the batch finished executing.
Root cause: the LRU cache did not promote entries on lookup, so a statement checked seconds ago could still be the eviction victim. On top of that, the eviction Close was sent to PostgreSQL immediately, ahead of the buffered Bind that still referenced it.
Fix: lookups now promote entries in the LRU, and eviction Close messages are deferred until the batch completes. Statements stay alive on PostgreSQL for the duration of the batch; cleanup runs after Sync. If the client disconnects before Sync, stale state is cleared via DEALLOCATE ALL on connection checkin.