singlestoredb 1.15.3__cp38-abi3-win32.whl → 1.15.5__cp38-abi3-win32.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.

_singlestoredb_accel.pyd CHANGED
Binary file
singlestoredb/__init__.py CHANGED
@@ -13,7 +13,7 @@ Examples
13
13
 
14
14
  """
15
15
 
16
- __version__ = '1.15.3'
16
+ __version__ = '1.15.5'
17
17
 
18
18
  from typing import Any
19
19
 
@@ -708,8 +708,22 @@ class Application(object):
708
708
  # Error response start
709
709
  error_response_dict: Dict[str, Any] = dict(
710
710
  type='http.response.start',
711
- status=401,
712
- headers=[(b'content-type', b'text/plain')],
711
+ status=500,
712
+ headers=[(b'content-type', b'application/json')],
713
+ )
714
+
715
+ # Timeout response start
716
+ timeout_response_dict: Dict[str, Any] = dict(
717
+ type='http.response.start',
718
+ status=504,
719
+ headers=[(b'content-type', b'application/json')],
720
+ )
721
+
722
+ # Cancel response start
723
+ cancel_response_dict: Dict[str, Any] = dict(
724
+ type='http.response.start',
725
+ status=503,
726
+ headers=[(b'content-type', b'application/json')],
713
727
  )
714
728
 
715
729
  # JSON response start
@@ -1233,12 +1247,14 @@ class Application(object):
1233
1247
  'timeout': func_info['timeout'],
1234
1248
  },
1235
1249
  )
1236
- body = (
1237
- '[TimeoutError] Function call timed out after ' +
1238
- str(func_info['timeout']) +
1239
- ' seconds'
1250
+ body = json.dumps(
1251
+ dict(
1252
+ error='[TimeoutError] Function call timed out after ' +
1253
+ str(func_info['timeout']) +
1254
+ ' seconds',
1255
+ ),
1240
1256
  ).encode('utf-8')
1241
- await send(self.error_response_dict)
1257
+ await send(self.timeout_response_dict)
1242
1258
 
1243
1259
  except asyncio.CancelledError:
1244
1260
  self.logger.exception(
@@ -1249,8 +1265,12 @@ class Application(object):
1249
1265
  'function_name': func_name.decode('utf-8'),
1250
1266
  },
1251
1267
  )
1252
- body = b'[CancelledError] Function call was cancelled'
1253
- await send(self.error_response_dict)
1268
+ body = json.dumps(
1269
+ dict(
1270
+ error='[CancelledError] Function call was cancelled',
1271
+ ),
1272
+ ).encode('utf-8')
1273
+ await send(self.cancel_response_dict)
1254
1274
 
1255
1275
  except Exception as e:
1256
1276
  self.logger.exception(
@@ -1262,7 +1282,11 @@ class Application(object):
1262
1282
  'exception_type': type(e).__name__,
1263
1283
  },
1264
1284
  )
1265
- body = f'[{type(e).__name__}] {str(e).strip()}'.encode('utf-8')
1285
+ body = json.dumps(
1286
+ dict(
1287
+ error=f'[{type(e).__name__}] {str(e).strip()}',
1288
+ ),
1289
+ ).encode('utf-8')
1266
1290
  await send(self.error_response_dict)
1267
1291
 
1268
1292
  finally:
@@ -15,7 +15,7 @@ from .utils import get_workspace_manager
15
15
 
16
16
  class UseWorkspaceHandler(SQLHandler):
17
17
  """
18
- USE WORKSPACE workspace [ with_database ];
18
+ USE WORKSPACE workspace [ in_group ] [ with_database ];
19
19
 
20
20
  # Workspace
21
21
  workspace = { workspace_id | workspace_name | current_workspace }
@@ -29,6 +29,15 @@ class UseWorkspaceHandler(SQLHandler):
29
29
  # Current workspace
30
30
  current_workspace = @@CURRENT
31
31
 
32
+ # Workspace group specification
33
+ in_group = IN GROUP { group_id | group_name }
34
+
35
+ # ID of workspace group
36
+ group_id = ID '<group-id>'
37
+
38
+ # Name of workspace group
39
+ group_name = '<group-name>'
40
+
32
41
  # Name of database
33
42
  with_database = WITH DATABASE 'database-name'
34
43
 
@@ -38,13 +47,18 @@ class UseWorkspaceHandler(SQLHandler):
38
47
 
39
48
  Arguments
40
49
  ---------
41
- * ``<workspace-id>``: The ID of the workspace to delete.
42
- * ``<workspace-name>``: The name of the workspace to delete.
50
+ * ``<workspace-id>``: The ID of the workspace to use.
51
+ * ``<workspace-name>``: The name of the workspace to use.
52
+ * ``<group-id>``: The ID of the workspace group to search in.
53
+ * ``<group-name>``: The name of the workspace group to search in.
43
54
 
44
55
  Remarks
45
56
  -------
46
57
  * If you want to specify a database in the current workspace,
47
58
  the workspace name can be specified as ``@@CURRENT``.
59
+ * Use the ``IN GROUP`` clause to specify the ID or name of the workspace
60
+ group where the workspace should be found. If not specified, the current
61
+ workspace group will be used.
48
62
  * Specify the ``WITH DATABASE`` clause to select a default
49
63
  database for the session.
50
64
  * This command only works in a notebook session in the
@@ -57,23 +71,69 @@ class UseWorkspaceHandler(SQLHandler):
57
71
 
58
72
  USE WORKSPACE 'examplews' WITH DATABASE 'dbname';
59
73
 
