-
Notifications
You must be signed in to change notification settings - Fork 94
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ PECO-2065 ] Create the async execution flow for the PySQL Connector #463
base: main
Are you sure you want to change the base?
Conversation
Thanks for your contribution! To satisfy the DCO policy in our contributing guide every commit message must include a sign-off message. One or more of your commits is missing this message. You can reword previous commit messages with an interactive rebase ( |
… invalid operation handle still persists
Thanks for your contribution! To satisfy the DCO policy in our contributing guide every commit message must include a sign-off message. One or more of your commits is missing this message. You can reword previous commit messages with an interactive rebase ( |
Thanks for your contribution! To satisfy the DCO policy in our contributing guide every commit message must include a sign-off message. One or more of your commits is missing this message. You can reword previous commit messages with an interactive rebase ( |
Thanks for your contribution! To satisfy the DCO policy in our contributing guide every commit message must include a sign-off message. One or more of your commits is missing this message. You can reword previous commit messages with an interactive rebase ( |
Thanks for your contribution! To satisfy the DCO policy in our contributing guide every commit message must include a sign-off message. One or more of your commits is missing this message. You can reword previous commit messages with an interactive rebase ( |
@@ -733,6 +733,7 @@ def execute( | |||
self, | |||
operation: str, | |||
parameters: Optional[TParameterCollection] = None, | |||
async_op=False, | |||
) -> "Cursor": | |||
""" | |||
Execute a query and wait for execution to complete. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please also update the description of the method if it supports async_op
or rename this method to private e.g. _execute
and keep execute
as sync.
@@ -812,6 +815,44 @@ def execute( | |||
|
|||
return self | |||
|
|||
def execute_async( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please include the method parameter doc and description as execute
and include the return type in the method signature
): | ||
return self.execute(operation, parameters, True) | ||
|
||
def get_query_state(self): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please include the method parameter doc and description as execute and include the return type in the method signature. e.g. -> "TOperationState":
cursor.execute_async(long_running_query) | ||
|
||
## Polling | ||
while isExecuting(cursor.get_query_state()): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please add polling interval
@@ -1119,7 +1161,7 @@ def __init__( | |||
self._arrow_schema_bytes = execute_response.arrow_schema_bytes | |||
self._next_row_index = 0 | |||
|
|||
if execute_response.arrow_queue: | |||
if execute_response.arrow_queue or async_op: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why async_op depends on arrow? What if pyarrow is not installed
@@ -796,13 +797,15 @@ def execute( | |||
cursor=self, | |||
use_cloud_fetch=self.connection.use_cloud_fetch, | |||
parameters=prepared_params, | |||
async_op=async_op, | |||
) | |||
self.active_result_set = ResultSet( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
result set is not ready yet when async_op is True
, why do you set this? It should be set in theget_execution_result
Description
Implementing the flow for the asynchronous execution of the execute command
Functions added
execute_async
This is the main command that will be used to execute the query, otherwise the syntax is identical to the existing execute function
get_query_state
This function is used for the purpose of polling the status of the query, to know what is the status of execution
get_execution_result
This function is used to fetch the results that have been completed and then populate the ResultSet. The flow of handling the ResultSet onwards is the same
Testing Details
Added Integration tests