e6data-python-connector 2.3.10rc1__tar.gz → 2.3.10rc3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. {e6data_python_connector-2.3.10rc1/e6data_python_connector.egg-info → e6data_python_connector-2.3.10rc3}/PKG-INFO +2 -2
  2. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/README.md +1 -1
  3. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/e6data_grpc.py +34 -19
  4. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3/e6data_python_connector.egg-info}/PKG-INFO +2 -2
  5. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/setup.py +1 -1
  6. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/LICENSE +0 -0
  7. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/MANIFEST.in +0 -0
  8. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/__init__.py +0 -0
  9. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/cluster_manager.py +0 -0
  10. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/cluster_server/__init__.py +0 -0
  11. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/cluster_server/cluster_pb2.py +0 -0
  12. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/cluster_server/cluster_pb2_grpc.py +0 -0
  13. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/common.py +0 -0
  14. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/constants.py +0 -0
  15. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/datainputstream.py +0 -0
  16. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/date_time_utils.py +0 -0
  17. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/dialect.py +0 -0
  18. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/e6x_vector/__init__.py +0 -0
  19. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/e6x_vector/constants.py +0 -0
  20. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/e6x_vector/ttypes.py +0 -0
  21. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/exceptions.py +0 -0
  22. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/server/QueryEngineService.py +0 -0
  23. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/server/__init__.py +0 -0
  24. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/server/constants.py +0 -0
  25. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/server/e6x_engine_pb2.py +0 -0
  26. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/server/e6x_engine_pb2.pyi +0 -0
  27. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/server/e6x_engine_pb2_grpc.py +0 -0
  28. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/server/ttypes.py +0 -0
  29. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/strategy.py +0 -0
  30. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector/typeId.py +0 -0
  31. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector.egg-info/SOURCES.txt +0 -0
  32. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector.egg-info/dependency_links.txt +0 -0
  33. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector.egg-info/entry_points.txt +0 -0
  34. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector.egg-info/requires.txt +0 -0
  35. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/e6data_python_connector.egg-info/top_level.txt +0 -0
  36. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/pyproject.toml +0 -0
  37. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/setup.cfg +0 -0
  38. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/__init__.py +0 -0
  39. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/analyze_38_nines.py +0 -0
  40. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/analyze_all_cases.py +0 -0
  41. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/analyze_binary.py +0 -0
  42. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/analyze_correct_value.py +0 -0
  43. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/analyze_fields.py +0 -0
  44. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/check_decimal_errors.py +0 -0
  45. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/cleanup_test_files.py +0 -0
  46. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/debug_38_nines.py +0 -0
  47. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/debug_binary.py +0 -0
  48. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/final_test.py +0 -0
  49. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/move_tests.py +0 -0
  50. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/quick_test.py +0 -0
  51. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_38_nines.py +0 -0
  52. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_all_decimal128_cases.py +0 -0
  53. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_cluster_manager_efficiency.py +0 -0
  54. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_cluster_manager_none_strategy.py +0 -0
  55. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_cluster_manager_strategy.py +0 -0
  56. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_comprehensive.py +0 -0
  57. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_current_implementation.py +0 -0
  58. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_decimal128_binary_parsing.py +0 -0
  59. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_decimal128_parsing.py +0 -0
  60. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_fix.py +0 -0
  61. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_improved_parsing.py +0 -0
  62. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_known_case.py +0 -0
  63. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_manual_analysis.py +0 -0
  64. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_mock_server.py +0 -0
  65. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_multiprocessing_fix.py +0 -0
  66. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_new_implementation.py +0 -0
  67. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_specific_binary.py +0 -0
  68. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_strategy.py +0 -0
  69. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_strategy_logic.py +0 -0
  70. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_strategy_persistence_fix.py +0 -0
  71. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_strategy_sharing_fix.py +0 -0
  72. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/test_user_binary_value.py +0 -0
  73. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/tests.py +0 -0
  74. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/tests_grpc.py +0 -0
  75. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/validate_decimal128.py +0 -0
  76. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/validate_implementation.py +0 -0
  77. {e6data_python_connector-2.3.10rc1 → e6data_python_connector-2.3.10rc3}/test/verify_decimal_fix.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: e6data-python-connector
3
- Version: 2.3.10rc1
3
+ Version: 2.3.10rc3
4
4
  Summary: Client for the e6data distributed SQL Engine.
5
5
  Home-page: https://github.com/e6x-labs/e6data-python-connector
6
6
  Author: e6data, Inc.
@@ -38,7 +38,7 @@ Dynamic: summary
38
38
 
39
39
  # e6data Python Connector
40
40
 