74
+ The following command sets the workspace to ``examplews`` from a specific
75
+ workspace group::
76
+
77
+ USE WORKSPACE 'examplews' IN GROUP 'my-workspace-group';
78
+
60
79
  """
61
80
  def run(self, params: Dict[str, Any]) -> Optional[FusionSQLResult]:
62
81
  from singlestoredb.notebook import portal
82
+
83
+ # Handle current workspace case
63
84
  if params['workspace'].get('current_workspace'):
64
85
  if params.get('with_database'):
65
86
  portal.default_database = params['with_database']
66
- elif params.get('with_database'):
67
- if params['workspace'].get('workspace_name'):
68
- portal.connection = params['workspace']['workspace_name'], \
69
- params['with_database']
87
+ return None
88
+
89
+ # Get workspace name or ID
90
+ workspace_name = params['workspace'].get('workspace_name')
91
+ workspace_id = params['workspace'].get('workspace_id')
92
+
93
+ # If IN GROUP is specified, look up workspace in that group
94
+ if params.get('in_group'):
95
+ workspace_group = get_workspace_group(params)
96
+
97
+ if workspace_name:
98
+ workspace = workspace_group.workspaces[workspace_name]
99
+ elif workspace_id:
100
+ # Find workspace by ID in the specified group
101
+ workspace = next(
102
+ (w for w in workspace_group.workspaces if w.id == workspace_id),
103
+ None,
104
+ )
105
+ if workspace is None:
106
+ raise KeyError(f'no workspace found with ID: {workspace_id}')
107
+
108
+ workspace_id = workspace.id
109
+
110
+ # Set workspace and database
111
+ if params.get('with_database'):
112
+ if params.get('in_group'):
113
+ # Use 3-element tuple: (workspace_group_id, workspace_name_or_id,
114
+ # database)
115
+ portal.connection = ( # type: ignore[assignment]
116
+ workspace_group.id,
117
+ workspace_name or workspace_id,
118
+ params['with_database'],
119
+ )
70
120
  else:
71
- portal.connection = params['workspace']['workspace_id'], \
72
- params['with_database']
73
- elif params['workspace'].get('workspace_name'):
74
- portal.workspace = params['workspace']['workspace_name']
121
+ # Use 2-element tuple: (workspace_name_or_id, database)
122
+ portal.connection = (
123
+ workspace_name or workspace_id,
124
+ params['with_database'],
125
+ )
75
126
  else:
76
- portal.workspace = params['workspace']['workspace_id']
127
+ if params.get('in_group'):
128
+ # Use 2-element tuple: (workspace_group_id, workspace_name_or_id)
129
+ portal.workspace = ( # type: ignore[assignment]
130
+ workspace_group.id,
131
+ workspace_name or workspace_id,
132
+ )
133
+ else:
134
+ # Use string: workspace_name_or_id
135
+ portal.workspace = workspace_name or workspace_id
136
+
77
137
  return None
78
138
 
79
139
 
@@ -647,23 +647,24 @@ class Cursor(connection.Cursor):
647
647
  type_code = types.ColumnType.get_code(data_type)
648
648
  prec, scale = get_precision_scale(col['dataType'])
649
649
  converter = http_converters.get(type_code, None)
650
+
650
651
  if 'UNSIGNED' in data_type:
651
652
  flags = 32
653
+
652
654
  if data_type.endswith('BLOB') or data_type.endswith('BINARY'):
653
655
  converter = functools.partial(
654
656
  b64decode_converter, converter, # type: ignore
655
657
  )
656
658
  charset = 63 # BINARY
659
+
657
660
  if type_code == 0: # DECIMAL
658
661
  type_code = types.ColumnType.get_code('NEWDECIMAL')
659
662
  elif type_code == 15: # VARCHAR / VARBINARY
660
663
  type_code = types.ColumnType.get_code('VARSTRING')
661
- if type_code == 246 and prec is not None: # NEWDECIMAL
662
- prec += 1 # for sign
663
- if scale is not None and scale > 0:
664
- prec += 1 # for decimal
664
+
665
665
  if converter is not None:
666
666
  convs.append((i, None, converter))
667
+
667
668
  description.append(
668
669
  Description(
669
670
  str(col['name']), type_code,
@@ -673,6 +674,7 @@ class Cursor(connection.Cursor):
673
674
  ),
674
675
  )
675
676
  pymy_res.append(PyMyField(col['name'], flags, charset))
677
+
676
678
  self._descriptions.append(description)
677
679
  self._schemas.append(get_schema(self._results_type, description))
678
680
 
@@ -936,7 +938,7 @@ class Cursor(connection.Cursor):
936
938
 
937
939
  def __iter__(self) -> Iterable[Tuple[Any, ...]]:
938
940
  """Return result iterator."""
939
- return iter(self._rows)
941
+ return iter(self._rows[self._row_idx:])
940
942
 
941
943
  def __enter__(self) -> 'Cursor':
942
944
  """Enter a context."""
@@ -460,7 +460,7 @@ class Stage(FileLocation):
460
460
 
461
461
  """
462
462
  res = self._manager._get(
463
- f'stage/{self._deployment_id}/fs/{stage_path}',
463
+ re.sub(r'/+$', r'/', f'stage/{self._deployment_id}/fs/{stage_path}'),
464
464
  ).json()
465
465
  if recursive:
466
466
  out = []
@@ -324,13 +324,26 @@ class FieldDescriptorPacket(MysqlPacket):
324
324
  raise TypeError(f'unrecognized extended data type: {ext_type_code}')
325
325
 
326
326
  def description(self):
327
- """Provides a 7-item tuple compatible with the Python PEP249 DB Spec."""
327
+ """
328
+ Provides a 9-item tuple.
329
+
330
+ Standard descriptions only have 7 fields according to the Python
331
+ PEP249 DB Spec, but we need to surface information about unsigned
332
+ types and charsetnr for proper type handling.
333
+
334
+ """
335
+ precision = self.get_column_length()
336
+ if self.type_code in (FIELD_TYPE.DECIMAL, FIELD_TYPE.NEWDECIMAL):
337
+ if precision:
338
+ precision -= 1 # for the sign
339
+ if self.scale > 0:
340
+ precision -= 1 # for the decimal point
328
341
  return Description(
329
342
  self.name,
330
343
  self.type_code,
331
344
  None, # TODO: display_length; should this be self.length?
332
345
  self.get_column_length(), # 'internal_size'
333
- self.get_column_length(), # 'precision' # TODO: why!?!?
346
+ precision, # 'precision'
334
347
  self.scale,
335
348
  self.flags % 2 == 0,
336
349
  self.flags,
@@ -10,6 +10,7 @@ from typing import Dict
10
10
  from typing import List
11
11
  from typing import Optional
12
12
  from typing import Tuple
13
+ from typing import Union
13
14
 
14
15
  from . import _objects as obj
15
16
  from ..management import workspace as mgr
@@ -167,15 +168,32 @@ class Portal(object):
167
168
  return obj.workspace
168
169
 
169
170
  @workspace.setter
170
- def workspace(self, name_or_id: str) -> None:
171
+ def workspace(self, workspace_spec: Union[str, Tuple[str, str]]) -> None:
171
172
  """Set workspace."""
172
- if re.match(
173
- r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}',
174
- name_or_id, flags=re.I,
175
- ):
176
- w = mgr.get_workspace(name_or_id)
173
+ if isinstance(workspace_spec, tuple):
174
+ # 2-element tuple: (workspace_group_id, workspace_name_or_id)
175
+ workspace_group_id, name_or_id = workspace_spec
176
+ uuid_pattern = (
177
+ r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
178
+ )
179
+ if re.match(uuid_pattern, name_or_id, flags=re.I):
180
+ w = mgr.get_workspace(name_or_id)
181
+ else:
182
+ w = mgr.get_workspace_group(workspace_group_id).workspaces[
183
+ name_or_id
184
+ ]
177
185
  else:
178
- w = mgr.get_workspace_group(self.workspace_group_id).workspaces[name_or_id]
186
+ # String: workspace_name_or_id (existing behavior)
187
+ name_or_id = workspace_spec
188
+ uuid_pattern = (
189
+ r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
190
+ )
191
+ if re.match(uuid_pattern, name_or_id, flags=re.I):
192
+ w = mgr.get_workspace(name_or_id)
193
+ else:
194
+ w = mgr.get_workspace_group(
195
+ self.workspace_group_id,
196
+ ).workspaces[name_or_id]
179
197
 
180
198
  if w.state and w.state.lower() not in ['active', 'resumed']:
181
199
  raise RuntimeError('workspace is not active')
@@ -196,16 +214,37 @@ class Portal(object):
196
214
  return self.workspace, self.default_database
197
215
 
198
216
  @connection.setter
199
- def connection(self, workspace_and_default_database: Tuple[str, str]) -> None:
217
+ def connection(
218
+ self,
219
+ connection_spec: Union[Tuple[str, str], Tuple[str, str, str]],
220
+ ) -> None:
200
221
  """Set workspace and default database name."""
