singlestoredb 1.16.1__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.
- singlestoredb/__init__.py +75 -0
- singlestoredb/ai/__init__.py +2 -0
- singlestoredb/ai/chat.py +139 -0
- singlestoredb/ai/embeddings.py +128 -0
- singlestoredb/alchemy/__init__.py +90 -0
- singlestoredb/apps/__init__.py +3 -0
- singlestoredb/apps/_cloud_functions.py +90 -0
- singlestoredb/apps/_config.py +72 -0
- singlestoredb/apps/_connection_info.py +18 -0
- singlestoredb/apps/_dashboards.py +47 -0
- singlestoredb/apps/_process.py +32 -0
- singlestoredb/apps/_python_udfs.py +100 -0
- singlestoredb/apps/_stdout_supress.py +30 -0
- singlestoredb/apps/_uvicorn_util.py +36 -0
- singlestoredb/auth.py +245 -0
- singlestoredb/config.py +484 -0
- singlestoredb/connection.py +1487 -0
- singlestoredb/converters.py +950 -0
- singlestoredb/docstring/__init__.py +33 -0
- singlestoredb/docstring/attrdoc.py +126 -0
- singlestoredb/docstring/common.py +230 -0
- singlestoredb/docstring/epydoc.py +267 -0
- singlestoredb/docstring/google.py +412 -0
- singlestoredb/docstring/numpydoc.py +562 -0
- singlestoredb/docstring/parser.py +100 -0
- singlestoredb/docstring/py.typed +1 -0
- singlestoredb/docstring/rest.py +256 -0
- singlestoredb/docstring/tests/__init__.py +1 -0
- singlestoredb/docstring/tests/_pydoctor.py +21 -0
- singlestoredb/docstring/tests/test_epydoc.py +729 -0
- singlestoredb/docstring/tests/test_google.py +1007 -0
- singlestoredb/docstring/tests/test_numpydoc.py +1100 -0
- singlestoredb/docstring/tests/test_parse_from_object.py +109 -0
- singlestoredb/docstring/tests/test_parser.py +248 -0
- singlestoredb/docstring/tests/test_rest.py +547 -0
- singlestoredb/docstring/tests/test_util.py +70 -0
- singlestoredb/docstring/util.py +141 -0
- singlestoredb/exceptions.py +120 -0
- singlestoredb/functions/__init__.py +16 -0
- singlestoredb/functions/decorator.py +201 -0
- singlestoredb/functions/dtypes.py +1793 -0
- singlestoredb/functions/ext/__init__.py +1 -0
- singlestoredb/functions/ext/arrow.py +375 -0
- singlestoredb/functions/ext/asgi.py +2133 -0
- singlestoredb/functions/ext/json.py +420 -0
- singlestoredb/functions/ext/mmap.py +413 -0
- singlestoredb/functions/ext/rowdat_1.py +724 -0
- singlestoredb/functions/ext/timer.py +89 -0
- singlestoredb/functions/ext/utils.py +218 -0
- singlestoredb/functions/signature.py +1578 -0
- singlestoredb/functions/typing/__init__.py +41 -0
- singlestoredb/functions/typing/numpy.py +20 -0
- singlestoredb/functions/typing/pandas.py +2 -0
- singlestoredb/functions/typing/polars.py +2 -0
- singlestoredb/functions/typing/pyarrow.py +2 -0
- singlestoredb/functions/utils.py +421 -0
- singlestoredb/fusion/__init__.py +11 -0
- singlestoredb/fusion/graphql.py +213 -0
- singlestoredb/fusion/handler.py +916 -0
- singlestoredb/fusion/handlers/__init__.py +0 -0
- singlestoredb/fusion/handlers/export.py +525 -0
- singlestoredb/fusion/handlers/files.py +690 -0
- singlestoredb/fusion/handlers/job.py +660 -0
- singlestoredb/fusion/handlers/models.py +250 -0
- singlestoredb/fusion/handlers/stage.py +502 -0
- singlestoredb/fusion/handlers/utils.py +324 -0
- singlestoredb/fusion/handlers/workspace.py +956 -0
- singlestoredb/fusion/registry.py +249 -0
- singlestoredb/fusion/result.py +399 -0
- singlestoredb/http/__init__.py +27 -0
- singlestoredb/http/connection.py +1267 -0
- singlestoredb/magics/__init__.py +34 -0
- singlestoredb/magics/run_personal.py +137 -0
- singlestoredb/magics/run_shared.py +134 -0
- singlestoredb/management/__init__.py +9 -0
- singlestoredb/management/billing_usage.py +148 -0
- singlestoredb/management/cluster.py +462 -0
- singlestoredb/management/export.py +295 -0
- singlestoredb/management/files.py +1102 -0
- singlestoredb/management/inference_api.py +105 -0
- singlestoredb/management/job.py +887 -0
- singlestoredb/management/manager.py +373 -0
- singlestoredb/management/organization.py +226 -0
- singlestoredb/management/region.py +169 -0
- singlestoredb/management/utils.py +423 -0
- singlestoredb/management/workspace.py +1927 -0
- singlestoredb/mysql/__init__.py +177 -0
- singlestoredb/mysql/_auth.py +298 -0
- singlestoredb/mysql/charset.py +214 -0
- singlestoredb/mysql/connection.py +2032 -0
- singlestoredb/mysql/constants/CLIENT.py +38 -0
- singlestoredb/mysql/constants/COMMAND.py +32 -0
- singlestoredb/mysql/constants/CR.py +78 -0
- singlestoredb/mysql/constants/ER.py +474 -0
- singlestoredb/mysql/constants/EXTENDED_TYPE.py +3 -0
- singlestoredb/mysql/constants/FIELD_TYPE.py +48 -0
- singlestoredb/mysql/constants/FLAG.py +15 -0
- singlestoredb/mysql/constants/SERVER_STATUS.py +10 -0
- singlestoredb/mysql/constants/VECTOR_TYPE.py +6 -0
- singlestoredb/mysql/constants/__init__.py +0 -0
- singlestoredb/mysql/converters.py +271 -0
- singlestoredb/mysql/cursors.py +896 -0
- singlestoredb/mysql/err.py +92 -0
- singlestoredb/mysql/optionfile.py +20 -0
- singlestoredb/mysql/protocol.py +450 -0
- singlestoredb/mysql/tests/__init__.py +19 -0
- singlestoredb/mysql/tests/base.py +126 -0
- singlestoredb/mysql/tests/conftest.py +37 -0
- singlestoredb/mysql/tests/test_DictCursor.py +132 -0
- singlestoredb/mysql/tests/test_SSCursor.py +141 -0
- singlestoredb/mysql/tests/test_basic.py +452 -0
- singlestoredb/mysql/tests/test_connection.py +851 -0
- singlestoredb/mysql/tests/test_converters.py +58 -0
- singlestoredb/mysql/tests/test_cursor.py +141 -0
- singlestoredb/mysql/tests/test_err.py +16 -0
- singlestoredb/mysql/tests/test_issues.py +514 -0
- singlestoredb/mysql/tests/test_load_local.py +75 -0
- singlestoredb/mysql/tests/test_nextset.py +88 -0
- singlestoredb/mysql/tests/test_optionfile.py +27 -0
- singlestoredb/mysql/tests/thirdparty/__init__.py +6 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/__init__.py +9 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/capabilities.py +323 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/dbapi20.py +865 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_capabilities.py +110 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_dbapi20.py +224 -0
- singlestoredb/mysql/tests/thirdparty/test_MySQLdb/test_MySQLdb_nonstandard.py +101 -0
- singlestoredb/mysql/times.py +23 -0
- singlestoredb/notebook/__init__.py +16 -0
- singlestoredb/notebook/_objects.py +213 -0
- singlestoredb/notebook/_portal.py +352 -0
- singlestoredb/py.typed +0 -0
- singlestoredb/pytest.py +352 -0
- singlestoredb/server/__init__.py +0 -0
- singlestoredb/server/docker.py +452 -0
- singlestoredb/server/free_tier.py +267 -0
- singlestoredb/tests/__init__.py +0 -0
- singlestoredb/tests/alltypes.sql +307 -0
- singlestoredb/tests/alltypes_no_nulls.sql +208 -0
- singlestoredb/tests/empty.sql +0 -0
- singlestoredb/tests/ext_funcs/__init__.py +702 -0
- singlestoredb/tests/local_infile.csv +3 -0
- singlestoredb/tests/test.ipynb +18 -0
- singlestoredb/tests/test.sql +680 -0
- singlestoredb/tests/test2.ipynb +18 -0
- singlestoredb/tests/test2.sql +1 -0
- singlestoredb/tests/test_basics.py +1332 -0
- singlestoredb/tests/test_config.py +318 -0
- singlestoredb/tests/test_connection.py +3103 -0
- singlestoredb/tests/test_dbapi.py +27 -0
- singlestoredb/tests/test_exceptions.py +45 -0
- singlestoredb/tests/test_ext_func.py +1472 -0
- singlestoredb/tests/test_ext_func_data.py +1101 -0
- singlestoredb/tests/test_fusion.py +1527 -0
- singlestoredb/tests/test_http.py +288 -0
- singlestoredb/tests/test_management.py +1599 -0
- singlestoredb/tests/test_plugin.py +33 -0
- singlestoredb/tests/test_results.py +171 -0
- singlestoredb/tests/test_types.py +132 -0
- singlestoredb/tests/test_udf.py +737 -0
- singlestoredb/tests/test_udf_returns.py +459 -0
- singlestoredb/tests/test_vectorstore.py +51 -0
- singlestoredb/tests/test_xdict.py +333 -0
- singlestoredb/tests/utils.py +141 -0
- singlestoredb/types.py +373 -0
- singlestoredb/utils/__init__.py +0 -0
- singlestoredb/utils/config.py +950 -0
- singlestoredb/utils/convert_rows.py +69 -0
- singlestoredb/utils/debug.py +13 -0
- singlestoredb/utils/dtypes.py +205 -0
- singlestoredb/utils/events.py +65 -0
- singlestoredb/utils/mogrify.py +151 -0
- singlestoredb/utils/results.py +585 -0
- singlestoredb/utils/xdict.py +425 -0
- singlestoredb/vectorstore.py +192 -0
- singlestoredb/warnings.py +5 -0
- singlestoredb-1.16.1.dist-info/METADATA +165 -0
- singlestoredb-1.16.1.dist-info/RECORD +183 -0
- singlestoredb-1.16.1.dist-info/WHEEL +5 -0
- singlestoredb-1.16.1.dist-info/entry_points.txt +2 -0
- singlestoredb-1.16.1.dist-info/licenses/LICENSE +201 -0
- singlestoredb-1.16.1.dist-info/top_level.txt +3 -0
- sqlx/__init__.py +4 -0
- sqlx/magic.py +113 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# type: ignore
|
|
3
|
+
"""SingleStoreDB Pytest Plugin testing
|
|
4
|
+
|
|
5
|
+
Each of these tests performs the same simple operation which
|
|
6
|
+
would fail if any other test had been run on the same database.
|
|
7
|
+
"""
|
|
8
|
+
from singlestoredb.connection import Cursor
|
|
9
|
+
|
|
10
|
+
# pytest_plugins = ('singlestoredb.pytest',)
|
|
11
|
+
|
|
12
|
+
CREATE_TABLE_STATEMENT = 'create table test_dict (a text)'
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def test_tempdb1(singlestoredb_tempdb: Cursor):
|
|
16
|
+
# alias the fixture
|
|
17
|
+
cursor = singlestoredb_tempdb
|
|
18
|
+
|
|
19
|
+
cursor.execute(CREATE_TABLE_STATEMENT)
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def test_tempdb2(singlestoredb_tempdb: Cursor):
|
|
23
|
+
# alias the fixture
|
|
24
|
+
cursor = singlestoredb_tempdb
|
|
25
|
+
|
|
26
|
+
cursor.execute(CREATE_TABLE_STATEMENT)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_tempdb3(singlestoredb_tempdb: Cursor):
|
|
30
|
+
# alias the fixture
|
|
31
|
+
cursor = singlestoredb_tempdb
|
|
32
|
+
|
|
33
|
+
cursor.execute(CREATE_TABLE_STATEMENT)
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# type: ignore
|
|
3
|
+
"""Test SingleStoreDB results."""
|
|
4
|
+
import os
|
|
5
|
+
import unittest
|
|
6
|
+
|
|
7
|
+
import pandas as pd
|
|
8
|
+
|
|
9
|
+
import singlestoredb as s2
|
|
10
|
+
from singlestoredb.tests import utils
|
|
11
|
+
# import traceback
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class TestResults(unittest.TestCase):
|
|
15
|
+
|
|
16
|
+
dbname: str = ''
|
|
17
|
+
dbexisted: bool = False
|
|
18
|
+
|
|
19
|
+
@classmethod
|
|
20
|
+
def setUpClass(cls):
|
|
21
|
+
sql_file = os.path.join(os.path.dirname(__file__), 'test.sql')
|
|
22
|
+
cls.dbname, cls.dbexisted = utils.load_sql(sql_file)
|
|
23
|
+
|
|
24
|
+
@classmethod
|
|
25
|
+
def tearDownClass(cls):
|
|
26
|
+
if not cls.dbexisted:
|
|
27
|
+
utils.drop_database(cls.dbname)
|
|
28
|
+
|
|
29
|
+
def setUp(self):
|
|
30
|
+
self.conn = s2.connect(database=type(self).dbname)
|
|
31
|
+
self.cur = self.conn.cursor()
|
|
32
|
+
|
|
33
|
+
def tearDown(self):
|
|
34
|
+
try:
|
|
35
|
+
if self.cur is not None:
|
|
36
|
+
self.cur.close()
|
|
37
|
+
except Exception:
|
|
38
|
+
# traceback.print_exc()
|
|
39
|
+
pass
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
if self.conn is not None:
|
|
43
|
+
self.conn.close()
|
|
44
|
+
except Exception:
|
|
45
|
+
# traceback.print_exc()
|
|
46
|
+
pass
|
|
47
|
+
|
|
48
|
+
def test_tuples(self):
|
|
49
|
+
with s2.options(('results.type', 'tuples')):
|
|
50
|
+
with s2.connect(database=type(self).dbname) as conn:
|
|
51
|
+
with conn.cursor() as cur:
|
|
52
|
+
cur.execute('select * from data')
|
|
53
|
+
out = cur.fetchone()
|
|
54
|
+
assert type(out) is tuple, type(out)
|
|
55
|
+
assert len(out) == 3, len(out)
|
|
56
|
+
cur.fetchall()
|
|
57
|
+
|
|
58
|
+
cur.execute('select * from data')
|
|
59
|
+
out = cur.fetchall()
|
|
60
|
+
assert len(out) == 5, len(out)
|
|
61
|
+
assert len(out[0]) == 3, len(out[0])
|
|
62
|
+
assert type(out[0]) is tuple, type(out[0])
|
|
63
|
+
assert sorted(out) == sorted([
|
|
64
|
+
('a', 'antelopes', 2),
|
|
65
|
+
('b', 'bears', 2),
|
|
66
|
+
('c', 'cats', 5),
|
|
67
|
+
('d', 'dogs', 4),
|
|
68
|
+
('e', 'elephants', 0),
|
|
69
|
+
]), out
|
|
70
|
+
|
|
71
|
+
out = cur.fetchall()
|
|
72
|
+
assert len(out) == 0, len(out)
|
|
73
|
+
|
|
74
|
+
def test_namedtuples(self):
|
|
75
|
+
with s2.options(('results.type', 'namedtuples')):
|
|
76
|
+
with s2.connect(database=type(self).dbname) as conn:
|
|
77
|
+
with conn.cursor() as cur:
|
|
78
|
+
cur.execute('select * from data')
|
|
79
|
+
out = cur.fetchone()
|
|
80
|
+
assert isinstance(out, tuple), type(out)
|
|
81
|
+
assert len(out) == 3, len(out)
|
|
82
|
+
assert type(out).__name__ == 'Row', type(out).__name__
|
|
83
|
+
assert hasattr(out, 'id')
|
|
84
|
+
assert hasattr(out, 'name')
|
|
85
|
+
assert hasattr(out, 'value')
|
|
86
|
+
cur.fetchall()
|
|
87
|
+
|
|
88
|
+
cur.execute('select * from data')
|
|
89
|
+
out = cur.fetchall()
|
|
90
|
+
assert len(out) == 5, len(out)
|
|
91
|
+
assert len(out[0]) == 3, len(out[0])
|
|
92
|
+
assert isinstance(out[0], tuple), type(out[0])
|
|
93
|
+
assert type(out[0]).__name__ == 'Row', type(out[0]).__name__
|
|
94
|
+
assert hasattr(out[0], 'id')
|
|
95
|
+
assert hasattr(out[0], 'name')
|
|
96
|
+
assert hasattr(out[0], 'value')
|
|
97
|
+
assert sorted(out) == sorted([
|
|
98
|
+
('a', 'antelopes', 2),
|
|
99
|
+
('b', 'bears', 2),
|
|
100
|
+
('c', 'cats', 5),
|
|
101
|
+
('d', 'dogs', 4),
|
|
102
|
+
('e', 'elephants', 0),
|
|
103
|
+
]), out
|
|
104
|
+
|
|
105
|
+
out = cur.fetchall()
|
|
106
|
+
assert len(out) == 0, len(out)
|
|
107
|
+
|
|
108
|
+
def test_dict(self):
|
|
109
|
+
with s2.options(('results.type', 'dicts')):
|
|
110
|
+
with s2.connect(database=type(self).dbname) as conn:
|
|
111
|
+
with conn.cursor() as cur:
|
|
112
|
+
cur.execute('select * from data')
|
|
113
|
+
out = cur.fetchone()
|
|
114
|
+
assert type(out) is dict, type(out)
|
|
115
|
+
assert len(out) == 3, len(out)
|
|
116
|
+
cur.fetchall()
|
|
117
|
+
|
|
118
|
+
cur.execute('select * from data')
|
|
119
|
+
out = cur.fetchall()
|
|
120
|
+
assert type(out[0]) is dict, type(out[0])
|
|
121
|
+
assert len(out) == 5, len(out)
|
|
122
|
+
assert len(out[0]) == 3, len(out[0])
|
|
123
|
+
assert sorted(out, key=lambda x: x['id']) == sorted(
|
|
124
|
+
[
|
|
125
|
+
dict(id='a', name='antelopes', value=2),
|
|
126
|
+
dict(id='b', name='bears', value=2),
|
|
127
|
+
dict(id='c', name='cats', value=5),
|
|
128
|
+
dict(id='d', name='dogs', value=4),
|
|
129
|
+
dict(id='e', name='elephants', value=0),
|
|
130
|
+
], key=lambda x: x['id'],
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
out = cur.fetchall()
|
|
134
|
+
assert len(out) == 0, len(out)
|
|
135
|
+
|
|
136
|
+
def _test_dataframe(self):
|
|
137
|
+
with s2.options(('results.type', 'dataframe')):
|
|
138
|
+
with s2.connect(database=type(self).dbname) as conn:
|
|
139
|
+
with conn.cursor() as cur:
|
|
140
|
+
cur.execute('select * from data')
|
|
141
|
+
out = cur.fetchone()
|
|
142
|
+
assert type(out) is pd.DataFrame, type(out)
|
|
143
|
+
assert len(out) == 1, len(out)
|
|
144
|
+
cur.fetchall()
|
|
145
|
+
|
|
146
|
+
cur.execute('select * from data')
|
|
147
|
+
out = cur.fetchall()
|
|
148
|
+
assert type(out) is pd.DataFrame, type(out)
|
|
149
|
+
assert len(out) == 5, len(out)
|
|
150
|
+
out = out.sort_values('id').reset_index(drop=True)
|
|
151
|
+
exp = pd.DataFrame(
|
|
152
|
+
data=[
|
|
153
|
+
('a', 'antelopes', 2),
|
|
154
|
+
('b', 'bears', 2),
|
|
155
|
+
('c', 'cats', 5),
|
|
156
|
+
('d', 'dogs', 4),
|
|
157
|
+
('e', 'elephants', 0),
|
|
158
|
+
], columns=['id', 'name', 'value'],
|
|
159
|
+
).sort_values('id').reset_index(drop=True)
|
|
160
|
+
assert list(out.columns) == list(exp.columns), list(out.columns)
|
|
161
|
+
assert [list(x) for x in list(out.values)] == \
|
|
162
|
+
[list(x) for x in list(exp.values)], \
|
|
163
|
+
[list(x) for x in list(out.values)]
|
|
164
|
+
|
|
165
|
+
out = cur.fetchall()
|
|
166
|
+
assert len(out) == 0, len(out)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
if __name__ == '__main__':
|
|
170
|
+
import nose2
|
|
171
|
+
nose2.main()
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# type: ignore
|
|
3
|
+
"""Test SingleStoreDB data types."""
|
|
4
|
+
import datetime
|
|
5
|
+
import unittest
|
|
6
|
+
|
|
7
|
+
import singlestoredb.types as st
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class TestTypes(unittest.TestCase):
|
|
11
|
+
|
|
12
|
+
def test_date_from_ticks(self):
|
|
13
|
+
dt = st.DateFromTicks(9999)
|
|
14
|
+
ts = datetime.date.fromtimestamp(9999)
|
|
15
|
+
assert dt == ts
|
|
16
|
+
|
|
17
|
+
def test_time_from_ticks(self):
|
|
18
|
+
tm = st.TimeFromTicks(9999)
|
|
19
|
+
ts = datetime.datetime.fromtimestamp(9999)
|
|
20
|
+
ts = datetime.time(hour=ts.hour, minute=ts.minute, second=ts.second)
|
|
21
|
+
assert tm == ts
|
|
22
|
+
|
|
23
|
+
def test_timestamp_from_ticks(self):
|
|
24
|
+
tm = st.TimestampFromTicks(9999)
|
|
25
|
+
ts = datetime.datetime.fromtimestamp(9999)
|
|
26
|
+
assert tm == ts
|
|
27
|
+
|
|
28
|
+
def test_dbapitype_eq(self):
|
|
29
|
+
ct = st.ColumnType
|
|
30
|
+
|
|
31
|
+
assert st.STRING == ct.CHAR
|
|
32
|
+
assert st.STRING == 'CHAR'
|
|
33
|
+
assert st.STRING == 254
|
|
34
|
+
assert st.STRING == ct.VARCHAR
|
|
35
|
+
assert st.STRING == 'VARCHAR'
|
|
36
|
+
assert st.STRING == 15
|
|
37
|
+
assert st.STRING == ct.VARSTRING
|
|
38
|
+
assert st.STRING == 'VARSTRING'
|
|
39
|
+
assert st.STRING == 253
|
|
40
|
+
assert st.STRING == ct.STRING
|
|
41
|
+
assert st.STRING == 'STRING'
|
|
42
|
+
assert st.STRING != 'BINARY'
|
|
43
|
+
assert st.STRING != 'VARBINARY'
|
|
44
|
+
|
|
45
|
+
# Because MySQL uses the same type code for strings and binary
|
|
46
|
+
# we can't tell the difference between these.
|
|
47
|
+
# assert st.STRING != ct.BINARY
|
|
48
|
+
|
|
49
|
+
assert st.BINARY == ct.BINARY
|
|
50
|
+
assert st.BINARY == ct.VARBINARY
|
|
51
|
+
|
|
52
|
+
assert st.NUMBER == ct.DECIMAL
|
|
53
|
+
assert st.NUMBER == ct.TINY
|
|
54
|
+
assert st.NUMBER == ct.LONG
|
|
55
|
+
assert st.NUMBER == ct.FLOAT
|
|
56
|
+
assert st.NUMBER == ct.DOUBLE
|
|
57
|
+
assert st.NUMBER != ct.STRING
|
|
58
|
+
assert st.NUMBER != ct.BINARY
|
|
59
|
+
|
|
60
|
+
assert st.DATETIME == ct.DATETIME
|
|
61
|
+
assert st.DATETIME != ct.YEAR
|
|
62
|
+
assert st.DATETIME != ct.DATE
|
|
63
|
+
assert st.DATETIME != ct.TIME
|
|
64
|
+
|
|
65
|
+
assert st.ROWID != ct.LONG
|
|
66
|
+
assert st.ROWID != ct.STRING
|
|
67
|
+
assert st.ROWID != ct.BINARY
|
|
68
|
+
|
|
69
|
+
def test_str(self):
|
|
70
|
+
out = str(st.NUMBER)
|
|
71
|
+
assert 'BIGINT' in out
|
|
72
|
+
assert 'BIT' in out
|
|
73
|
+
assert 'BOOL' in out
|
|
74
|
+
assert 'DECIMAL' in out
|
|
75
|
+
assert 'LONG' in out
|
|
76
|
+
assert '246' in out
|
|
77
|
+
|
|
78
|
+
def test_repr(self):
|
|
79
|
+
assert str(st.NUMBER) == repr(st.NUMBER)
|
|
80
|
+
|
|
81
|
+
def test_name(self):
|
|
82
|
+
ct = st.ColumnType
|
|
83
|
+
assert ct.DEC.name == 'DECIMAL', ct.DEC.name
|
|
84
|
+
assert ct.BOOL.name == 'TINY', ct.BOOL.name
|
|
85
|
+
assert ct.BIT.name == 'BIT', ct.BIT.name
|
|
86
|
+
assert ct.LONGBLOB.name == 'LONGBLOB', ct.LONGBLOB.name
|
|
87
|
+
assert ct.LONGTEXT.name == 'LONGTEXT', ct.LONGTEXT.name
|
|
88
|
+
|
|
89
|
+
def test_code(self):
|
|
90
|
+
ct = st.ColumnType
|
|
91
|
+
assert ct.DEC.code == 0, ct.DEC.code
|
|
92
|
+
assert ct.BOOL.code == 1, ct.BOOL.code
|
|
93
|
+
assert ct.BIT.code == 16, ct.BIT.code
|
|
94
|
+
assert ct.LONGBLOB.code == 251, ct.LONGBLOB.code
|
|
95
|
+
assert ct.LONGTEXT.code == 251, ct.LONGTEXT.code
|
|
96
|
+
|
|
97
|
+
def test_get_code(self):
|
|
98
|
+
ct = st.ColumnType
|
|
99
|
+
assert ct.get_code('DECIMAL') == 0, ct.get_code('DECIMAL')
|
|
100
|
+
assert ct.get_code('TINY') == 1, ct.get_code('TINY')
|
|
101
|
+
assert ct.get_code('BIT') == 16, ct.get_code('BIT')
|
|
102
|
+
assert ct.get_code('LONGBLOB') == 251, ct.get_code('LONGBLOB')
|
|
103
|
+
assert ct.get_code('LONGTEXT') == 251, ct.get_code('LONGTEXT')
|
|
104
|
+
|
|
105
|
+
assert ct.get_code(0) == 0, ct.get_code(0)
|
|
106
|
+
assert ct.get_code(1) == 1, ct.get_code(1)
|
|
107
|
+
assert ct.get_code(16) == 16, ct.get_code(16)
|
|
108
|
+
|
|
109
|
+
assert ct.get_code(int) == 8, ct.get_code(int)
|
|
110
|
+
assert ct.get_code(float) == 5, ct.get_code(float)
|
|
111
|
+
assert ct.get_code(str) == 15, ct.get_code(str)
|
|
112
|
+
|
|
113
|
+
def test_get_name(self):
|
|
114
|
+
ct = st.ColumnType
|
|
115
|
+
assert ct.get_name(0) == 'DECIMAL', ct.get_name(0)
|
|
116
|
+
assert ct.get_name(1) == 'TINY', ct.get_name(1)
|
|
117
|
+
assert ct.get_name(16) == 'BIT', ct.get_name(16)
|
|
118
|
+
assert ct.get_name(251) == 'LONGBLOB', ct.get_name(251)
|
|
119
|
+
assert ct.get_name(251) == 'LONGBLOB', ct.get_name(251)
|
|
120
|
+
|
|
121
|
+
assert ct.get_name('dec') == 'DECIMAL', ct.get_name('dec')
|
|
122
|
+
assert ct.get_name('bool') == 'TINY', ct.get_name('bool')
|
|
123
|
+
assert ct.get_name('bigint') == 'BIGINT', ct.get_name('bigint')
|
|
124
|
+
|
|
125
|
+
assert ct.get_name(int) == 'BIGINT', ct.get_name(int)
|
|
126
|
+
assert ct.get_name(float) == 'DOUBLE', ct.get_name(float)
|
|
127
|
+
assert ct.get_name(str) == 'VARBINARY', ct.get_name(str)
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
if __name__ == '__main__':
|
|
131
|
+
import nose2
|
|
132
|
+
nose2.main()
|