matrixone-python-sdk 0.1.0__py3-none-any.whl

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 (122) hide show
  1. matrixone/__init__.py +155 -0
  2. matrixone/account.py +723 -0
  3. matrixone/async_client.py +3913 -0
  4. matrixone/async_metadata_manager.py +311 -0
  5. matrixone/async_orm.py +123 -0
  6. matrixone/async_vector_index_manager.py +633 -0
  7. matrixone/base_client.py +208 -0
  8. matrixone/client.py +4672 -0
  9. matrixone/config.py +452 -0
  10. matrixone/connection_hooks.py +286 -0
  11. matrixone/exceptions.py +89 -0
  12. matrixone/logger.py +782 -0
  13. matrixone/metadata.py +820 -0
  14. matrixone/moctl.py +219 -0
  15. matrixone/orm.py +2277 -0
  16. matrixone/pitr.py +646 -0
  17. matrixone/pubsub.py +771 -0
  18. matrixone/restore.py +411 -0
  19. matrixone/search_vector_index.py +1176 -0
  20. matrixone/snapshot.py +550 -0
  21. matrixone/sql_builder.py +844 -0
  22. matrixone/sqlalchemy_ext/__init__.py +161 -0
  23. matrixone/sqlalchemy_ext/adapters.py +163 -0
  24. matrixone/sqlalchemy_ext/dialect.py +534 -0
  25. matrixone/sqlalchemy_ext/fulltext_index.py +895 -0
  26. matrixone/sqlalchemy_ext/fulltext_search.py +1686 -0
  27. matrixone/sqlalchemy_ext/hnsw_config.py +194 -0
  28. matrixone/sqlalchemy_ext/ivf_config.py +252 -0
  29. matrixone/sqlalchemy_ext/table_builder.py +351 -0
  30. matrixone/sqlalchemy_ext/vector_index.py +1721 -0
  31. matrixone/sqlalchemy_ext/vector_type.py +948 -0
  32. matrixone/version.py +580 -0
  33. matrixone_python_sdk-0.1.0.dist-info/METADATA +706 -0
  34. matrixone_python_sdk-0.1.0.dist-info/RECORD +122 -0
  35. matrixone_python_sdk-0.1.0.dist-info/WHEEL +5 -0
  36. matrixone_python_sdk-0.1.0.dist-info/entry_points.txt +5 -0
  37. matrixone_python_sdk-0.1.0.dist-info/licenses/LICENSE +200 -0
  38. matrixone_python_sdk-0.1.0.dist-info/top_level.txt +2 -0
  39. tests/__init__.py +19 -0
  40. tests/offline/__init__.py +20 -0
  41. tests/offline/conftest.py +77 -0
  42. tests/offline/test_account.py +703 -0
  43. tests/offline/test_async_client_query_comprehensive.py +1218 -0
  44. tests/offline/test_basic.py +54 -0
  45. tests/offline/test_case_sensitivity.py +227 -0
  46. tests/offline/test_connection_hooks_offline.py +287 -0
  47. tests/offline/test_dialect_schema_handling.py +609 -0
  48. tests/offline/test_explain_methods.py +346 -0
  49. tests/offline/test_filter_logical_in.py +237 -0
  50. tests/offline/test_fulltext_search_comprehensive.py +795 -0
  51. tests/offline/test_ivf_config.py +249 -0
  52. tests/offline/test_join_methods.py +281 -0
  53. tests/offline/test_join_sqlalchemy_compatibility.py +276 -0
  54. tests/offline/test_logical_in_method.py +237 -0
  55. tests/offline/test_matrixone_version_parsing.py +264 -0
  56. tests/offline/test_metadata_offline.py +557 -0
  57. tests/offline/test_moctl.py +300 -0
  58. tests/offline/test_moctl_simple.py +251 -0
  59. tests/offline/test_model_support_offline.py +359 -0
  60. tests/offline/test_model_support_simple.py +225 -0
  61. tests/offline/test_pinecone_filter_offline.py +377 -0
  62. tests/offline/test_pitr.py +585 -0
  63. tests/offline/test_pubsub.py +712 -0
  64. tests/offline/test_query_update.py +283 -0
  65. tests/offline/test_restore.py +445 -0
  66. tests/offline/test_snapshot_comprehensive.py +384 -0
  67. tests/offline/test_sql_escaping_edge_cases.py +551 -0
  68. tests/offline/test_sqlalchemy_integration.py +382 -0
  69. tests/offline/test_sqlalchemy_vector_integration.py +434 -0
  70. tests/offline/test_table_builder.py +198 -0
  71. tests/offline/test_unified_filter.py +398 -0
  72. tests/offline/test_unified_transaction.py +495 -0
  73. tests/offline/test_vector_index.py +238 -0
  74. tests/offline/test_vector_operations.py +688 -0
  75. tests/offline/test_vector_type.py +174 -0
  76. tests/offline/test_version_core.py +328 -0
  77. tests/offline/test_version_management.py +372 -0
  78. tests/offline/test_version_standalone.py +652 -0
  79. tests/online/__init__.py +20 -0
  80. tests/online/conftest.py +216 -0
  81. tests/online/test_account_management.py +194 -0
  82. tests/online/test_advanced_features.py +344 -0
  83. tests/online/test_async_client_interfaces.py +330 -0
  84. tests/online/test_async_client_online.py +285 -0
  85. tests/online/test_async_model_insert_online.py +293 -0
  86. tests/online/test_async_orm_online.py +300 -0
  87. tests/online/test_async_simple_query_online.py +802 -0
  88. tests/online/test_async_transaction_simple_query.py +300 -0
  89. tests/online/test_basic_connection.py +130 -0
  90. tests/online/test_client_online.py +238 -0
  91. tests/online/test_config.py +90 -0
  92. tests/online/test_config_validation.py +123 -0
  93. tests/online/test_connection_hooks_new_online.py +217 -0
  94. tests/online/test_dialect_schema_handling_online.py +331 -0
  95. tests/online/test_filter_logical_in_online.py +374 -0
  96. tests/online/test_fulltext_comprehensive.py +1773 -0
  97. tests/online/test_fulltext_label_online.py +433 -0
  98. tests/online/test_fulltext_search_online.py +842 -0
  99. tests/online/test_ivf_stats_online.py +506 -0
  100. tests/online/test_logger_integration.py +311 -0
  101. tests/online/test_matrixone_query_orm.py +540 -0
  102. tests/online/test_metadata_online.py +579 -0
  103. tests/online/test_model_insert_online.py +255 -0
  104. tests/online/test_mysql_driver_validation.py +213 -0
  105. tests/online/test_orm_advanced_features.py +2022 -0
  106. tests/online/test_orm_cte_integration.py +269 -0
  107. tests/online/test_orm_online.py +270 -0
  108. tests/online/test_pinecone_filter.py +708 -0
  109. tests/online/test_pubsub_operations.py +352 -0
  110. tests/online/test_query_methods.py +225 -0
  111. tests/online/test_query_update_online.py +433 -0
  112. tests/online/test_search_vector_index.py +557 -0
  113. tests/online/test_simple_fulltext_online.py +915 -0
  114. tests/online/test_snapshot_comprehensive.py +998 -0
  115. tests/online/test_sqlalchemy_engine_integration.py +336 -0
  116. tests/online/test_sqlalchemy_integration.py +425 -0
  117. tests/online/test_transaction_contexts.py +1219 -0
  118. tests/online/test_transaction_insert_methods.py +356 -0
  119. tests/online/test_transaction_query_methods.py +288 -0
  120. tests/online/test_unified_filter_online.py +529 -0
  121. tests/online/test_vector_comprehensive.py +706 -0
  122. tests/online/test_version_management.py +291 -0