201
- name_or_id, default_database = workspace_and_default_database
202
- if re.match(
203
- r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}',
204
- name_or_id, flags=re.I,
205
- ):
206
- w = mgr.get_workspace(name_or_id)
222
+ if len(connection_spec) == 3:
223
+ # 3-element tuple: (workspace_group_id, workspace_name_or_id,
224
+ # default_database)
225
+ workspace_group_id, name_or_id, default_database = connection_spec
226
+ uuid_pattern = (
227
+ r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
228
+ )
229
+ if re.match(uuid_pattern, name_or_id, flags=re.I):
230
+ w = mgr.get_workspace(name_or_id)
231
+ else:
232
+ w = mgr.get_workspace_group(workspace_group_id).workspaces[
233
+ name_or_id
234
+ ]
207
235
  else:
208
- w = mgr.get_workspace_group(self.workspace_group_id).workspaces[name_or_id]
236
+ # 2-element tuple: (workspace_name_or_id, default_database)
237
+ # existing behavior
238
+ name_or_id, default_database = connection_spec
239
+ uuid_pattern = (
240
+ r'[a-z0-9]{8}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{4}-[a-z0-9]{12}'
241
+ )
242
+ if re.match(uuid_pattern, name_or_id, flags=re.I):
243
+ w = mgr.get_workspace(name_or_id)
244
+ else:
245
+ w = mgr.get_workspace_group(
246
+ self.workspace_group_id,
247
+ ).workspaces[name_or_id]
209
248
 
210
249
  if w.state and w.state.lower() not in ['active', 'resumed']:
211
250
  raise RuntimeError('workspace is not active')
