Conversation
Building an ExecuteSqlRequest through proto-plus costs about 14 us per query, because every keyword argument goes through a descriptor lookup and type coercion. The new _make_execute_sql_request() helper builds the request on the underlying protobuf message and wraps it, which takes 2 us. The helper lives in _helpers.py so the sync and async snapshots share one copy. Behaviour is unchanged: the tests compare both the message and its serialized bytes against the proto-plus constructor. The sync snapshot.py hunk was mirrored by hand, since regenerating that file today would delete unrelated live code. I will open a separate PR to fix that existing error.
Contributor
There was a problem hiding this comment.
Code Review
This pull request optimizes query execution performance by introducing a fast builder helper, _make_execute_sql_request, which constructs ExecuteSqlRequest directly on the underlying protobuf message to bypass proto-plus overhead. This helper is integrated into both the synchronous and asynchronous execute_sql methods, and comprehensive unit tests are added. Feedback on the changes suggests explicitly checking if param_types is not None instead of if param_types to prevent an empty dictionary from being treated as falsy, ensuring consistent behavior with the proto-plus constructor.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Building an ExecuteSqlRequest through proto-plus costs about 14 us per query, because every keyword argument goes through a descriptor lookup and type coercion. The new _make_execute_sql_request() helper builds the request on the underlying protobuf message and wraps it, which takes 2 us.
The helper lives in _helpers.py so the sync and async snapshots share one copy. Behaviour is unchanged: the tests compare both the message and its serialized bytes against the proto-plus constructor.
The sync snapshot.py hunk was mirrored by hand, since regenerating that file today would delete unrelated live code. I will open a separate PR to fix that existing error.