singlestoredb 1.0.3__py3-none-any.whl → 1.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.

Potentially problematic release.


This version of singlestoredb might be problematic. Click here for more details.

Files changed (30) hide show
  1. singlestoredb/__init__.py +1 -1
  2. singlestoredb/config.py +125 -0
  3. singlestoredb/functions/dtypes.py +5 -198
  4. singlestoredb/functions/ext/__init__.py +0 -1
  5. singlestoredb/functions/ext/asgi.py +665 -153
  6. singlestoredb/functions/ext/json.py +2 -2
  7. singlestoredb/functions/ext/mmap.py +174 -67
  8. singlestoredb/functions/ext/rowdat_1.py +2 -2
  9. singlestoredb/functions/ext/utils.py +169 -0
  10. singlestoredb/fusion/handler.py +109 -9
  11. singlestoredb/fusion/handlers/stage.py +150 -0
  12. singlestoredb/fusion/handlers/workspace.py +265 -4
  13. singlestoredb/fusion/registry.py +69 -1
  14. singlestoredb/http/connection.py +40 -2
  15. singlestoredb/management/utils.py +30 -0
  16. singlestoredb/management/workspace.py +209 -35
  17. singlestoredb/mysql/connection.py +69 -0
  18. singlestoredb/mysql/cursors.py +176 -4
  19. singlestoredb/tests/test.sql +210 -0
  20. singlestoredb/tests/test_connection.py +1408 -0
  21. singlestoredb/tests/test_ext_func.py +2 -2
  22. singlestoredb/tests/test_ext_func_data.py +1 -1
  23. singlestoredb/utils/dtypes.py +205 -0
  24. singlestoredb/utils/results.py +367 -14
  25. {singlestoredb-1.0.3.dist-info → singlestoredb-1.1.0.dist-info}/METADATA +2 -1
  26. {singlestoredb-1.0.3.dist-info → singlestoredb-1.1.0.dist-info}/RECORD +30 -28
  27. {singlestoredb-1.0.3.dist-info → singlestoredb-1.1.0.dist-info}/LICENSE +0 -0
  28. {singlestoredb-1.0.3.dist-info → singlestoredb-1.1.0.dist-info}/WHEEL +0 -0
  29. {singlestoredb-1.0.3.dist-info → singlestoredb-1.1.0.dist-info}/entry_points.txt +0 -0
  30. {singlestoredb-1.0.3.dist-info → singlestoredb-1.1.0.dist-info}/top_level.txt +0 -0
@@ -11,22 +11,51 @@ from typing import Optional
11
11
  from typing import Tuple
12
12
  from typing import Union
13
13
 
14
+ from .dtypes import NUMPY_TYPE_MAP
15
+ from .dtypes import POLARS_TYPE_MAP
16
+ from .dtypes import PYARROW_TYPE_MAP
17
+
18
+ UNSIGNED_FLAG = 32
19
+ BINARY_FLAG = 128
20
+
21
+ try:
22
+ has_numpy = True
23
+ import numpy as np
24
+ except ImportError:
25
+ has_numpy = False
26
+
14
27
  try:
15
28
  has_pandas = True
16
- from pandas import DataFrame
29
+ import pandas as pd
17
30
  except ImportError:
18
31
  has_pandas = False
19
- DataFrame = Any
32
+
33
+ try:
34
+ has_polars = True
35
+ import polars as pl
36
+ except ImportError:
37
+ has_polars = False
38
+
39
+ try:
40
+ has_pyarrow = True
41
+ import pyarrow as pa
42
+ except ImportError:
43
+ has_pyarrow = False
20
44
 
21
45
  DBAPIResult = Union[List[Tuple[Any, ...]], Tuple[Any, ...]]
22
- OneResult = Union[Tuple[Any, ...], Dict[str, Any], DataFrame]
23
- ManyResult = Union[List[Tuple[Any, ...]], List[Dict[str, Any]], DataFrame]
46
+ OneResult = Union[
47
+ Tuple[Any, ...], Dict[str, Any],
48
+ 'np.ndarray', 'pd.DataFrame', 'pl.DataFrame', 'pa.Table',
49
+ ]
50
+ ManyResult = Union[
51
+ List[Tuple[Any, ...]], List[Dict[str, Any]],
52
+ 'np.ndarray', 'pd.DataFrame', 'pl.DataFrame', 'pa.Table',
53
+ ]
24
54
  Result = Union[OneResult, ManyResult]
25
55
 
26
56
 
27
57
  class Description(NamedTuple):
28
58
  """Column definition."""
29
-
30
59
  name: str
31
60
  type_code: int
32
61
  display_size: Optional[int]
@@ -38,13 +67,174 @@ class Description(NamedTuple):
38
67
  charset: Optional[int]
39
68
 
40
69
 