@@ -0,0 +1,307 @@
1
+ CREATE TABLE IF NOT EXISTS alltypes (
2
+ `id` INT(11),
3
+ `tinyint` TINYINT,
4
+ `unsigned_tinyint` TINYINT UNSIGNED,
5
+ `bool` BOOL,
6
+ `boolean` BOOLEAN,
7
+ `smallint` SMALLINT,
8
+ `unsigned_smallint` SMALLINT UNSIGNED,
9
+ `mediumint` MEDIUMINT,
10
+ `unsigned_mediumint` MEDIUMINT UNSIGNED,
11
+ `int24` MEDIUMINT,
12
+ `unsigned_int24` MEDIUMINT UNSIGNED,
13
+ `int` INT,
14
+ `unsigned_int` INT UNSIGNED,
15
+ `integer` INTEGER,
16
+ `unsigned_integer` INTEGER UNSIGNED,
17
+ `bigint` BIGINT,
18
+ `unsigned_bigint` BIGINT UNSIGNED,
19
+ `float` FLOAT,
20
+ `double` DOUBLE,
21
+ `real` REAL,
22
+ `decimal` DECIMAL(20,6),
23
+ `dec` DEC(20,6),
24
+ `fixed` FIXED(20,6),
25
+ `numeric` NUMERIC(20,6),
26
+ `date` DATE,
27
+ `time` TIME,
28
+ `time_6` TIME(6),
29
+ `datetime` DATETIME,
30
+ `datetime_6` DATETIME(6),
31
+ `timestamp` TIMESTAMP,
32
+ `timestamp_6` TIMESTAMP(6),
33
+ `year` YEAR,
34
+ `char_100` CHAR(100),
35
+ `binary_100` BINARY(100),
36
+ `varchar_200` VARCHAR(200),
37
+ `varbinary_200` VARBINARY(200),
38
+ `longtext` LONGTEXT,
39
+ `mediumtext` MEDIUMTEXT,
40
+ `text` TEXT,
41
+ `tinytext` TINYTEXT,
42
+ `longblob` LONGBLOB,
43
+ `mediumblob` MEDIUMBLOB,
44
+ `blob` BLOB,
45
+ `tinyblob` TINYBLOB,
46
+ `json` JSON,
47
+ -- `geographypoint` GEOGRAPHYPOINT,
48
+ -- `geography` GEOGRAPHY,
49
+ `enum` ENUM('one', 'two', 'three'),
50
+ `set` SET('one', 'two', 'three'),
51
+ `bit` BIT
52
+ )
53
+ COLLATE='utf8_unicode_ci';
54
+
55
+ INSERT INTO alltypes SET
56
+ `id`=0,
57
+ `tinyint`=80,
58
+ `unsigned_tinyint`=85,
59
+ `bool`=0,
60
+ `boolean`=1,
61
+ `smallint`=-27897,
62
+ `unsigned_smallint`=27897,
63
+ `mediumint`=104729,
64
+ `unsigned_mediumint`=120999,
65
+ `int24`=-200899,
66
+ `unsigned_int24`=407709,
67
+ `int`=-1295369311,
68
+ `unsigned_int`=3872362332,
69
+ `integer`=-1741727421,
70
+ `unsigned_integer`=3198387363,
71
+ `bigint`=-266883847,
72
+ `unsigned_bigint`=980007287362,
73
+ `float`=-146486683.754744,
74
+ `double`=-474646154.719356,
75
+ `real`=-901409776.279346,
76
+ `decimal`=28111097.610822,
77
+ `dec`=389451155.931428,
78
+ `fixed`=-143773416.044092,
79
+ `numeric`=866689461.300046,
80
+ `date`='8524-11-10',
81
+ `time`='00:07:00',
82
+ `time_6`='01:10:00.000002',
83
+ `datetime`='9948-03-11 15:29:22',
84
+ `datetime_6`='1756-10-29 02:02:42.000008',
85
+ `timestamp`='1980-12-31 01:10:23',
86
+ `timestamp_6`='1991-01-02 22:15:10.000006',
87
+ `year`=1923,
88
+ `char_100`='This is a test of a 100 character column.',
89
+ `binary_100`=x'000102030405060708090A0B0C0D0E0F',
90
+ `varchar_200`='This is a test of a variable character column.',
91
+ `varbinary_200`=x'000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F',
92
+ `longtext`='This is a longtext column.',
93
+ `mediumtext`='This is a mediumtext column.',
94
+ `text`='This is a text column.',
95
+ `tinytext`='This is a tinytext column.',
96
+ `longblob`=x'000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F',
97
+ `mediumblob`=x'000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F',
98
+ `blob`=x'000102030405060708090A0B0C0D0E0F',
99
+ `tinyblob`=x'0A0B0C0D0E0F',
100
+ `json`='{"a": 10, "b": 2.75, "c": "hello world"}',
101
+ `enum`='one',
102
+ `set`='two',
103
+ `bit`=128
104
+ ;
105
+
106
+ INSERT INTO alltypes SET
107
+ `id`=1,
108
+ `tinyint`=NULL,
109
+ `bool`=NULL,
110
+ `boolean`=NULL,
111
+ `smallint`=NULL,
112
+ `mediumint`=NULL,
113
+ `int24`=NULL,
114
+ `int`=NULL,
115
+ `integer`=NULL,
116
+ `bigint`=NULL,
117
+ `float`=NULL,
118
+ `double`=NULL,
119
+ `real`=NULL,
120
+ `decimal`=NULL,
121
+ `dec`=NULL,
122
+ `fixed`=NULL,
123
+ `numeric`=NULL,
124
+ `date`=NULL,
125
+ `time`=NULL,
126
+ `time_6`=NULL,
127
+ `datetime`=NULL,
128
+ `datetime_6`=NULL,
129
+ `timestamp`=NULL,
130
+ `timestamp_6`=NULL,
131
+ `year`=NULL,
132
+ `char_100`=NULL,
133
+ `binary_100`=NULL,
134
+ `varchar_200`=NULL,
135
+ `longtext`=NULL,
136
+ `mediumtext`=NULL,
137
+ `text`=NULL,
138
+ `tinytext`=NULL,
139
+ `longblob`=NULL,
140
+ `mediumblob`=NULL,
141
+ `blob`=NULL,
142
+ `tinyblob`=NULL,
143
+ `json`=NULL,
144
+ `enum`=NULL,
145
+ `set`=NULL,
146
+ `bit`=NULL
147
+ ;
148
+
149
+ -- Minimum values
150
+ INSERT INTO alltypes SET
151
+ `id`=2,
152
+ `tinyint`=-128,
153
+ `unsigned_tinyint`=0,
154
+ `bool`=-128,
155
+ `boolean`=-128,
156
+ `smallint`=-32768,
157
+ `unsigned_smallint`=0,
158
+ `mediumint`=-8388608,
159
+ `unsigned_mediumint`=0,
160
+ `int24`=-8388608,
161
+ `unsigned_int24`=0,
162
+ `int`=-2147483648,
163
+ `unsigned_int`=0,
164
+ `integer`=-2147483648,
165
+ `unsigned_integer`=0,
166
+ `bigint`=-9223372036854775808,
167
+ `unsigned_bigint`=0,
168
+ `float`=0,
169
+ `double`=-1.7976931348623158e308,
170
+ `real`=-1.7976931348623158e308,
171
+ `decimal`=-99999999999999.999999,
172
+ `dec`=-99999999999999.999999,
173
+ `fixed`=-99999999999999.999999,
174
+ `numeric`=-99999999999999.999999,
175
+ `date`='1000-01-01',
176
+ `time`='-838:59:59',
177
+ `time_6`='-838:59:59.000000',
178
+ `datetime`='1000-01-01 00:00:00',
179
+ `datetime_6`='1000-01-01 00:00:00.000000',
180
+ `timestamp`='1970-01-01 00:00:01',
181
+ `timestamp_6`='1970-01-01 00:00:01.000000',
182
+ `year`=1901,
183
+ `char_100`='',
184
+ `binary_100`=x'',
185
+ `varchar_200`='',
186
+ `varbinary_200`=x'',
187
+ `longtext`='',
188
+ `mediumtext`='',
189
+ `text`='',
190
+ `tinytext`='',
191
+ `longblob`=x'',
192
+ `mediumblob`=x'',
193
+ `blob`=x'',
194
+ `tinyblob`=x'',
195
+ `json`='{}',
196
+ `enum`='one',
197
+ `set`='two',
198
+ `bit`=0
199
+ ;
200
+
201
+ -- Maximum values
202
+ INSERT INTO alltypes SET
203
+ `id`=3,
204
+ `tinyint`=127,
205
+ `unsigned_tinyint`=255,
206
+ `bool`=127,
207
+ `boolean`=127,
208
+ `smallint`=32767,
209
+ `unsigned_smallint`=65535,
210
+ `mediumint`=8388607,
211
+ `unsigned_mediumint`=16777215,
212
+ `int24`=8388607,
213
+ `unsigned_int24`=16777215,
214
+ `int`=2147483647,
215
+ `unsigned_int`=4294967295,
216
+ `integer`=2147483647,
217
+ `unsigned_integer`=4294967295,
218
+ `bigint`=9223372036854775807,
219
+ `unsigned_bigint`=18446744073709551615,
220
+ `float`=0,
221
+ `double`=1.7976931348623158e308,
222
+ `real`=1.7976931348623158e308,
223
+ `decimal`=99999999999999.999999,
224
+ `dec`=99999999999999.999999,
225
+ `fixed`=99999999999999.999999,
226
+ `numeric`=99999999999999.999999,
227
+ `date`='9999-12-31',
228
+ `time`='838:59:59',
229
+ `time_6`='838:59:59.999999',
230
+ `datetime`='9999-12-31 23:59:59',
231
+ `datetime_6`='9999-12-31 23:59:59.999999',
232
+ `timestamp`='2038-01-18 21:14:07',
233
+ `timestamp_6`='2038-01-18 21:14:07.999999',
234
+ `year`=2155,
235
+ `char_100`='',
236
+ `binary_100`=x'',
237
+ `varchar_200`='',
238
+ `varbinary_200`=x'',
239
+ `longtext`='',
240
+ `mediumtext`='',
241
+ `text`='',
242
+ `tinytext`='',
243
+ `longblob`=x'',
244
+ `mediumblob`=x'',
245
+ `blob`=x'',
246
+ `tinyblob`=x'',
247
+ `json`='{}',
248
+ `enum`='one',
249
+ `set`='two',
250
+ `bit`=18446744073709551615
251
+ ;
252
+
253
+ -- Zero values
254
+ --
255
+ -- Note that v8 of SingleStoreDB does not allow zero date/times by
256
+ -- default, so they are set to NULL here.
257
+ --
258
+ INSERT INTO alltypes SET
259
+ `id`=4,
260
+ `tinyint`=0,
261
+ `unsigned_tinyint`=0,
262
+ `bool`=0,
263
+ `boolean`=0,
264
+ `smallint`=0,
265
+ `unsigned_smallint`=0,
266
+ `mediumint`=0,
267
+ `unsigned_mediumint`=0,
268
+ `int24`=0,
269
+ `unsigned_int24`=0,
270
+ `int`=0,
271
+ `unsigned_int`=0,
272
+ `integer`=0,
273
+ `unsigned_integer`=0,
274
+ `bigint`=0,
275
+ `unsigned_bigint`=0,
276
+ `float`=0,
277
+ `double`=0.0,
278
+ `real`=0.0,
279
+ `decimal`=0.0,
280
+ `dec`=0.0,
281
+ `fixed`=0.0,
282
+ `numeric`=0.0,
283
+ `date`=NULL,
284
+ `time`='00:00:00',
285
+ `time_6`='00:00:00.000000',
286
+ `datetime`=NULL,
287
+ `datetime_6`=NULL,
288
+ `timestamp`=NULL,
289
+ `timestamp_6`=NULL,
290
+ `year`=NULL,
291
+ `char_100`='',
292
+ `binary_100`=x'',
293
+ `varchar_200`='',
294
+ `varbinary_200`=x'',
295
+ `longtext`='',
296
+ `mediumtext`='',
297
+ `text`='',
298
+ `tinytext`='',
299
+ `longblob`=x'',
300
+ `mediumblob`=x'',
301
+ `blob`=x'',
302
+ `tinyblob`=x'',
303
+ `json`='{}',
304
+ `enum`='one',
305
+ `set`='two',
306
+ `bit`=0
307
+ ;
@@ -0,0 +1,208 @@
1
+ CREATE TABLE IF NOT EXISTS alltypes_no_nulls (
2
+ `id` INT(11) NOT NULL,
3
+ `tinyint` TINYINT NOT NULL,
4
+ `unsigned_tinyint` TINYINT UNSIGNED NOT NULL,
5
+ `bool` BOOL NOT NULL,
6
+ `boolean` BOOLEAN NOT NULL,
7
+ `smallint` SMALLINT NOT NULL,
8
+ `unsigned_smallint` SMALLINT UNSIGNED NOT NULL,
9
+ `mediumint` MEDIUMINT NOT NULL,
10
+ `unsigned_mediumint` MEDIUMINT UNSIGNED NOT NULL,
11
+ `int24` MEDIUMINT NOT NULL,
12
+ `unsigned_int24` MEDIUMINT UNSIGNED NOT NULL,
13
+ `int` INT NOT NULL,
14
+ `unsigned_int` INT UNSIGNED NOT NULL,
15
+ `integer` INTEGER NOT NULL,
16
+ `unsigned_integer` INTEGER UNSIGNED NOT NULL,
17
+ `bigint` BIGINT NOT NULL,
18
+ `unsigned_bigint` BIGINT UNSIGNED NOT NULL,
19
+ `float` FLOAT NOT NULL,
20
+ `double` DOUBLE NOT NULL,
21
+ `real` REAL NOT NULL,
22
+ `decimal` DECIMAL(20,6) NOT NULL,
23
+ `dec` DEC(20,6) NOT NULL,
24
+ `fixed` FIXED(20,6) NOT NULL,
25
+ `numeric` NUMERIC(20,6) NOT NULL,
26
+ `date` DATE NOT NULL,
27
+ `time` TIME NOT NULL,
28
+ `time_6` TIME(6) NOT NULL,
29
+ `datetime` DATETIME NOT NULL,
30
+ `datetime_6` DATETIME(6) NOT NULL,
31
+ `timestamp` TIMESTAMP NOT NULL,
32
+ `timestamp_6` TIMESTAMP(6) NOT NULL,
33
+ `year` YEAR NOT NULL,
34
+ `char_100` CHAR(100) NOT NULL,
35
+ `binary_100` BINARY(100) NOT NULL,
36
+ `varchar_200` VARCHAR(200) NOT NULL,
37
+ `varbinary_200` VARBINARY(200) NOT NULL,
38
+ `longtext` LONGTEXT NOT NULL,
39
+ `mediumtext` MEDIUMTEXT NOT NULL,
40
+ `text` TEXT NOT NULL,
41
+ `tinytext` TINYTEXT NOT NULL,
42
+ `longblob` LONGBLOB NOT NULL,
43
+ `mediumblob` MEDIUMBLOB NOT NULL,
44
+ `blob` BLOB NOT NULL,
45
+ `tinyblob` TINYBLOB NOT NULL,
46
+ `json` JSON NOT NULL,
47
+ -- `geographypoint` GEOGRAPHYPOINT NOT NULL,
48
+ -- `geography` GEOGRAPHY NOT NULL,
49
+ `enum` ENUM('one', 'two', 'three') NOT NULL,
50
+ `set` SET('one', 'two', 'three') NOT NULL,
51
+ `bit` BIT NOT NULL
52
+ )
53
+ COLLATE='utf8_unicode_ci';
54
+
55
+ INSERT INTO alltypes_no_nulls SET
56
+ `id`=0,
57
+ `tinyint`=80,
58
+ `unsigned_tinyint`=85,
59
+ `bool`=0,
60
+ `boolean`=1,
61
+ `smallint`=-27897,
62
+ `unsigned_smallint`=27897,
63
+ `mediumint`=104729,
64
+ `unsigned_mediumint`=120999,
65
+ `int24`=-200899,
66
+ `unsigned_int24`=407709,
67
+ `int`=-1295369311,
68
+ `unsigned_int`=3872362332,
69
+ `integer`=-1741727421,
70
+ `unsigned_integer`=3198387363,
71
+ `bigint`=-266883847,
72
+ `unsigned_bigint`=980007287362,
73
+ `float`=-146486683.754744,
74
+ `double`=-474646154.719356,
75
+ `real`=-901409776.279346,
76
+ `decimal`=28111097.610822,
77
+ `dec`=389451155.931428,
78
+ `fixed`=-143773416.044092,
79
+ `numeric`=866689461.300046,
80
+ `date`='8524-11-10',
81
+ `time`='00:07:00',
82
+ `time_6`='01:10:00.000002',
83
+ `datetime`='9948-03-11 15:29:22',
84
+ `datetime_6`='1756-10-29 02:02:42.000008',
85
+ `timestamp`='1980-12-31 01:10:23',
86
+ `timestamp_6`='1991-01-02 22:15:10.000006',
87
+ `year`=1923,
88
+ `char_100`='This is a test of a 100 character column.',
89
+ `binary_100`=x'000102030405060708090A0B0C0D0E0F',
90
+ `varchar_200`='This is a test of a variable character column.',
91
+ `varbinary_200`=x'000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F',
92
+ `longtext`='This is a longtext column.',
93
+ `mediumtext`='This is a mediumtext column.',
94
+ `text`='This is a text column.',
95
+ `tinytext`='This is a tinytext column.',
96
+ `longblob`=x'000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F',
97
+ `mediumblob`=x'000102030405060708090A0B0C0D0E0F000102030405060708090A0B0C0D0E0F',
98
+ `blob`=x'000102030405060708090A0B0C0D0E0F',
99
+ `tinyblob`=x'0A0B0C0D0E0F',
100
+ `json`='{"a": 10, "b": 2.75, "c": "hello world"}',
101
+ `enum`='one',
102
+ `set`='two',
103
+ `bit`=128
104
+ ;
105
+
106
+ -- Minimum values
107
+ INSERT INTO alltypes_no_nulls SET
108
+ `id`=2,
109
+ `tinyint`=-128,
110
+ `unsigned_tinyint`=0,
111
+ `bool`=-128,
112
+ `boolean`=-128,
113
+ `smallint`=-32768,
114
+ `unsigned_smallint`=0,
115
+ `mediumint`=-8388608,
116
+ `unsigned_mediumint`=0,
117
+ `int24`=-8388608,
118
+ `unsigned_int24`=0,
119
+ `int`=-2147483648,
120
+ `unsigned_int`=0,
121
+ `integer`=-2147483648,
122
+ `unsigned_integer`=0,
123
+ `bigint`=-9223372036854775808,
124
+ `unsigned_bigint`=0,
125
+ `float`=0,
126
+ `double`=-1.7976931348623158e308,
127
+ `real`=-1.7976931348623158e308,
128
+ `decimal`=-99999999999999.999999,
129
+ `dec`=-99999999999999.999999,
130
+ `fixed`=-99999999999999.999999,
131
+ `numeric`=-99999999999999.999999,
132
+ `date`='1000-01-01',
133
+ `time`='-838:59:59',
134
+ `time_6`='-838:59:59.000000',
135
+ `datetime`='1000-01-01 00:00:00',
136
+ `datetime_6`='1000-01-01 00:00:00.000000',
137
+ `timestamp`='1970-01-01 00:00:01',
138
+ `timestamp_6`='1970-01-01 00:00:01.000000',
139
+ `year`=1901,
140
+ `char_100`='',
141
+ `binary_100`=x'',
142
+ `varchar_200`='',
143
+ `varbinary_200`=x'',
144
+ `longtext`='',
145
+ `mediumtext`='',
146
+ `text`='',
147
+ `tinytext`='',
148
+ `longblob`=x'',
149
+ `mediumblob`=x'',
150
+ `blob`=x'',
151
+ `tinyblob`=x'',
152
+ `json`='{}',
153
+ `enum`='one',
154
+ `set`='two',
155
+ `bit`=0
156
+ ;
157
+
158
+ -- Maximum values
159
+ INSERT INTO alltypes_no_nulls SET
160
+ `id`=3,
161
+ `tinyint`=127,
162
+ `unsigned_tinyint`=255,
163
+ `bool`=127,
164
+ `boolean`=127,
165
+ `smallint`=32767,
166
+ `unsigned_smallint`=65535,
167
+ `mediumint`=8388607,
168
+ `unsigned_mediumint`=16777215,
169
+ `int24`=8388607,
170
+ `unsigned_int24`=16777215,
171
+ `int`=2147483647,
172
+ `unsigned_int`=4294967295,
173
+ `integer`=2147483647,
174
+ `unsigned_integer`=4294967295,
175
+ `bigint`=9223372036854775807,
176
+ `unsigned_bigint`=18446744073709551615,
177
+ `float`=0,
178
+ `double`=1.7976931348623158e308,
179
+ `real`=1.7976931348623158e308,
180
+ `decimal`=99999999999999.999999,
181
+ `dec`=99999999999999.999999,
182
+ `fixed`=99999999999999.999999,
183
+ `numeric`=99999999999999.999999,
184
+ `date`='9999-12-31',
185
+ `time`='838:59:59',
186
+ `time_6`='838:59:59.999999',
187
+ `datetime`='9999-12-31 23:59:59',
188
+ `datetime_6`='9999-12-31 23:59:59.999999',
189
+ `timestamp`='2038-01-18 21:14:07',
190
+ `timestamp_6`='2038-01-18 21:14:07.999999',
191
+ `year`=2155,
192
+ `char_100`='',
193
+ `binary_100`=x'',
194
+ `varchar_200`='',
195
+ `varbinary_200`=x'',
196
+ `longtext`='',
197
+ `mediumtext`='',
198
+ `text`='',
199
+ `tinytext`='',
200
+ `longblob`=x'',
201
+ `mediumblob`=x'',
202
+ `blob`=x'',
203
+ `tinyblob`=x'',
204
+ `json`='{}',
205
+ `enum`='one',
206
+ `set`='two',
207
+ `bit`=18446744073709551615
208
+ ;
@@ -1446,7 +1446,7 @@ class TestConnection(unittest.TestCase):
1446
1446
  # Recent versions of polars have a problem with decimals