41
- ![version](https://img.shields.io/badge/version-2.3.10,rc1-blue.svg)
41
+ ![version](https://img.shields.io/badge/version-2.3.10,rc3-blue.svg)
42
42
 
43
43
  ## Introduction
44
44
 
@@ -1,6 +1,6 @@
1
1
  # e6data Python Connector
2
2
 
3
- ![version](https://img.shields.io/badge/version-2.3.10,rc1-blue.svg)
3
+ ![version](https://img.shields.io/badge/version-2.3.10,rc3-blue.svg)
4
4
 
5
5
  ## Introduction
6
6
 
@@ -14,7 +14,6 @@ from decimal import Decimal
14
14
  from io import BytesIO
15
15
  from ssl import CERT_NONE, CERT_OPTIONAL, CERT_REQUIRED
16
16
  import threading
17
- import multiprocessing
18
17
 
19
18
  import grpc
20
19
  from grpc._channel import _InactiveRpcError
@@ -26,6 +25,9 @@ from e6data_python_connector.constants import *
26
25
  from e6data_python_connector.datainputstream import get_query_columns_info, read_rows_from_chunk
27
26
  from e6data_python_connector.server import e6x_engine_pb2_grpc, e6x_engine_pb2
28
27
  from e6data_python_connector.typeId import *
28
+ import logging
29
+
30
+ _logger = logging.getLogger(__name__)
29
31
 
30
32
  apilevel = '2.0'
31
33
  threadsafety = 2 # Threads may share the e6xdb and connections.
@@ -134,7 +136,7 @@ _debug_connections = set()
134
136
  def _strategy_debug_log(message):
135
137
  """Log strategy debug messages if any connection has debug enabled."""
136
138
  if _debug_connections:
137
- print(f"[E6DATA_STRATEGY_DEBUG] {time.strftime('%Y-%m-%d %H:%M:%S')} - {message}")
139
+ _logger.debug(f"[E6DATA_STRATEGY_DEBUG] {time.strftime('%Y-%m-%d %H:%M:%S')} - {message}")
138
140
 
139
141
 
140
142
  def _get_shared_strategy():
@@ -241,7 +243,7 @@ def _invalidate_all_sessions():
241
243
  shared_strategy['session_invalidated'] = True
242
244
 
243
245
 
244
- def _register_query_strategy(query_id, strategy):
246
+ def _register_query_strategy(query_id, strategy, session_id=None):
245
247
  """Register the strategy used for a specific query."""
246
248
  if not query_id or not strategy:
247
249
  return
@@ -255,7 +257,8 @@ def _register_query_strategy(query_id, strategy):
255
257
  query_map = shared_strategy.get('query_strategy_map', {})
256
258
  query_map[query_id] = normalized_strategy
257
259
  shared_strategy['query_strategy_map'] = query_map
258
- _strategy_debug_log(f"Query {query_id} registered with strategy: {normalized_strategy}")
260
+ session_info = f", session: {session_id}" if session_id else ""
261
+ _strategy_debug_log(f"Query {query_id} registered with strategy: {normalized_strategy}{session_info}")
259
262
 
260
263
 
261
264
  def _get_query_strategy(query_id):
@@ -269,7 +272,7 @@ def _get_query_strategy(query_id):
269
272
  return query_map.get(query_id, current_active_strategy)
270
273
 
271
274
 
272
- def _cleanup_query_strategy(query_id):
275
+ def _cleanup_query_strategy(query_id, session_id=None):
273
276
  """Remove the strategy mapping for a completed query."""
274
277
  if not query_id:
275
278
  return
@@ -281,7 +284,8 @@ def _cleanup_query_strategy(query_id):
281
284
  del query_map[query_id]
282
285
  shared_strategy['query_strategy_map'] = query_map
283
286
  remaining_queries = len(query_map)
284
- _strategy_debug_log(f"Query {query_id} completed (was using {strategy}). Remaining active queries: {remaining_queries}")
287
+ session_info = f", session: {session_id}" if session_id else ""
288
+ _strategy_debug_log(f"Query {query_id} completed (was using {strategy}{session_info}). Remaining active queries: {remaining_queries}")
285
289
 
286
290
 
287
291
  def _get_strategy_debug_info():
@@ -516,9 +520,11 @@ class Connection(object):
516
520
  # Check if session strategy matches current active strategy
517
521
  elif self._session_id and self._session_strategy and self._session_strategy != _get_active_strategy():
518
522
  # Session was created with different strategy, need to re-authenticate
519
- _strategy_debug_log(f"Session strategy mismatch: session created with {self._session_strategy}, current active is {_get_active_strategy()}")
523
+ _strategy_debug_log(f"Session strategy mismatch: session {self._session_id} created with {self._session_strategy}, current active is {_get_active_strategy()}")
524
+ old_session_id = self._session_id
520
525
  self._session_id = None
521
526
  self._session_strategy = None
527
+ _strategy_debug_log(f"Invalidating session {old_session_id} due to strategy mismatch")
522
528
  self.close()
523
529
  self._create_client()
524
530
 
@@ -536,7 +542,7 @@ class Connection(object):
536
542
 
537
543
  if active_strategy and not pending_strategy:
538
544
  # Use cached strategy only if there's no pending strategy
539
- _strategy_debug_log(f"Authenticating with cached strategy: {active_strategy}")
545
+ _strategy_debug_log(f"Authenticating with cached strategy: {active_strategy} (session: {self._session_id})")
540
546
  try:
541
547
  authenticate_response = self._client.authenticate(
542
548
  authenticate_request,
@@ -547,21 +553,25 @@ class Connection(object):
547
553
  raise ValueError("Invalid credentials.")
548
554
  # Track which strategy was used for this session
549
555
  self._session_strategy = active_strategy
556
+ _strategy_debug_log(f"Authentication successful with strategy: {active_strategy}, session: {self._session_id}")
550
557
  # Check for new strategy in authenticate response
551
558
  if hasattr(authenticate_response, 'new_strategy') and authenticate_response.new_strategy:
552
559
  new_strategy = authenticate_response.new_strategy.lower()
553
560
  if new_strategy != active_strategy:
561
+ _strategy_debug_log(f"Strategy changed from {active_strategy} to {new_strategy} in authenticate response, session: {self._session_id}")
554
562
  _set_pending_strategy(new_strategy)
555
563
  _apply_pending_strategy()
564
+ old_session_id = self._session_id
556
565
  self._session_id = None
557
566
  self._session_strategy = None
567
+ _strategy_debug_log(f"Resetting session {old_session_id} due to new strategy: {new_strategy}")
558
568
  self.close()
559
569
  self._create_client()
560
570
  return self.get_session_id
561
571
  except _InactiveRpcError as e:
562
572
  if e.code() == grpc.StatusCode.UNKNOWN and 'status: 456' in e.details():
563
573
  # Strategy changed, clear cache and retry
564
- _strategy_debug_log(f"Got 456 error with strategy {active_strategy}, clearing cache and retrying")
574
+ _strategy_debug_log(f"Got 456 error with strategy {active_strategy}, session: {self._session_id}, clearing cache and retrying")
565
575
  _clear_strategy_cache()
566
576
  active_strategy = None
567
577
  else:
@@ -583,7 +593,7 @@ class Connection(object):
583
593
  _strategy_debug_log(f"No cached strategy, will try strategies in order: {strategies}")
584
594
  last_error = None
585
595
  for strategy in strategies:
586
- _strategy_debug_log(f"Attempting authentication with strategy: {strategy}")
596
+ _strategy_debug_log(f"Attempting authentication with strategy: {strategy} (no session yet)")
587
597
  try:
588
598
  authenticate_response = self._client.authenticate(
589
599
  authenticate_request,
@@ -592,7 +602,7 @@ class Connection(object):
592
602
  self._session_id = authenticate_response.sessionId
593
603
  if self._session_id:
594
604
  # Success! Cache this strategy
595
- _strategy_debug_log(f"Authentication successful with strategy: {strategy}")
605
+ _strategy_debug_log(f"Authentication successful with strategy: {strategy}, session: {self._session_id}")
596
606
  _set_active_strategy(strategy)
597
607
  # Track which strategy was used for this session
598
608
  self._session_strategy = strategy
@@ -601,9 +611,12 @@ class Connection(object):
601
611
  if hasattr(authenticate_response, 'new_strategy') and authenticate_response.new_strategy:
602
612
  new_strategy = authenticate_response.new_strategy.lower()
603
613
  if new_strategy != strategy:
614
+ _strategy_debug_log(f"Strategy changed from {strategy} to {new_strategy} in authenticate response, session: {self._session_id}")
604
615
  _set_pending_strategy(new_strategy)
605
616
  _apply_pending_strategy()
617
+ old_session_id = self._session_id
606
618
  self.close()
619
+ _strategy_debug_log(f"Resetting session {old_session_id} due to new strategy: {new_strategy}")
607
620
  self._create_client()
608
621
  self._session_id = None
609
622
  self._session_strategy = None
@@ -612,7 +625,7 @@ class Connection(object):
612
625
  except _InactiveRpcError as e:
613
626
  if e.code() == grpc.StatusCode.UNKNOWN and 'status: 456' in e.details():
614
627
  # Wrong strategy, try the next one
615
- _strategy_debug_log(f"Strategy {strategy} failed with 456 error, trying next")
628
+ _strategy_debug_log(f"Strategy {strategy} failed with 456 error (session attempt failed), trying next")
616
629
  last_error = e
617
630
  continue
618
631
  else:
@@ -680,6 +693,7 @@ class Connection(object):
680
693
 
681
694
  This method ensures that the gRPC channel is properly closed and the session ID is reset to None.
682
695
  """
696
+ old_session = self._session_id
683
697
  if self._channel is not None:
684
698
  self._channel.close()
685
699
  self._channel = None
@@ -689,7 +703,8 @@ class Connection(object):
689
703
  # Remove from debug connections if debug was enabled
690
704
  if self._debug:
691
705
  _debug_connections.discard(id(self))
692
- _strategy_debug_log(f"Debug mode disabled for connection {id(self)}")
706
+ session_info = f", session was: {old_session}" if old_session else ""
707
+ _strategy_debug_log(f"Debug mode disabled for connection {id(self)}{session_info}")
693
708
 
694
709
  def check_connection(self):
695
710
  """
@@ -1134,7 +1149,7 @@ class Cursor(DBAPICursor):
1134
1149
 
1135
1150
  # Clean up query strategy mapping
1136
1151
  if query_id:
1137
- _cleanup_query_strategy(query_id)
1152
+ _cleanup_query_strategy(query_id, self.connection.get_session_id)
1138
1153
 
1139
1154
  # Check if this was the last query and we have a pending strategy
1140
1155
  shared_strategy = _get_shared_strategy()
@@ -1142,7 +1157,7 @@ class Cursor(DBAPICursor):
1142
1157
  query_map = shared_strategy.get('query_strategy_map', {})
1143
1158
 
1144
1159
  if pending_strategy and len(query_map) == 0:
1145
- _strategy_debug_log(f"Last query cleared, triggering pending strategy transition")
1160
+ _strategy_debug_log(f"Last query cleared for session {self.connection.get_session_id}, triggering pending strategy transition from {_get_active_strategy()} to {pending_strategy}")
1146
1161
  _apply_pending_strategy()
1147
1162
 
1148
1163
  return clear_response
@@ -1158,7 +1173,7 @@ class Cursor(DBAPICursor):
1158
1173
  self.connection.query_cancel(engine_ip=self._engine_ip, query_id=query_id)
1159
1174
 
1160
1175
  if query_id:
1161
- _cleanup_query_strategy(query_id)
1176
+ _cleanup_query_strategy(query_id, self.connection.get_session_id)
1162
1177
 
1163
1178
  # Check if this was the last query and we have a pending strategy
1164
1179
  shared_strategy = _get_shared_strategy()
@@ -1166,7 +1181,7 @@ class Cursor(DBAPICursor):
1166
1181
  query_map = shared_strategy.get('query_strategy_map', {})
1167
1182
 
1168
1183
  if pending_strategy and len(query_map) == 0:
1169
- _strategy_debug_log(f"Last query cleared, triggering pending strategy transition")
1184
+ _strategy_debug_log(f"Last query cleared for session {self.connection.get_session_id}, triggering pending strategy transition from {_get_active_strategy()} to {pending_strategy}")
1170
1185
  _apply_pending_strategy()
1171
1186
 
1172
1187
  def status(self, query_id):
@@ -1240,7 +1255,7 @@ class Cursor(DBAPICursor):
1240
1255
  # Register this query with the current strategy
1241
1256
  current_strategy = _get_active_strategy()
1242
1257
  if current_strategy:
1243
- _register_query_strategy(self._query_id, current_strategy)
1258
+ _register_query_strategy(self._query_id, current_strategy, self.connection.get_session_id)
1244
1259
 
1245
1260
  execute_statement_request = e6x_engine_pb2.ExecuteStatementRequest(
1246
1261
  engineIP=self._engine_ip,
@@ -1287,7 +1302,7 @@ class Cursor(DBAPICursor):
1287
1302
  current_strategy = _get_active_strategy()
1288
1303
 
1289
1304
  if current_strategy:
1290
- _register_query_strategy(self._query_id, current_strategy)
1305
+ _register_query_strategy(self._query_id, current_strategy, self.connection.get_session_id)
1291
1306
 
1292
1307
  execute_statement_request = e6x_engine_pb2.ExecuteStatementV2Request(
1293
1308
  engineIP=self._engine_ip,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: e6data-python-connector
3
- Version: 2.3.10rc1
3
+ Version: 2.3.10rc3
4
4
  Summary: Client for the e6data distributed SQL Engine.
5
5
  Home-page: https://github.com/e6x-labs/e6data-python-connector
6
6
  Author: e6data, Inc.
@@ -38,7 +38,7 @@ Dynamic: summary
38
38
 
39
39
  # e6data Python Connector
40
40
 
41
- ![version](https://img.shields.io/badge/version-2.3.10,rc1-blue.svg)
41
+ ![version](https://img.shields.io/badge/version-2.3.10,rc3-blue.svg)
42
42
 
43
43
  ## Introduction
44
44
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  import setuptools
14
14
 
15
- VERSION = (2, 3, 10, 'rc1')
15
+ VERSION = (2, 3, 10, 'rc3')
16
16
 
17
17
 
18
18
  def get_long_desc():