41
- def results_to_dataframe(
70
+ if has_numpy:
71
+ # If an int column is nullable, we need to use floats rather than
72
+ # ints for numpy and pandas.
73
+ NUMPY_TYPE_MAP_CAST_FLOAT = NUMPY_TYPE_MAP.copy()
74
+ NUMPY_TYPE_MAP_CAST_FLOAT.update({
75
+ 1: np.float32, # Tiny
76
+ -1: np.float32, # Unsigned Tiny
77
+ 2: np.float32, # Short
78
+ -2: np.float32, # Unsigned Short
79
+ 3: np.float64, # Long
80
+ -3: np.float64, # Unsigned Long
81
+ 8: np.float64, # LongLong
82
+ -8: np.float64, # Unsigned LongLong
83
+ 9: np.float64, # Int24
84
+ -9: np.float64, # Unsigned Int24
85
+ 13: np.float64, # Year
86
+ })
87
+
88
+ if has_polars:
89
+ # Remap date/times to strings; let polars do the parsing
90
+ POLARS_TYPE_MAP = POLARS_TYPE_MAP.copy()
91
+ POLARS_TYPE_MAP.update({
92
+ 7: pl.Utf8,
93
+ 10: pl.Utf8,
94
+ 12: pl.Utf8,
95
+ })
96
+
97
+
98
+ INT_TYPES = set([1, 2, 3, 8, 9])
99
+ CHAR_TYPES = set([15, 249, 250, 251, 252, 253, 254])
100
+ DECIMAL_TYPES = set([0, 246])
101
+
102
+
103
+ def signed(desc: Description) -> int:
104
+ if ((desc.flags or 0) & UNSIGNED_FLAG and desc.type_code in INT_TYPES) or \
105
+ (desc.charset == 63 and desc.type_code in CHAR_TYPES):
106
+ return -desc.type_code
107
+ return desc.type_code
108
+
109
+
110
+ def _description_to_numpy_schema(desc: List[Description]) -> Dict[str, Any]:
111
+ """Convert description to numpy array schema info."""
112
+ if has_numpy:
113
+ return dict(
114
+ dtype=[
115
+ (
116
+ x.name,
117
+ NUMPY_TYPE_MAP_CAST_FLOAT[signed(x)]
118
+ if x.null_ok else NUMPY_TYPE_MAP[signed(x)],
119
+ )
120
+ for x in desc
121
+ ],
122
+ )
123
+ return {}
124
+
125
+
126
+ def _description_to_pandas_schema(desc: List[Description]) -> Dict[str, Any]:
127
+ """Convert description to pandas DataFrame schema info."""
128
+ if has_pandas:
129
+ return dict(columns=[x.name for x in desc])
130
+ return {}
131
+
132
+
133
+ def _decimalize_polars(desc: Description) -> 'pl.Decimal':
134
+ return pl.Decimal(desc.precision or 10, desc.scale or 0)
135
+
136
+
137
+ def _description_to_polars_schema(desc: List[Description]) -> Dict[str, Any]:
138
+ """Convert description to polars DataFrame schema info."""
139
+ if has_polars:
140
+ with_columns = {}
141
+ for x in desc:
142
+ if x.type_code in [7, 12]:
143
+ if x.scale == 6:
144
+ with_columns[x.name] = pl.col(x.name).str.to_datetime(
145
+ '%Y-%m-%d %H:%M:%S.%6f', time_unit='us',
146
+ )
147
+ else:
148
+ with_columns[x.name] = pl.col(x.name).str.to_datetime(
149
+ '%Y-%m-%d %H:%M:%S', time_unit='us',
150
+ )
151
+ elif x.type_code == 10:
152
+ with_columns[x.name] = pl.col(x.name).str.to_date('%Y-%m-%d')
153
+
154
+ return dict(
155
+ schema=dict(
156
+ schema=[
157
+ (
158
+ x.name, _decimalize_polars(x)
159
+ if x.type_code in DECIMAL_TYPES else POLARS_TYPE_MAP[signed(x)],
160
+ )
161
+ for x in desc
162
+ ],
163
+ ),
164
+ with_columns=with_columns,
165
+ )
166
+ return {}
167
+
168
+
169
+ def _decimalize_arrow(desc: Description) -> 'pa.Decimal128':
170
+ return pa.decimal128(desc.precision or 10, desc.scale or 0)
171
+
172
+
173
+ def _description_to_arrow_schema(desc: List[Description]) -> Dict[str, Any]:
174
+ """Convert description to Arrow Table schema info."""
175
+ if has_pyarrow:
176
+ return dict(
177
+ schema=pa.schema([
178
+ (
179
+ x.name, _decimalize_arrow(x)
180
+ if x.type_code in DECIMAL_TYPES else PYARROW_TYPE_MAP[signed(x)],
181
+ )
182
+ for x in desc
183
+ ]),
184
+ )
185
+ return {}
186
+
187
+
188
+ def results_to_numpy(
189
+ desc: List[Description],
190
+ res: Optional[DBAPIResult],
191
+ single: Optional[bool] = False,
192
+ schema: Optional[Dict[str, Any]] = None,
193
+ ) -> Optional[Result]:
194
+ """
195
+ Convert results to numpy.
196
+
197
+ Parameters
198
+ ----------
199
+ desc : list of Descriptions
200
+ The column metadata
201
+ res : tuple or list of tuples
202
+ The query results
203
+ single : bool, optional
204
+ Is this a single result (i.e., from `fetchone`)?
205
+ schema : Dict[str, Any], optional
206
+ Cached schema for current output format
207
+
208
+ Returns
209
+ -------
210
+ numpy.array
211
+ If `numpy` is available
212
+ tuple or list of tuples
213
+ If `numpy` is not available
214
+
215
+ """
216
+ if not res:
217
+ return res
218
+ if has_numpy:
219
+ schema = _description_to_numpy_schema(desc) if schema is None else schema
220
+ if single:
221
+ return np.array([res], **schema)
222
+ return np.array(list(res), **schema)
223
+ warnings.warn(
224
+ 'numpy is not available; unable to convert to array',
225
+ RuntimeWarning,
226
+ )
227
+ return res
228
+
229
+
230
+ def results_to_pandas(
42
231
  desc: List[Description],
43
232
  res: Optional[DBAPIResult],
44
233
  single: Optional[bool] = False,
234
+ schema: Optional[Dict[str, Any]] = None,
45
235
  ) -> Optional[Result]:
46
236
  """
47
- Convert results to a DataFrame.
237
+ Convert results to pandas.
48
238
 
49
239
  Parameters
50
240
  ----------
@@ -54,6 +244,8 @@ def results_to_dataframe(
54
244
  The query results
55
245
  single : bool, optional
56
246
  Is this a single result (i.e., from `fetchone`)?
247
+ schema : Dict[str, Any], optional
248
+ Cached schema for current output format
57
249
 
58
250
  Returns
59
251
  -------
@@ -66,10 +258,8 @@ def results_to_dataframe(
66
258
  if not res:
67
259
  return res
68
260
  if has_pandas:
69
- columns = [x[0] for x in desc]
70
- if single:
71
- return DataFrame([res], columns=columns)
72
- return DataFrame(res, columns=columns)
261
+ schema = _description_to_pandas_schema(desc) if schema is None else schema
262
+ return pd.DataFrame(results_to_numpy(desc, res, single=single, schema=schema))
73
263
  warnings.warn(
74
264
  'pandas is not available; unable to convert to DataFrame',
75
265
  RuntimeWarning,
@@ -77,10 +267,107 @@ def results_to_dataframe(
77
267
  return res
78
268
 
79
269
 
270
+ def results_to_polars(
271
+ desc: List[Description],
272
+ res: Optional[DBAPIResult],
273
+ single: Optional[bool] = False,
274
+ schema: Optional[Dict[str, Any]] = None,
275
+ ) -> Optional[Result]:
276
+ """
277
+ Convert results to polars.
278
+
279
+ Parameters
280
+ ----------
281
+ desc : list of Descriptions
282
+ The column metadata
283
+ res : tuple or list of tuples
284
+ The query results
285
+ single : bool, optional
286
+ Is this a single result (i.e., from `fetchone`)?
287
+ schema : Dict[str, Any], optional
288
+ Cached schema for current output format
289
+
290
+ Returns
291
+ -------
292
+ DataFrame
293
+ If `polars` is available
294
+ tuple or list of tuples
295
+ If `polars` is not available
296
+
297
+ """
298
+ if not res:
299
+ return res
300
+ if has_polars:
301
+ schema = _description_to_polars_schema(desc) if schema is None else schema
302
+ if single:
303
+ out = pl.DataFrame([res], **schema.get('schema', {}))
304
+ else:
305
+ out = pl.DataFrame(res, **schema.get('schema', {}))
306
+ with_columns = schema.get('with_columns')
307
+ if with_columns:
308
+ return out.with_columns(**with_columns)
309
+ return out
310
+ warnings.warn(
311
+ 'polars is not available; unable to convert to DataFrame',
312
+ RuntimeWarning,
313
+ )
314
+ return res
315
+
316
+
317
+ def results_to_arrow(
318
+ desc: List[Description],
319
+ res: Optional[DBAPIResult],
320
+ single: Optional[bool] = False,
321
+ schema: Optional[Dict[str, Any]] = None,
322
+ ) -> Optional[Result]:
323
+ """
324
+ Convert results to Arrow.
325
+
326
+ Parameters
327
+ ----------
328
+ desc : list of Descriptions
329
+ The column metadata
330
+ res : tuple or list of tuples
331
+ The query results
332
+ single : bool, optional
333
+ Is this a single result (i.e., from `fetchone`)?
334
+ schema : Dict[str, Any], optional
335
+ Cached schema for current output format
336
+
337
+ Returns
338
+ -------
339
+ Table
340
+ If `pyarrow` is available
341
+ tuple or list of tuples
342
+ If `pyarrow` is not available
343
+
344
+ """
345
+ if not res:
346
+ return res
347
+ if has_pyarrow:
348
+ names = [x[0] for x in desc]
349
+ schema = _description_to_arrow_schema(desc) if schema is None else schema
350
+ if single:
351
+ if isinstance(res, dict):
352
+ return pa.Table.from_pylist([res], **schema)
353
+ else:
354
+ return pa.Table.from_pylist([dict(zip(names, res))], **schema)
355
+ if isinstance(res[0], dict):
356
+ return pa.Table.from_pylist(res, **schema)
357
+ else:
358
+ return pa.Table.from_pylist([dict(zip(names, x)) for x in res], **schema)
359
+ warnings.warn(
360
+ 'pyarrow is not available; unable to convert to Table',
361
+ RuntimeWarning,
362
+ )
363
+ return res
364
+
365
+
80
366
  def results_to_namedtuple(
81
367
  desc: List[Description],
82
368
  res: Optional[DBAPIResult],
83
369
  single: Optional[bool] = False,
370
+ schema: Optional[Dict[str, Any]] = None,
84
371
  ) -> Optional[Result]:
85
372
  """
86
373
  Convert results to namedtuples.
@@ -93,6 +380,8 @@ def results_to_namedtuple(
93
380
  The query results
94
381
  single : bool, optional
95
382
  Is this a single result (i.e., from `fetchone`)?
383
+ schema : Dict[str, Any], optional
384
+ Cached schema for current output format
96
385
 
97
386
  Returns
98
387
  -------
@@ -118,6 +407,7 @@ def results_to_dict(
118
407
  desc: List[Description],
119
408
  res: Optional[DBAPIResult],
120
409
  single: Optional[bool] = False,
410
+ schema: Optional[Dict[str, Any]] = None,
121
411
  ) -> Optional[Result]:
122
412
  """
123
413
  Convert results to dicts.
@@ -130,6 +420,8 @@ def results_to_dict(
130
420
  The query results
131
421
  single : bool, optional
132
422
  Is this a single result (i.e., from `fetchone`)?
423
+ schema : Dict[str, Any], optional
424
+ Cached schema for current output format
133
425
 
134
426
  Returns
135
427
  -------
@@ -151,6 +443,7 @@ def results_to_tuple(
151
443
  desc: List[Description],
152
444
  res: Optional[DBAPIResult],
153
445
  single: Optional[bool] = False,
446
+ schema: Optional[Dict[str, Any]] = None,
154
447
  ) -> Optional[Result]:
155
448
  """
156
449
  Convert results to tuples.
@@ -163,6 +456,8 @@ def results_to_tuple(
163
456
  The query results
164
457
  single : bool, optional
165
458
  Is this a single result (i.e., from `fetchone`)?
459
+ schema : Dict[str, Any], optional
460
+ Cached schema for current output format
166
461
 
167
462
  Returns
168
463
  -------
@@ -183,9 +478,16 @@ def results_to_tuple(
183
478
  return [tuple(x) for x in res]
184
479
 
185
480
 
481
+ def _no_schema(desc: List[Description]) -> Optional[Dict[str, Any]]:
482
+ return {}
483
+
484
+
186
485
  _converters: Dict[
187
486
  str, Callable[
188
- [List[Description], Optional[DBAPIResult], Optional[bool]],
487
+ [
488
+ List[Description], Optional[DBAPIResult],
489
+ Optional[bool], Optional[Dict[str, Any]],
490
+ ],
189
491
  Optional[Result],
190
492
  ],
191
493
  ] = {
@@ -195,7 +497,29 @@ _converters: Dict[
195
497
  'namedtuples': results_to_namedtuple,
196
498
  'dict': results_to_dict,
197
499
  'dicts': results_to_dict,
198
- 'dataframe': results_to_dataframe,
500
+ 'numpy': results_to_numpy,
501
+ 'pandas': results_to_pandas,
502
+ 'polars': results_to_polars,
503
+ 'arrow': results_to_arrow,
504
+ 'pyarrow': results_to_arrow,
505
+ }
506
+
507
+ _schema_converters: Dict[
508
+ str, Callable[
509
+ [List[Description]], Optional[Dict[str, Any]],
510
+ ],
511
+ ] = {
512
+ 'tuple': _no_schema,
513
+ 'tuples': _no_schema,
514
+ 'namedtuple': _no_schema,
515
+ 'namedtuples': _no_schema,
516
+ 'dict': _no_schema,
517
+ 'dicts': _no_schema,
518
+ 'numpy': _description_to_numpy_schema,
519
+ 'pandas': _description_to_numpy_schema,
520
+ 'polars': _description_to_polars_schema,
521
+ 'arrow': _description_to_arrow_schema,
522
+ 'pyarrow': _description_to_arrow_schema,
199
523
  }
200
524
 
201
525
 
@@ -204,18 +528,23 @@ def format_results(
204
528
  desc: List[Description],
205
529
  res: Optional[DBAPIResult],
206
530
  single: bool = False,
531
+ schema: Optional[Dict[str, Any]] = None,
207
532
  ) -> Optional[Result]:
208
533
  """
209
534
  Convert results to format specified in the package options.
210
535
 
211
536
  Parameters
212
537
  ----------
538
+ format : str
539
+ Name of the format type
213
540
  desc : list of Descriptions
214
541
  The column metadata
215
542
  res : tuple or list of tuples
216
543
  The query results
217
544
  single : bool, optional
218
545
  Is this a single result (i.e., from `fetchone`)?
546
+ schema : Dict[str, Any], optional
547
+ Cached schema for current output format
219
548
 
220
549
  Returns
221
550
  -------
@@ -225,4 +554,28 @@ def format_results(
225
554
  If single is True
226
555
 
227
556
  """
228
- return _converters[format](desc, res, single)
557
+ return _converters[format](desc, res, single, schema)
558
+
559
+
560
+ def get_schema(
561
+ format: str,
562
+ desc: List[Description],
563
+ ) -> Dict[str, Any]:
564
+ """
565
+ Convert a DB-API description to a format schema.
566
+
567
+ Parameters
568
+ ----------
569
+ format : str
570
+ Name of the format type
571
+ desc : list of Descriptions
572
+ The column metadata
573
+
574
+ Returns
575
+ -------
576
+ Dict[str, Any]
577
+ A dictionary of function parameters containing schema information
578
+ for the given format type
579
+
580
+ """
581
+ return _schema_converters[format](desc) or {}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: singlestoredb
3
- Version: 1.0.3
3
+ Version: 1.1.0
4
4
  Summary: Interface to the SingleStoreDB database and workspace management APIs
5
5
  Home-page: https://github.com/singlestore-labs/singlestoredb-python
6
6
  Author: SingleStore
@@ -21,6 +21,7 @@ Requires-Dist: requests
21
21
  Requires-Dist: setuptools
22
22
  Requires-Dist: sqlparams
23
23
  Requires-Dist: wheel
24
+ Requires-Dist: tomli >=1.1.0 ; python_version < "3.11"
24
25
  Provides-Extra: dataframe
25
26
  Requires-Dist: ibis-singlestoredb ; extra == 'dataframe'
26
27
  Provides-Extra: dbt
@@ -1,6 +1,6 @@
1
- singlestoredb/__init__.py,sha256=qDpKRys2vXRJVjzkvHX3g5DCp_FFJ2bw3Kw9qhFXdr0,1634
1
+ singlestoredb/__init__.py,sha256=NuWWRMAxfLsF4MfzHPtqOYXxfdrxVZ47nq6XI5ZvTa4,1634
2
2
  singlestoredb/auth.py,sha256=u8D9tpKzrqa4ssaHjyZnGDX1q8XBpGtuoOkTkSv7B28,7599
3
- singlestoredb/config.py,sha256=Xaipos7C0bLTM2EBsuBXRuA4NI-AL3Attb7KC-DqlSg,7856
3
+ singlestoredb/config.py,sha256=NBbPhKuwdI57qxorzNV2CxSY7bNXGcukxG0w4fmoLV8,11625
4
4
  singlestoredb/connection.py,sha256=gDBIs3XgLOROVHtzMx9zmSYILc0aRVY7k8we3b4TxCw,44227
5
5
  singlestoredb/converters.py,sha256=aH_QhLr94i9_AjvcplTar0HfX2yi53KGxHHzJc7lSU0,12515
6
6
  singlestoredb/exceptions.py,sha256=HuoA6sMRL5qiCiee-_5ddTGmFbYC9Euk8TYUsh5GvTw,3234
@@ -9,39 +9,40 @@ singlestoredb/types.py,sha256=FIqO1A7e0Gkk7ITmIysBy-P5S--ItbMSlYvblzqGS30,9969
9
9
  singlestoredb/alchemy/__init__.py,sha256=dXRThusYrs_9GjrhPOw0-vw94in_T8yY9jE7SGCqiQk,2523
10
10
  singlestoredb/functions/__init__.py,sha256=WL1LqgMTdnGOse3tQqmD-HH8TdfCPS89GNO7hO0v_aw,41
11
11
  singlestoredb/functions/decorator.py,sha256=H12MUeBw8VOppx6esntaR43ukeIffbnAr716CBpYJ4g,5193
12
- singlestoredb/functions/dtypes.py,sha256=iP3_AvE2jBxlkziOHzoUvTtYCdBZlaxJHNgvGwp07Ao,36712
12
+ singlestoredb/functions/dtypes.py,sha256=a2vevIug8NhiUCFiSOKwRPpdWU69Gn13ZoQ6Aovskhc,31408
13
13
  singlestoredb/functions/signature.py,sha256=fNnlTfc0R0sM9wm78UwG7Ok9eMJTtOfawrIpjts2wdY,18866
14
- singlestoredb/functions/ext/__init__.py,sha256=kGCV3QC5pL95TytpI8pwvSVCqqoTrV8duQQEUp65sy4,66
14
+ singlestoredb/functions/ext/__init__.py,sha256=1oLL20yLB1GL9IbFiZD8OReDqiCpFr-yetIR6x1cNkI,23
15
15
  singlestoredb/functions/ext/arrow.py,sha256=WB7n1ACslyd8nlbFzUvlbxn1BVuEjA9-BGBEqCWlSOo,9061
16
- singlestoredb/functions/ext/asgi.py,sha256=3Rp0m2DNf5yzbCQpaazTTVoDCPfp3jT6dJ7MlvHijw0,21938
17
- singlestoredb/functions/ext/json.py,sha256=UuUxTzlr5ztAbXqOGaVGUhO7xFN_oBY75nFh9B8cRog,10372
18
- singlestoredb/functions/ext/mmap.py,sha256=lvdKiGPh-H7LfkrYbPvcH5BWv9zuz7t2FAvW-nYdWzI,9759
19
- singlestoredb/functions/ext/rowdat_1.py,sha256=yZElsItSbVTFlXU3N-ee6QIybxuksqwv1UE3Y6h45c0,22274
16
+ singlestoredb/functions/ext/asgi.py,sha256=2Dfx3A_IfE6yI3OMwU3TcsQOEoq-RENniT0xOgg56iI,39861
17
+ singlestoredb/functions/ext/json.py,sha256=XkI8jirxi1T9F-M0p9NpLezph0MRAhYmDiPuU2Id0Uo,10404
18
+ singlestoredb/functions/ext/mmap.py,sha256=OB6CIYoLe_AYuJM10lE0I6QhZJ5kMhLNbQo2Sp1wiZA,13711
19
+ singlestoredb/functions/ext/rowdat_1.py,sha256=JgKRsVSQYczFD6cmo2xLilbNPYpyLL2tPOWO1Gh25ow,22306
20
+ singlestoredb/functions/ext/utils.py,sha256=2-B8YU_Iekv8JcpI-ochs9TIeuyatLaLAH-AyYyUUIg,5311
20
21
  singlestoredb/fusion/__init__.py,sha256=Qo7SuqGw-l-vE8-EI2jhm6hXJkYfOLUKIws9c7LFNX0,356
21
22
  singlestoredb/fusion/graphql.py,sha256=ZA3HcDq5rER-dCEavwTqnF7KM0D2LCYIY7nLQk7lSso,5207
22
- singlestoredb/fusion/handler.py,sha256=7Oau7A5mclO5t3egH2FINxo8By6zpwzAQLCMFIo9CCo,18338
23
- singlestoredb/fusion/registry.py,sha256=xpaWO9Bne5QYSE0ump1NcyHimFQSYW49gu3NSPBhLCI,4084
23
+ singlestoredb/fusion/handler.py,sha256=E9WYaNOUvNFcywbrGsQ4E7EwgURJ_CxSWJJgwowQbBI,21337
24
+ singlestoredb/fusion/registry.py,sha256=QAZOSMZcgauxwtyjnpiMf17jZ4u2vPb_vi7KwONNvyg,5718
24
25
  singlestoredb/fusion/result.py,sha256=Bd3KbRpqWqQcWp_Chd4bzBy8Kfc8nXLS_Pn_GGbPO6o,11772
25
26
  singlestoredb/fusion/handlers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
- singlestoredb/fusion/handlers/stage.py,sha256=Abj59HZyy7kUWwujG-7FZ9-8d14W3XWRc3XfOMgBeng,6386
27
+ singlestoredb/fusion/handlers/stage.py,sha256=B03Wtr3W0tn7jGxu3Je-z3krgc9NsW4sso38yUPgZcM,10865
27
28
  singlestoredb/fusion/handlers/utils.py,sha256=oYbf13Y3orEkJfHMNnO7B_W1anEdK-0S9vVVkF2pPFk,5109
28
- singlestoredb/fusion/handlers/workspace.py,sha256=hHE6ZTrt3wWnQsTMkEiiWWFiQend4VNTebX382Ot5FI,11342
29
+ singlestoredb/fusion/handlers/workspace.py,sha256=lY6j_wonX2cBIXmJWZKOjous44hhGfnT8vtmzQfImZg,19643
29
30
  singlestoredb/http/__init__.py,sha256=A_2ZUCCpvRYIA6YDpPy57wL5R1eZ5SfP6I1To5nfJ2s,912
30
- singlestoredb/http/connection.py,sha256=YcUfY_GzpSz-XYTkVQCayct9eQvwhscwVfStLbNry_U,37410
31
+ singlestoredb/http/connection.py,sha256=RUPTgbnrvlp_fRCgoFl0og_-35TSVAAjkxUFctO8DWw,38818
31
32
  singlestoredb/management/__init__.py,sha256=jXtKvpvl5diiotXPiEi2EpJwhPLEMb4_MTpndjCz3Kg,202
32
33
  singlestoredb/management/billing_usage.py,sha256=9ighjIpcopgIyJOktBYQ6pahBZmWGHOPyyCW4gu9FGs,3735
33
34
  singlestoredb/management/cluster.py,sha256=_TT4tV43VPDrtcdS_VN-TTYij7yFQzjAMeuYRF9zKj8,14362
34
35
  singlestoredb/management/manager.py,sha256=m8I5zTmEqjMCEE4fmmVdzza8TvofhnIHvO0np0WH-Y8,8810
35
36
  singlestoredb/management/organization.py,sha256=Oj4-VQoEc90hLQ9vxXu4fSrGWK_Qq5lftmkM1Q5l6lk,4916
36
37
  singlestoredb/management/region.py,sha256=HnLcWUh7r_aLECliplCDHak4a_F3B7LOSXEYMW66qD0,1611
37
- singlestoredb/management/utils.py,sha256=ZFt1jaUwNij16UplNxK_kvvd-w54OunsBaGHojqqUn8,8329
38
- singlestoredb/management/workspace.py,sha256=xIdSA_X8aiLnCZjNJg8-xYZeVyVeL1i4sVJUx-zMG_g,51907
38
+ singlestoredb/management/utils.py,sha256=sJlAmvHsqvgkFmpyXd4qIDoVi0Mxh9KGBGf_uF3cU4g,9197
39
+ singlestoredb/management/workspace.py,sha256=gea-ehcd_HlmjqfiEeW7w9nMOG3aLsIW9xDPGjWELXs,59380
39
40
  singlestoredb/mysql/__init__.py,sha256=olUTAvkiERhDW41JXQMawkg-i0tvBEkoTkII1tt6lxU,4492
40
41
  singlestoredb/mysql/_auth.py,sha256=AugRitoUwgRIDFuJxuAH4MWIAmckY7Ji2pP6r_Ng9dY,8043
41
42
  singlestoredb/mysql/charset.py,sha256=-FlONDS_oAUF5B3mIgeHBPb_SCt4zHD33arUeBNctU0,10510
42
- singlestoredb/mysql/connection.py,sha256=VzVZTSRdRcJ521rkFeZVmeYPkV_LDxLjDrxEJ6fHZhg,64746
43
+ singlestoredb/mysql/connection.py,sha256=YIOeh29j-dodDiz4BTboKp-0ep1MbLzQyKBcahkM2m4,67380
43
44
  singlestoredb/mysql/converters.py,sha256=CVe8SDmjbIAhy1xpQ2N5OKWw6t5eWpw-EU3QTlA0Hh0,7500
44
- singlestoredb/mysql/cursors.py,sha256=aWs4AzmeZJJltOmUU3GZNBWgod9nqnnFW5OHVquz5t0,21246
45
+ singlestoredb/mysql/cursors.py,sha256=nmaODDK5rVxTF1yC6MAKTeYDCX3ByodK1JuDRJ7YBCM,26481
45
46
  singlestoredb/mysql/err.py,sha256=-m5rqXi8yhq6b8SCEJ2h0E5Rudh_15dlAU_WbJ1YrM8,2388
46
47
  singlestoredb/mysql/optionfile.py,sha256=DqL-rOQcqQncD5eVbPRkwZqo7Pj3Vh40VLx3E_e87TU,655
47
48
  singlestoredb/mysql/protocol.py,sha256=mPkF1xfSbqoW2dr8Tk4MpOKXRs_5Qj6xGFWSxo-AwhA,12180
@@ -78,15 +79,15 @@ singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py,sh
78
79
  singlestoredb/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
79
80
  singlestoredb/tests/empty.sql,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
81
  singlestoredb/tests/local_infile.csv,sha256=sBtqjvfkS9aoOVx8nMXYgYv4rDuT4OuYhqUhNRu0O68,42
81
- singlestoredb/tests/test.sql,sha256=zuckJJgKI8cjIkM03WC67hCTk75TSJYVNA3x9VLQWH4,9954
82
+ singlestoredb/tests/test.sql,sha256=rwH-Rai1aXZpc3NFYYu7gRmm0u6prP8epXF88jxUKTs,16196
82
83
  singlestoredb/tests/test2.sql,sha256=D4U2GSlOVeo39U8-RMM4YziJzYFfi4Ztm2YXJVJVAS8,37
83
84
  singlestoredb/tests/test_basics.py,sha256=rUfUGZ54xybvgp11XYWdqnUYMKa6VckB3XkX9LFnxRw,44180
84
85
  singlestoredb/tests/test_config.py,sha256=63lyIQ2KrvGE6C9403B_4Mc90mX4tp42ys5Bih2sXrE,11184
85
- singlestoredb/tests/test_connection.py,sha256=RiE_NATLYPiMR5jWaBlcP5YddwitS6dzOHOVVOVXCSI,50741
86
+ singlestoredb/tests/test_connection.py,sha256=v2Qg9vrJEgI16_75WZPMPjHrZd9ZzL6jEGoCeRD0DrQ,111071
86
87
  singlestoredb/tests/test_dbapi.py,sha256=IKq5Hcwx8WikASP8_AB5fo3TXv7ryWPCVGonoly00gI,652
87
88
  singlestoredb/tests/test_exceptions.py,sha256=tfr_8X2w1UmG4nkSBzWGB0C7ehrf1GAVgj6_ODaG-TM,1131
88
- singlestoredb/tests/test_ext_func.py,sha256=Q-ZOl7fn6XfiHpHgxLvaBi7KSVzIehbS-cthitXpe8g,37347
89
- singlestoredb/tests/test_ext_func_data.py,sha256=9Zb0Z1v-Yr0uOc97NJwPWuvJB49pLhzWKZtZWt-e7-Y,47693
89
+ singlestoredb/tests/test_ext_func.py,sha256=OWd-CJ1Owhx72nikSWWEF2EQFCJk7vEXZM2Oy9EbYQo,37357
90
+ singlestoredb/tests/test_ext_func_data.py,sha256=yTADD93nPxX6_rZXXLZaOWEI_yPvYyir9psn5PK9ctU,47695
90
91
  singlestoredb/tests/test_fusion.py,sha256=UPaxXt5YNa3GS44l4oZfmUcq89YgN7EWWIbW_oCkYao,15100
91
92
  singlestoredb/tests/test_http.py,sha256=RXasTqBWRn__omj0eLFTJYIbZjd0PPdIV2d4Cqz0MC8,8580
92
93
  singlestoredb/tests/test_management.py,sha256=P5I50_gt1VE5ja4CNVo0j10fmwAqE57psxCvI_RWRFI,28223
@@ -101,12 +102,13 @@ singlestoredb/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
101
102
  singlestoredb/utils/config.py,sha256=m3Xn6hsbdKyLufSnbokhFJ9Vfaz9Qpkj1IEnIiH9oJQ,24503
102
103
  singlestoredb/utils/convert_rows.py,sha256=A6up7a8Bq-eV2BXdGCotQviqp1Q7XdJ2MA9339hLYVQ,1816
103
104
  singlestoredb/utils/debug.py,sha256=0JiLA37u_9CKiDGiN9BK_PtFMUku3vIcNjERWaTNRSU,349
105
+ singlestoredb/utils/dtypes.py,sha256=1qUiB4BJFJ7rOVh2mItQssYbJupV7uq1x8uwX-Eu2Ks,5898
104
106
  singlestoredb/utils/mogrify.py,sha256=-a56IF70U6CkfadeaZgfjRSVsAD3PuqRrzPpjZlgbwY,4050
105
- singlestoredb/utils/results.py,sha256=cqFK4-0CBSDcT-R1ixKIWN5_sCn9s9SoEO6Gllj8mCI,5204
107
+ singlestoredb/utils/results.py,sha256=Hs34Q35UQzPQuTZ-mwidNJVU26WlQmSNqfpKwQ2XUfc,15153
106
108
  singlestoredb/utils/xdict.py,sha256=S9HKgrPrnu_6b7iOwa2KrW8CmU1Uqx0BWdEyogFzWbE,12896
107
- singlestoredb-1.0.3.dist-info/LICENSE,sha256=Mlq78idURT-9G026aMYswwwnnrLcgzTLuXeAs5hjDLM,11341
108
- singlestoredb-1.0.3.dist-info/METADATA,sha256=D-7UBUyQmH38miNEnUpaWgLmzIdEP-1uxhXxC8LJki8,5515
109
- singlestoredb-1.0.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
110
- singlestoredb-1.0.3.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
111
- singlestoredb-1.0.3.dist-info/top_level.txt,sha256=eet8bVPNRqiGeY0PrO5ERH2UpamwlrKHEQCffz4dOh8,14
112
- singlestoredb-1.0.3.dist-info/RECORD,,
109
+ singlestoredb-1.1.0.dist-info/LICENSE,sha256=Mlq78idURT-9G026aMYswwwnnrLcgzTLuXeAs5hjDLM,11341
110
+ singlestoredb-1.1.0.dist-info/METADATA,sha256=ot7a3ospcq_NzVROohCEwXXv_sxcxvQXM-pn_pmlrhI,5570
111
+ singlestoredb-1.1.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
112
+ singlestoredb-1.1.0.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
113
+ singlestoredb-1.1.0.dist-info/top_level.txt,sha256=eet8bVPNRqiGeY0PrO5ERH2UpamwlrKHEQCffz4dOh8,14
114
+ singlestoredb-1.1.0.dist-info/RECORD,,