1447
1447
  class FixCompare(str):
1448
1448
  def __eq__(self, other):
1449
- return super().__eq__(other.replace('precision=None', 'precision=22'))
1449
+ return super().__eq__(other.replace('precision=None', 'precision=20'))
1450
1450
 
1451
1451
  dtypes = [
1452
1452
  ('id', 'Int32'),
@@ -1469,10 +1469,10 @@ class TestConnection(unittest.TestCase):
1469
1469
  ('float', 'Float32'),
1470
1470
  ('double', 'Float64'),
1471
1471
  ('real', 'Float64'),
1472
- ('decimal', FixCompare('Decimal(precision=22, scale=6)')),
1473
- ('dec', FixCompare('Decimal(precision=22, scale=6)')),
1474
- ('fixed', FixCompare('Decimal(precision=22, scale=6)')),
1475
- ('numeric', FixCompare('Decimal(precision=22, scale=6)')),
1472
+ ('decimal', FixCompare('Decimal(precision=20, scale=6)')),
1473
+ ('dec', FixCompare('Decimal(precision=20, scale=6)')),
1474
+ ('fixed', FixCompare('Decimal(precision=20, scale=6)')),
1475
+ ('numeric', FixCompare('Decimal(precision=20, scale=6)')),
1476
1476
  ('date', 'Date'),
1477
1477
  ('time', "Duration(time_unit='us')"),
1478
1478
  ('time_6', "Duration(time_unit='us')"),
@@ -1593,7 +1593,7 @@ class TestConnection(unittest.TestCase):
1593
1593
  # Recent versions of polars have a problem with decimals
1594
1594
  class FixCompare(str):
1595
1595
  def __eq__(self, other):
1596
- return super().__eq__(other.replace('precision=None', 'precision=22'))
1596
+ return super().__eq__(other.replace('precision=None', 'precision=20'))
1597
1597
 
1598
1598
  dtypes = [
1599
1599
  ('id', 'Int32'),
@@ -1616,10 +1616,10 @@ class TestConnection(unittest.TestCase):
1616
1616
  ('float', 'Float32'),
1617
1617
  ('double', 'Float64'),
1618
1618
  ('real', 'Float64'),
1619
- ('decimal', FixCompare('Decimal(precision=22, scale=6)')),
1620
- ('dec', FixCompare('Decimal(precision=22, scale=6)')),
1621
- ('fixed', FixCompare('Decimal(precision=22, scale=6)')),
1622
- ('numeric', FixCompare('Decimal(precision=22, scale=6)')),
1619
+ ('decimal', FixCompare('Decimal(precision=20, scale=6)')),
1620
+ ('dec', FixCompare('Decimal(precision=20, scale=6)')),
1621
+ ('fixed', FixCompare('Decimal(precision=20, scale=6)')),
1622
+ ('numeric', FixCompare('Decimal(precision=20, scale=6)')),
1623
1623
  ('date', 'Date'),
1624
1624
  ('time', "Duration(time_unit='us')"),
1625
1625
  ('time_6', "Duration(time_unit='us')"),
@@ -1825,10 +1825,10 @@ class TestConnection(unittest.TestCase):
1825
1825
  ('float', 'float'),
1826
1826
  ('double', 'double'),
1827
1827
  ('real', 'double'),
1828
- ('decimal', 'decimal128(22, 6)'),
1829
- ('dec', 'decimal128(22, 6)'),
1830
- ('fixed', 'decimal128(22, 6)'),
1831
- ('numeric', 'decimal128(22, 6)'),
1828
+ ('decimal', 'decimal128(20, 6)'),
1829
+ ('dec', 'decimal128(20, 6)'),
1830
+ ('fixed', 'decimal128(20, 6)'),
1831
+ ('numeric', 'decimal128(20, 6)'),
1832
1832
  ('date', 'date64[ms]'),
1833
1833
  ('time', 'duration[us]'),
1834
1834
  ('time_6', 'duration[us]'),
@@ -1964,10 +1964,10 @@ class TestConnection(unittest.TestCase):
1964
1964
  ('float', 'float'),
1965
1965
  ('double', 'double'),
1966
1966
  ('real', 'double'),
1967
- ('decimal', 'decimal128(22, 6)'),
1968
- ('dec', 'decimal128(22, 6)'),
1969
- ('fixed', 'decimal128(22, 6)'),
1970
- ('numeric', 'decimal128(22, 6)'),
1967
+ ('decimal', 'decimal128(20, 6)'),
1968
+ ('dec', 'decimal128(20, 6)'),
1969
+ ('fixed', 'decimal128(20, 6)'),
1970
+ ('numeric', 'decimal128(20, 6)'),
1971
1971
  ('date', 'date64[ms]'),
1972
1972
  ('time', 'duration[us]'),
1973
1973
  ('time_6', 'duration[us]'),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: singlestoredb
3
- Version: 1.15.3
3
+ Version: 1.15.5
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
@@ -1,5 +1,5 @@
1
- _singlestoredb_accel.pyd,sha256=f_jZ0DFYKYE719Om_8Co6qm__438pfqpzy7JFi0bSyo,66048
2
- singlestoredb/__init__.py,sha256=Wmeo26b80RO-r0WDJSLxad_YrAJzt3Y0-UkHRu_q6tU,2347
1
+ _singlestoredb_accel.pyd,sha256=8mNvo1zBgZ0lTFNQ67pW34WHw8HUa2Jy-j5GTeWiRw4,66048
2
+ singlestoredb/__init__.py,sha256=x67d-TOKMVTj3x5cKh8AQ9eNDWM-SroF0SsCs4XHOHM,2347
3
3
  singlestoredb/auth.py,sha256=RmYiH0Wlc2RXc4pTlRMysxtBI445ggCIwojWKC_eDLE,7844
4
4
  singlestoredb/config.py,sha256=rS8OmWMaHfMJQTkmSw_qwXR2R0HP80eP4gjzVmXkL2E,14419
5
5
  singlestoredb/connection.py,sha256=I2AP_0l7hNARfXiSuVW953CsGYn_rKbTg_NyWEiGHbY,47542
@@ -48,7 +48,7 @@ singlestoredb/functions/signature.py,sha256=1aSFezUgWSRsGcrBjOVVZyZgw0q356y7IWgM
48
48
  singlestoredb/functions/utils.py,sha256=lZPxdYfHxrSfxGWCoF0YZyakVy2iYlozJ1lPSaPKRlo,11190
49
49
  singlestoredb/functions/ext/__init__.py,sha256=5ppI8IZN_zOwoJFdu_Oq9ipxtyHw9n6OMVAa_s9T_yY,24
50
50
  singlestoredb/functions/ext/arrow.py,sha256=mQhwaMpvCH_dP92WIhP_j-stu272n4UAHsFUOBTgnq0,9436
51
- singlestoredb/functions/ext/asgi.py,sha256=trGgDFrOr3p3GeU12Nehoma5zVlGwMnncHzbaqXI2Q0,73763
51
+ singlestoredb/functions/ext/asgi.py,sha256=iyM5t8OCmd9nBtB66nmTjYqwXQhcUxvvMfsnPwU4q8k,74507
52
52
  singlestoredb/functions/ext/json.py,sha256=j9133xOpyuSqb8smBmi_bPvv6OYCbNfpbLbEicyGqmQ,10522
53
53
  singlestoredb/functions/ext/mmap.py,sha256=0BN9OyEONZ174qdZWe2m3Xykt3-QcxyLYBt2iCG772Q,14123
54
54
  singlestoredb/functions/ext/rowdat_1.py,sha256=UNMMUA8mb6iIRfJV2FsdA20Sw6s-LEdHQ_tC4K4g70Q,21836
@@ -71,9 +71,9 @@ singlestoredb/fusion/handlers/job.py,sha256=3enfxHwERH7T4u0FEwOPN0IL0GtepaCYgEsi
71
71
  singlestoredb/fusion/handlers/models.py,sha256=MglLrl57l7sG2K0MDnmnO1wnocdcbEIWvAJS6W74VgE,6481
72
72
  singlestoredb/fusion/handlers/stage.py,sha256=oNl11GYUUQHmIrWsqaA1X8lokvFxFgN0Cez7h3o8XK8,14774
73
73
  singlestoredb/fusion/handlers/utils.py,sha256=nV2lSzKhv7CzM7I_uIh5kmDV0Ec6VeeKoHczx5pVNcw,11009
74
- singlestoredb/fusion/handlers/workspace.py,sha256=NxoEY5xd5lCQmXiim4nhAYCL0agHo1H_rGPpqa31hiw,28397
74
+ singlestoredb/fusion/handlers/workspace.py,sha256=2m8tBM6XY4nUk64uY7puqecFc7fBNQo2G9nDaO2nlS0,30623
75
75
  singlestoredb/http/__init__.py,sha256=4cEDvLloGc3LSpU-PnIwacyu0n5oIIIE6xk2SPyWD_w,939
76
- singlestoredb/http/connection.py,sha256=X-zRf7BfsaKRg8GXcaa5Ic42b9uqEfqqxiI47ZijpDE,41221
76
+ singlestoredb/http/connection.py,sha256=dDoSUOlKlKYkGUpcLkSV76V72HWQeUM9NohcoLtFop8,40994
77
77
  singlestoredb/magics/__init__.py,sha256=fqCBQ0s8o1CYE4Xo_XiSbkLDzLgMNDgpSkOx66-uDZw,1244
78
78
  singlestoredb/magics/run_personal.py,sha256=D71VVRk-qQAZf6fHUbxqTadxcopSklJu7ccoQ82uhV8,5359
79
79
  singlestoredb/magics/run_shared.py,sha256=9Lo3hmESgp0gGLaL1pgLtTA6qsbIZluM7mufcoCAVcI,5264
@@ -88,7 +88,7 @@ singlestoredb/management/manager.py,sha256=SR4FvzxYXrn5WruiHG99upZn-8TPgRUSLW8zB
88
88
  singlestoredb/management/organization.py,sha256=viFG8eLVOs-NeoL6zm8nypFRQ-oiRDD2Sk-bL2b6hvw,6095
89
89
  singlestoredb/management/region.py,sha256=4c4z6ETYrSIK3wm2UA4Wr2Td1UgoechN0l1-mqy5bvQ,4283
90
90
  singlestoredb/management/utils.py,sha256=RtFhdIIliQ6aulYs99fgAQ0FxL2LfV-5oPRd9s_bBok,13626
91
- singlestoredb/management/workspace.py,sha256=UYepKm0D4CKsSQ-sPWwPysPT_YcZw2RjJSOZe5Ri_SA,63852
91
+ singlestoredb/management/workspace.py,sha256=nEQDkMkIiwhh_sPlbQ-m0XDYx8bk44X7p5COCN5ja2M,63874
92
92
  singlestoredb/mysql/__init__.py,sha256=CbpwzNUJPAmKPpIobC0-ugBta_RgHCMq7X7N75QLReY,4669
93
93
  singlestoredb/mysql/_auth.py,sha256=YaqqyvAHmeraBv3BM207rNveUVPM-mPnW20ts_ynVWg,8341
94
94
  singlestoredb/mysql/charset.py,sha256=mnCdMpvdub1S2mm2PSk2j5JddgsWRjsVLtGx-y9TskE,10724
@@ -97,7 +97,7 @@ singlestoredb/mysql/converters.py,sha256=vebFFm6IrC0WgY-5Eh-esaPizY5cq3vDOUlEKGa
97
97
  singlestoredb/mysql/cursors.py,sha256=YoZU5_weniqXcoeA0GVSxmetkPYooiDkXMbVBYUNlrU,27942
98
98
  singlestoredb/mysql/err.py,sha256=aDbmfq08gWVmfgIea735wSeiFdvYbB5wusgd3qTVq1s,2480
99
99
  singlestoredb/mysql/optionfile.py,sha256=bz0cZp8tQZvab1iU7OT0yldHyaMVbvAcUJ3TSNwcmyI,675
100
- singlestoredb/mysql/protocol.py,sha256=UzHcrv0Pgb1FNofuBTnSxpC9VDkgNbPEbBrRETstxAg,14888
100
+ singlestoredb/mysql/protocol.py,sha256=8kQfOt3oINZkGzVgt762Hj-TMMUuf5dL0dUIpnki3iw,15335
101
101
  singlestoredb/mysql/times.py,sha256=yJ3_hSnXnWMXl2OwXnx6hjX7PyilQ3bZHH9rIdL3OXQ,486
102
102
  singlestoredb/mysql/constants/CLIENT.py,sha256=hAo5tQqhc1V7t7tdNd4s6TINwYoDHldyssfvfxNWWPQ,916
103
103
  singlestoredb/mysql/constants/COMMAND.py,sha256=T81MAx6Vkxf5-86PTk2OtENoXtaFSlEckBzzwrI9uXQ,711
@@ -132,11 +132,13 @@ singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py,sha256
132
132
  singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py,sha256=K4EnQCWI_4ShmCv6xHSBDo0B2HVbJvGGYHWygp2bBBk,2920
133
133
  singlestoredb/notebook/__init__.py,sha256=XGvAnkjV_6MjaNv6aqxqDL3ovPApKmNX-2UYH1t0cec,549
134
134
  singlestoredb/notebook/_objects.py,sha256=rDfHGLLwrnuhVMOyNojzrGamykyfOQxZfH2EnFd8vEw,8256
135
- singlestoredb/notebook/_portal.py,sha256=ip3MkJ51syxppUVGRjgqLfR0He4KCZVklFwWT_X270s,10011
135
+ singlestoredb/notebook/_portal.py,sha256=tC8OAw7iose2Ok4dI-bNLVKL2HH3yrijxq5oov6MIdM,11709
136
136
  singlestoredb/server/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  singlestoredb/server/docker.py,sha256=gdGLEaUkPQJQ8u_1C1OQYr4iXPx1s6CmQmXKOrJFn3g,15095
138
138
  singlestoredb/server/free_tier.py,sha256=rugYt_5jIC6AsE2UhR5hiLQKExyOqSXFyBoIaqG2pIc,8653
139
139
  singlestoredb/tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
140
+ singlestoredb/tests/alltypes.sql,sha256=spHLshI9lzO1DeDk6xD8Vr0dpomGEoGLdmzBHfilW9M,7955
141
+ singlestoredb/tests/alltypes_no_nulls.sql,sha256=Eh1gYyu86KnceKGbYvGRnHIQq2w6dpTZ6dvlW2fpq_E,6448
140
142
  singlestoredb/tests/empty.sql,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
141
143
  singlestoredb/tests/local_infile.csv,sha256=0fYxcZcTvcwS2McF4sktFsipRY1G-ClGmCRR1eCqdEQ,45
142
144
  singlestoredb/tests/test.ipynb,sha256=IEgXbByXyWDplZvod1J2SqNHZiPOGdD4oNVMd0ArP7s,234
@@ -145,7 +147,7 @@ singlestoredb/tests/test2.ipynb,sha256=_kBQVvEoinQ1zInNcWFKpbdw-djkLsEO8l3g2MEU_
145
147
  singlestoredb/tests/test2.sql,sha256=CEM8_lX189iQU65G3Pod7lig6osfrveQyoDz6HC35YQ,38
146
148
  singlestoredb/tests/test_basics.py,sha256=tKzeSN8koMRFq5yjb98Wz5VWAOsnUKAETZEJyLhMD_o,49778
147
149
  singlestoredb/tests/test_config.py,sha256=Ad0PDmCnJMOyy9f7WTKiRasSR_3mYRByUlSb7k5ZySg,11502
148
- singlestoredb/tests/test_connection.py,sha256=OXOk6qCJci62orlptwl8S4BkETVPbFP3uMhlZBmnwhk,123340
150
+ singlestoredb/tests/test_connection.py,sha256=PByQMKFDuRejxaLu8Bod8ZJxm4UgTogvz778TqcssEE,123340
149
151
  singlestoredb/tests/test_dbapi.py,sha256=cNJoTEZvYG7ckcwT7xqlkJX-2TDEYGTDDU1Igucp48k,679
150
152
  singlestoredb/tests/test_exceptions.py,sha256=vscMYmdOJr0JmkTAJrNI2w0Q96Nfugjkrt5_lYnw8i0,1176
151
153
  singlestoredb/tests/test_ext_func.py,sha256=YidPnlO7HWsVIbPwdCa33Oo8SyGkP2_Pcuj_pu39r4s,47743
@@ -173,9 +175,9 @@ singlestoredb/utils/results.py,sha256=wR70LhCqlobniZf52r67zYLBOKjWHQm68NAskdRQND
173
175
  singlestoredb/utils/xdict.py,sha256=-wi1lSPTnY99fhVMBhPKJ8cCsQhNG4GMUfkEBDKYgCw,13321
174
176
  sqlx/__init__.py,sha256=4Sdn8HN-Hf8v0_wCt60DCckCg8BvgM3-9r4YVfZycRE,89
175
177
  sqlx/magic.py,sha256=6VBlotgjautjev599tHaTYOfcfOA9m6gV_-P1_Qc4lI,3622
176
- singlestoredb-1.15.3.dist-info/LICENSE,sha256=Bojenzui8aPNjlF3w4ojguDP7sTf8vFV_9Gc2UAG1sg,11542
177
- singlestoredb-1.15.3.dist-info/METADATA,sha256=mw7wyD-0WbCOe3hN6n6M6K1hFBD6YT8Kmt_NJx3B8MQ,5949
178
- singlestoredb-1.15.3.dist-info/WHEEL,sha256=c4k7z5HB0t-y0nBCv6KyJ6KCjn8SEGPddD0lhaPtU3E,96
179
- singlestoredb-1.15.3.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
180
- singlestoredb-1.15.3.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
181
- singlestoredb-1.15.3.dist-info/RECORD,,
178
+ singlestoredb-1.15.5.dist-info/LICENSE,sha256=Bojenzui8aPNjlF3w4ojguDP7sTf8vFV_9Gc2UAG1sg,11542
179
+ singlestoredb-1.15.5.dist-info/METADATA,sha256=wlqAZwBHy_FHYlJX952WIH_z_LtaNvpy_v6KFCOHSsU,5949
180
+ singlestoredb-1.15.5.dist-info/WHEEL,sha256=c4k7z5HB0t-y0nBCv6KyJ6KCjn8SEGPddD0lhaPtU3E,96
181
+ singlestoredb-1.15.5.dist-info/entry_points.txt,sha256=bSLaTWB5zGjpVYPAaI46MkkDup0su-eb3uAhCNYuRV0,48
182
+ singlestoredb-1.15.5.dist-info/top_level.txt,sha256=lA65Vf4qAMfg_s1oG3LEO90h4t1Z-SPDbRqkevI3bSY,40
183
+ singlestoredb-1.15.5.dist-info/RECORD,,