e6data-python-connector 2.3.12rc2__tar.gz → 2.3.12rc11__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 (87) hide show
  1. {e6data_python_connector-2.3.12rc2/e6data_python_connector.egg-info → e6data_python_connector-2.3.12rc11}/PKG-INFO +2 -2
  2. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/README.md +1 -1
  3. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/e6data_grpc.py +54 -15
  4. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11/e6data_python_connector.egg-info}/PKG-INFO +2 -2
  5. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/setup.py +1 -1
  6. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/LICENSE +0 -0
  7. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/MANIFEST.in +0 -0
  8. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/__init__.py +0 -0
  9. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/cluster_manager.py +0 -0
  10. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/cluster_server/__init__.py +0 -0
  11. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/cluster_server/cluster_pb2.py +0 -0
  12. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/cluster_server/cluster_pb2_grpc.py +0 -0
  13. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/common.py +0 -0
  14. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/connection_pool.py +0 -0
  15. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/constants.py +0 -0
  16. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/datainputstream.py +0 -0
  17. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/date_time_utils.py +0 -0
  18. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/dialect.py +0 -0
  19. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/e6x_vector/__init__.py +0 -0
  20. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/e6x_vector/constants.py +0 -0
  21. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/e6x_vector/ttypes.py +0 -0
  22. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/exceptions.py +0 -0
  23. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/server/QueryEngineService.py +0 -0
  24. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/server/__init__.py +0 -0
  25. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/server/constants.py +0 -0
  26. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/server/e6x_engine_pb2.py +0 -0
  27. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/server/e6x_engine_pb2.pyi +0 -0
  28. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/server/e6x_engine_pb2_grpc.py +0 -0
  29. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/server/ttypes.py +0 -0
  30. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/strategy.py +0 -0
  31. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector/typeId.py +0 -0
  32. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector.egg-info/SOURCES.txt +0 -0
  33. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector.egg-info/dependency_links.txt +0 -0
  34. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector.egg-info/entry_points.txt +0 -0
  35. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector.egg-info/requires.txt +0 -0
  36. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/e6data_python_connector.egg-info/top_level.txt +0 -0
  37. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/gen-py/__init__.py +0 -0
  38. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/gen-py/e6x_vector/__init__.py +0 -0
  39. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/gen-py/e6x_vector/constants.py +0 -0
  40. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/gen-py/e6x_vector/ttypes.py +0 -0
  41. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/pyproject.toml +0 -0
  42. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/setup.cfg +0 -0
  43. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/__init__.py +0 -0
  44. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/analyze_38_nines.py +0 -0
  45. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/analyze_all_cases.py +0 -0
  46. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/analyze_binary.py +0 -0
  47. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/analyze_correct_value.py +0 -0
  48. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/analyze_fields.py +0 -0
  49. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/check_decimal_errors.py +0 -0
  50. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/cleanup_test_files.py +0 -0
  51. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/debug_38_nines.py +0 -0
  52. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/debug_binary.py +0 -0
  53. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/final_test.py +0 -0
  54. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/move_tests.py +0 -0
  55. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/quick_test.py +0 -0
  56. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_38_nines.py +0 -0
  57. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_all_decimal128_cases.py +0 -0
  58. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_cluster_manager_efficiency.py +0 -0
  59. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_cluster_manager_none_strategy.py +0 -0
  60. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_cluster_manager_strategy.py +0 -0
  61. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_comprehensive.py +0 -0
  62. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_connection_pool.py +0 -0
  63. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_connection_pool_e2e.py +0 -0
  64. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_current_implementation.py +0 -0
  65. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_decimal128_binary_parsing.py +0 -0
  66. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_decimal128_parsing.py +0 -0
  67. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_fix.py +0 -0
  68. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_improved_parsing.py +0 -0
  69. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_known_case.py +0 -0
  70. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_manual_analysis.py +0 -0
  71. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_mock_server.py +0 -0
  72. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_multiprocessing_fix.py +0 -0
  73. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_new_implementation.py +0 -0
  74. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_pool_concurrency_simple.py +0 -0
  75. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_pool_threading_multiprocessing.py +0 -0
  76. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_simple_connection_pool.py +0 -0
  77. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_specific_binary.py +0 -0
  78. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_strategy.py +0 -0
  79. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_strategy_logic.py +0 -0
  80. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_strategy_persistence_fix.py +0 -0
  81. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_strategy_sharing_fix.py +0 -0
  82. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/test_user_binary_value.py +0 -0
  83. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/tests.py +0 -0
  84. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/tests_grpc.py +0 -0
  85. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/validate_decimal128.py +0 -0
  86. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/test/validate_implementation.py +0 -0
  87. {e6data_python_connector-2.3.12rc2 → e6data_python_connector-2.3.12rc11}/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.12rc2
3
+ Version: 2.3.12rc11
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.
@@ -39,7 +39,7 @@ Dynamic: summary
39
39
 
40
40
  # e6data Python Connector
41
41
 
