Add references from Client and Statement to each other #1048
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is to prevent out of order GC. Because GC of a Statement object generates server commands to release the statement, the client connection can be in the middle of some other operation like streaming a result set that doesn't allow other commands.
Add a new accessor
Client#prepared_statements
that returns the list of all outstanding statements. This is sort of a nice-to-have that falls out of having the Statement object references in the Client object.This is not a complete fix yet. It crashes under large numbers of objects. Also need to document if/why the list of Statements should be/not be freed when the Client connection is closed. I think the server will automatically release the prepared statements when the connection drops, but I'm not sure.
Fixes #1043.