You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Non-auto-commit connections hold an idle Hrana stream that sqld expires #99
setAutoCommit(false) begins a transaction immediately. commit() and rollback() begin the next one. An idle non-auto-commit connection therefore always holds a server stream.
IMPLEMENTATION_BUGS_AND_RESOLUTIONS.md records the sqld limits. Idle streams expire after 10 seconds. The server allows 128 concurrent streams.
Expected failure path:
Call setAutoCommit(false), then commit().
Wait more than 10 seconds so sqld expires the stream.
Run a statement. The driver sends the stale baton, and sendPipeline throws.
The driver does not clear the baton. rollback(), commit(), and setAutoCommit(true) send the same dead baton and fail.
Only close() recovers the connection. Before #64 the driver began the next transaction lazily, so idle time cost nothing. A pool that holds more than 128 idle non-auto-commit connections can also fill the stream pool and bring back the stall described in the same document.
No test covers this. The unit tests use a fake client, and TransactionLifecycleIT has no idle step.
Expected:
Begin the next transaction lazily, with a "begin pending" flag, so the observable semantics stay the same as sqlite-jdbc.
Or detect an expired stream or invalid baton, drop the baton, and report a clear connection-level error.
Add an integration test with an idle period longer than the server timeout.
Activity
docs(jdbc): document last_insert_rowid under the remote model (#83) (#…
test(jdbc): pin lazy-begin state after a failed BEGIN (#145)
docs: rewrite the transaction contract for lazy begin and mapped erro…