42
- ![version](https://img.shields.io/badge/version-2.3.12rc2-blue.svg)
42
+ ![version](https://img.shields.io/badge/version-2.3.12rc11-blue.svg)
43
43
 
44
44
  ## Introduction
45
45
 
@@ -1,6 +1,6 @@
1
1
  # e6data Python Connector
2
2
 
3
- ![version](https://img.shields.io/badge/version-2.3.12rc2-blue.svg)
3
+ ![version](https://img.shields.io/badge/version-2.3.12rc11-blue.svg)
4
4
 
5
5
  ## Introduction
6
6
 
@@ -388,7 +388,6 @@ class Connection(object):
388
388
  self._auto_resume = auto_resume
389
389
 
390
390
  self._grpc_options = grpc_options
391
-
392
391
  if self._grpc_options is None:
393
392
  self._grpc_options = dict()
394
393
  self.grpc_prepare_timeout = self._grpc_options.get('grpc_prepare_timeout') or 10 * 60 # 10 minutes
@@ -398,15 +397,7 @@ class Connection(object):
398
397
  The default maximum time on client side to wait for the cluster to resume is 5 minutes.
399
398
  """
400
399
  self.grpc_auto_resume_timeout_seconds = self._grpc_options.pop('grpc_auto_resume_timeout_seconds')
401
-
402
- self.timeout = 500
403
- if 'timeout' in self._grpc_options:
404
- """
405
- The default maximum time on client side to wait for the cluster to resume is 5 minutes.
406
- """
407
- self.timeout = self._grpc_options.pop('timeout')
408
-
409
-
400
+
410
401
  # Store debug flag and register with debug connections
411
402
  self._debug = debug
412
403
  if self._debug:
@@ -862,6 +853,56 @@ class Connection(object):
862
853
  )
863
854
  return dry_run_response.dryrunValue
864
855
 
856
+ def get_logical_plan(self, query, catalog=None, schema=None):
857
+ """
858
+ Gets the logical execution plan for a query without executing it.
859
+ This method performs syntax, parsing, and plan compilation, then returns the logical plan.
860
+
861
+ Args:
862
+ query (str): The SQL query to get the plan for.
863
+ catalog (str, optional): Catalog name. Uses connection's catalog if not provided.
864
+ schema (str, optional): Schema/database name. Uses connection's database if not provided.
865
+
866
+ Returns:
867
+ dict: A dictionary with:
868
+ - 'success' (bool): True if plan generation succeeded, False otherwise
869
+ - 'plan' (str, optional): The logical plan string if successful
870
+ - 'error' (str, optional): Error message if plan generation failed
871
+
872
+ Example:
873
+ >>> result = conn.get_logical_plan("SELECT * FROM table")
874
+ >>> if result['success']:
875
+ ... print(f"Plan: {result['plan']}")
876
+ >>> else:
877
+ ... print(f"Error: {result['error']}")
878
+ """
879
+ catalog_to_use = catalog if catalog is not None else self.catalog_name
880
+ schema_to_use = schema if schema is not None else self.database
881
+
882
+ try:
883
+ dry_run_request = e6x_engine_pb2.DryRunRequestV2(
884
+ sessionId=self.get_session_id,
885
+ schema=schema_to_use,
886
+ catalog=catalog_to_use,
887
+ queryString=query
888
+ )
889
+
890
+ dry_run_response = self._client.dryRunV2(
891
+ dry_run_request,
892
+ metadata=_get_grpc_header(cluster=self.cluster_name, strategy=_get_active_strategy())
893
+ )
894
+
895
+ return {
896
+ 'success': True,
897
+ 'plan': dry_run_response.dryrunValue
898
+ }
899
+
900
+ except Exception as e:
901
+ return {
902
+ 'success': False,
903
+ 'error': str(e)
904
+ }
905
+
865
906
  def get_tables(self, catalog, database):
866
907
  """
867
908
  Retrieves the list of tables from the specified catalog and database.
@@ -1343,8 +1384,7 @@ class Cursor(DBAPICursor):
1343
1384
  client = self.connection.client
1344
1385
  execute_response = client.executeStatementV2(
1345
1386
  execute_statement_request,
1346
- metadata=self.metadata,
1347
- timeout=self.connection.timeout
1387
+ metadata=self.metadata
1348
1388
  )
1349
1389
 
1350
1390
  # Check for new strategy in execute response
@@ -1453,14 +1493,13 @@ class Cursor(DBAPICursor):
1453
1493
  get_next_result_batch_request = e6x_engine_pb2.GetNextResultBatchRequest(
1454
1494
  engineIP=self._engine_ip,
1455
1495
  sessionId=self.connection.get_session_id,
1456
- queryId=self._query_id,
1496
+ queryId=self._query_id
1457
1497
  )
1458
1498
  # Get fresh client after session access (may have been invalidated)
1459
1499
  client = self.connection.client
1460
1500
  get_next_result_batch_response = client.getNextResultBatch(
1461
1501
  get_next_result_batch_request,
1462
- metadata=self.metadata,
1463
- timeout=self.connection.timeout
1502
+ metadata=self.metadata
1464
1503
  )
1465
1504
 
1466
1505
  # Check for new strategy in batch response
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: e6data-python-connector
3
- Version: 2.3.12rc2
3
+ Version: 2.3.12rc11
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.
@@ -39,7 +39,7 @@ Dynamic: summary
39
39
 
40
40
  # e6data Python Connector
41
41
 
42
- ![version](https://img.shields.io/badge/version-2.3.12rc2-blue.svg)
42
+ ![version](https://img.shields.io/badge/version-2.3.12rc11-blue.svg)
43
43
 
44
44
  ## Introduction
45
45
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  import setuptools
14
14
 
15
- VERSION = (2, 3, 12, 'rc2',)
15
+ VERSION = (2, 3, 12,'rc11')
16
16
 
17
17
 
18
18
  def get_long_desc():