matrixone/moctl.py ADDED
@@ -0,0 +1,219 @@
1
+ # Copyright 2021 - 2022 Matrix Origin
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ """
16
+ MatrixOne Control Operations (mo_ctl) Manager
17
+
18
+ Provides access to MatrixOne control operations that require sys tenant privileges.
19
+
20
+ IMPORTANT: All mo_ctl operations require 'sys' account privileges.
21
+ These operations cannot be executed with regular user accounts.
22
+
23
+ To use mo_ctl operations:
24
+ 1. Connect with 'sys' account (e.g., 'sys#root' or account='sys')
25
+ 2. Ensure proper administrative privileges
26
+ 3. Operations may require specific tenant permissions
27
+
28
+ Example connection with sys account:
29
+ client.connect(host, port, 'sys#root', password, database)
30
+ # or
31
+ client.connect(host, port, 'root', password, database, account='sys')
32
+ """
33
+
34
+ import json
35
+ from typing import Any, Dict
36
+
37
+ from .exceptions import MatrixOneError
38
+
39
+
40
+ class MoCtlError(MatrixOneError):
41
+ """Raised when mo_ctl operations fail"""
42
+
43
+ pass
44
+
45
+
46
+ class MoCtlManager:
47
+ """
48
+ Manager for MatrixOne control operations (mo_ctl).
49
+
50
+ This class provides access to MatrixOne's control operations through the
51
+ mo_ctl SQL function. It allows programmatic execution of various
52
+ MatrixOne administrative and maintenance operations.
53
+
54
+ ⚠️ CRITICAL REQUIREMENT: All mo_ctl operations require 'sys' account privileges.
55
+ These operations cannot be executed with regular user accounts.
56
+
57
+ Key Features:
58
+
59
+ - Programmatic access to mo_ctl commands
60
+ - Table flush operations for data persistence
61
+ - Checkpoint operations for data consistency
62
+ - Integration with MatrixOne client operations
63
+ - Error handling and result parsing
64
+
65
+ Supported Operations:
66
+
67
+ - Table flush operations (flush_table)
68
+ - Incremental checkpoints (increment_checkpoint)
69
+ - Global checkpoints (global_checkpoint)
70
+
71
+ Usage Examples:
72
+
73
+ # IMPORTANT: Connect with sys account first
74
+ client = Client()
75
+ client.connect(host, port, 'sys#root', password, database)
76
+
77
+ # Initialize mo_ctl manager
78
+ moctl = client.moctl
79
+
80
+ # Flush a specific table
81
+ result = moctl.flush_table("database_name", "table_name")
82
+
83
+ # Force incremental checkpoint
84
+ result = moctl.increment_checkpoint()
85
+
86
+ # Force global checkpoint
87
+ result = moctl.global_checkpoint()
88
+
89
+ Requirements:
90
+ - Must connect with 'sys' account (e.g., 'sys#root' or account='sys')
91
+ - Requires appropriate administrative privileges
92
+ - Operations may require specific tenant permissions
93
+
94
+ Note: If you get permission errors, ensure you're connected with sys account:
95
+ client.connect(host, port, 'sys#root', password, database)
96
+ # or
97
+ client.connect(host, port, 'root', password, database, account='sys')
98
+ """
99
+
100
+ def __init__(self, client):
101
+ """
102
+ Initialize MoCtlManager
103
+
104
+ Args:
105
+
106
+ client: MatrixOne client instance
107
+ """
108
+ self.client = client
109
+
110
+ def _execute_moctl(self, method: str, target: str, params: str = "") -> Dict[str, Any]:
111
+ """
112
+ Execute mo_ctl command
113
+
114
+ Args:
115
+
116
+ method: Control method (e.g., 'dn')
117
+ target: Target operation (e.g., 'flush', 'checkpoint')
118
+ params: Parameters for the operation
119
+
120
+ Returns:
121
+
122
+ Parsed result from mo_ctl command
123
+
124
+ Raises:
125
+
126
+ MoCtlError: If the operation fails
127
+ """
128
+ try:
129
+ # Build mo_ctl SQL command
130
+ if params:
131
+ sql = f"SELECT mo_ctl('{method}', '{target}', '{params}')"
132
+ else:
133
+ sql = f"SELECT mo_ctl('{method}', '{target}', '')"
134
+
135
+ # Execute the command
136
+ result = self.client.execute(sql)
137
+
138
+ if not result.rows:
139
+ raise MoCtlError(f"mo_ctl command returned no results: {sql}")
140
+
141
+ # Parse the JSON result
142
+ result_str = result.rows[0][0]
143
+ parsed_result = json.loads(result_str)
144
+
145
+ # Check for errors in the result
146
+ if "result" in parsed_result and parsed_result["result"]:
147
+ first_result = parsed_result["result"][0]
148
+ if "returnStr" in first_result and first_result["returnStr"] != "OK":
149
+ raise MoCtlError(f"mo_ctl operation failed: {first_result['returnStr']}")
150
+
151
+ return parsed_result
152
+
153
+ except json.JSONDecodeError as e:
154
+ raise MoCtlError(f"Failed to parse mo_ctl result: {e}")
155
+ except Exception as e:
156
+ raise MoCtlError(f"mo_ctl operation failed: {e}")
157
+
158
+ def flush_table(self, database: str, table: str) -> Dict[str, Any]:
159
+ """
160
+ Force flush table.
161
+
162
+ Force flush table `table` in database `database`. It returns after all blks in the table are flushed.
163
+
164
+ ⚠️ Requires 'sys' account privileges.
165
+
166
+ Args:
167
+
168
+ database: Database name
169
+ table: Table name
170
+
171
+ Returns:
172
+
173
+ Result of the flush operation
174
+
175
+ Example:
176
+
177
+ >>> client.moctl.flush_table('db1', 't')
178
+ {'method': 'Flush', 'result': [{'returnStr': 'OK'}]}
179
+ """
180
+ table_ref = f"{database}.{table}"
181
+ return self._execute_moctl("dn", "flush", table_ref)
182
+
183
+ def increment_checkpoint(self) -> Dict[str, Any]:
184
+ """
185
+ Force incremental checkpoint.
186
+
187
+ Flush all blks in DN, generate an Incremental Checkpoint and truncate WAL.
188
+
189
+ ⚠️ Requires 'sys' account privileges.
190
+
191
+ Returns:
192
+
193
+ Result of the incremental checkpoint operation
194
+
195
+ Example:
196
+
197
+ >>> client.moctl.increment_checkpoint()
198
+ {'method': 'Checkpoint', 'result': [{'returnStr': 'OK'}]}
199
+ """
200
+ return self._execute_moctl("dn", "checkpoint", "")
201
+
202
+ def global_checkpoint(self) -> Dict[str, Any]:
203
+ """
204
+ Force global checkpoint.
205
+
206
+ Generate a global checkpoint across all nodes.
207
+
208
+ ⚠️ Requires 'sys' account privileges.
209
+
210
+ Returns:
211
+
212
+ Result of the global checkpoint operation
213
+
214
+ Example:
215
+
216
+ >>> client.moctl.global_checkpoint()
217
+ {'method': 'GlobalCheckpoint', 'result': [{'returnStr': 'OK'}]}
218
+ """
219
+ return self._execute_moctl("dn", "globalcheckpoint", "")