sqlalchemy-iris 0.15.2__tar.gz → 0.15.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlalchemy_iris-0.15.2/sqlalchemy_iris.egg-info → sqlalchemy_iris-0.15.3}/PKG-INFO +1 -1
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_DBAPI.py +2 -1
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/setup.cfg +1 -1
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/alembic.py +7 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/base.py +11 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3/sqlalchemy_iris.egg-info}/PKG-INFO +1 -1
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/tests/test_suite.py +198 -153
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/LICENSE +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/README.md +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_BufferReader.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_BufferWriter.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_ConnectionInformation.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_ConnectionParameters.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_Constant.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_DBList.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_Device.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_GatewayContext.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_GatewayException.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_GatewayUtility.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRIS.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISConnection.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISEmbedded.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISGlobalNode.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISGlobalNodeView.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISIterator.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISList.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISNative.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISOREF.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISObject.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_IRISReference.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_InStream.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_LegacyIterator.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_ListItem.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_ListReader.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_ListWriter.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_LogFileStream.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_MessageHeader.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_OutStream.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_PrintStream.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_PythonGateway.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_SharedMemorySocket.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/__init__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/__main__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_Column.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_Descriptor.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_IRISStream.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_Message.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_Parameter.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_ParameterCollection.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_ResultSetRow.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_SQLType.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/__init__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_PreParser.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_Scanner.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_Token.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_TokenList.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/__init__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_BusinessHost.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_BusinessOperation.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_BusinessProcess.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_BusinessService.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_Common.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_Director.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISBusinessOperation.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISBusinessService.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISInboundAdapter.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISOutboundAdapter.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_InboundAdapter.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_Message.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_OutboundAdapter.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/__init__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/iris/__init__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/iris/__init__.pyi +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/iris/iris_ipm.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/iris/iris_ipm.pyi +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/irisnative/_IRISNative.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/irisnative/__init__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/setup.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/__init__.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/embedded.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/information_schema.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/iris.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/irisasync.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/provision.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/requirements.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris/types.py +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris.egg-info/SOURCES.txt +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris.egg-info/dependency_links.txt +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris.egg-info/entry_points.txt +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris.egg-info/requires.txt +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris.egg-info/top_level.txt +0 -0
- {sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/tests/test_alembic.py +0 -0
@@ -1,3 +1,4 @@
|
|
1
|
+
from typing import Union
|
1
2
|
import struct
|
2
3
|
import copy
|
3
4
|
import enum
|
@@ -43,7 +44,7 @@ def embedded_connect(*args, hostname=None, port=None, namespace=None, username=N
|
|
43
44
|
return connection
|
44
45
|
|
45
46
|
|
46
|
-
def connect(*args, embedded=False, hostname=None, port=None, namespace=None, username=None, password=None, **kw) -> _IRISConnection
|
47
|
+
def connect(*args, embedded=False, hostname=None, port=None, namespace=None, username=None, password=None, **kw) -> Union[_IRISConnection, _IRISEmbedded]:
|
47
48
|
try:
|
48
49
|
if not embedded:
|
49
50
|
return native_connect(
|
@@ -7,6 +7,7 @@ from typing import Any
|
|
7
7
|
from sqlalchemy.ext.compiler import compiles
|
8
8
|
from sqlalchemy.sql.base import Executable
|
9
9
|
from sqlalchemy.sql.elements import ClauseElement
|
10
|
+
from sqlalchemy.sql.schema import CheckConstraint
|
10
11
|
from sqlalchemy.sql.type_api import TypeEngine
|
11
12
|
from sqlalchemy.sql import table
|
12
13
|
from sqlalchemy import types
|
@@ -134,6 +135,12 @@ class IRISImpl(DefaultImpl):
|
|
134
135
|
**kw,
|
135
136
|
)
|
136
137
|
|
138
|
+
def add_constraint(self, const: Any) -> None:
|
139
|
+
if isinstance(const, CheckConstraint):
|
140
|
+
# just ignore it
|
141
|
+
return
|
142
|
+
super().add_constraint(const)
|
143
|
+
|
137
144
|
|
138
145
|
class _ExecDropForeignKey(Executable, ClauseElement):
|
139
146
|
inherit_cache = False
|
@@ -591,6 +591,12 @@ class IRISCompiler(sql.compiler.SQLCompiler):
|
|
591
591
|
self.process(binary.right, **kw),
|
592
592
|
)
|
593
593
|
|
594
|
+
def visit_concat_func(
|
595
|
+
self, func, **kw
|
596
|
+
):
|
597
|
+
args = [self.process(clause, **kw) for clause in func.clauses.clauses]
|
598
|
+
return ' || '.join(args)
|
599
|
+
|
594
600
|
def visit_mod_binary(self, binary, operator, **kw):
|
595
601
|
return (
|
596
602
|
self.process(binary.left, **kw) + " # " + self.process(binary.right, **kw)
|
@@ -955,6 +961,11 @@ There are no access to %Dictionary, may be required for some advanced features,
|
|
955
961
|
return row[0]
|
956
962
|
return None
|
957
963
|
|
964
|
+
def get_isolation_level_values(self, dbapi_connection):
|
965
|
+
levels = set(self._isolation_lookup)
|
966
|
+
levels.add("AUTOCOMMIT")
|
967
|
+
return levels
|
968
|
+
|
958
969
|
def get_isolation_level(self, connection):
|
959
970
|
try:
|
960
971
|
level = int(self._get_option(connection, "IsolationMode"))
|
@@ -9,10 +9,11 @@ from sqlalchemy.testing.assertions import eq_
|
|
9
9
|
from sqlalchemy.testing import config
|
10
10
|
from sqlalchemy.orm import Session
|
11
11
|
from sqlalchemy import testing
|
12
|
-
from sqlalchemy import Table, Column, select
|
12
|
+
from sqlalchemy import Table, Column, select, func
|
13
13
|
from sqlalchemy.types import Integer
|
14
14
|
from sqlalchemy.types import String
|
15
15
|
from sqlalchemy.types import VARBINARY
|
16
|
+
from sqlalchemy.types import TEXT
|
16
17
|
from sqlalchemy.types import BINARY
|
17
18
|
from sqlalchemy_iris import TINYINT
|
18
19
|
from sqlalchemy_iris import INTEGER
|
@@ -25,6 +26,30 @@ from sqlalchemy.testing.suite import * # noqa
|
|
25
26
|
|
26
27
|
from sqlalchemy import __version__ as sqlalchemy_version
|
27
28
|
|
29
|
+
if sqlalchemy_version.startswith("2."):
|
30
|
+
from sqlalchemy.testing.suite import (
|
31
|
+
BizarroCharacterFKResolutionTest as _BizarroCharacterFKResolutionTest,
|
32
|
+
)
|
33
|
+
|
34
|
+
class BizarroCharacterFKResolutionTest(_BizarroCharacterFKResolutionTest):
|
35
|
+
@testing.combinations(
|
36
|
+
("id",), ("(3)",), ("col%p",), ("[brack]",), argnames="columnname"
|
37
|
+
)
|
38
|
+
@testing.variation("use_composite", [True, False])
|
39
|
+
@testing.combinations(
|
40
|
+
("plain",),
|
41
|
+
# ("(2)",), not in IRIS
|
42
|
+
("per % cent",),
|
43
|
+
("[brackets]",),
|
44
|
+
argnames="tablename",
|
45
|
+
)
|
46
|
+
def test_fk_ref(
|
47
|
+
self, connection, metadata, use_composite, tablename, columnname
|
48
|
+
):
|
49
|
+
super().test_fk_ref(
|
50
|
+
connection, metadata, use_composite, tablename, columnname
|
51
|
+
)
|
52
|
+
|
28
53
|
|
29
54
|
class CompoundSelectTest(_CompoundSelectTest):
|
30
55
|
@pytest.mark.skip()
|
@@ -269,175 +294,195 @@ class IRISEnumTest(fixtures.TablesTest):
|
|
269
294
|
)
|
270
295
|
|
271
296
|
|
272
|
-
|
273
|
-
|
274
|
-
BizarroCharacterFKResolutionTest as _BizarroCharacterFKResolutionTest,
|
275
|
-
)
|
297
|
+
class IRISListBuildTest(fixtures.TablesTest):
|
298
|
+
__backend__ = True
|
276
299
|
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
("plain",),
|
284
|
-
# ("(2)",), not in IRIS
|
285
|
-
("per % cent",),
|
286
|
-
("[brackets]",),
|
287
|
-
argnames="tablename",
|
300
|
+
@classmethod
|
301
|
+
def define_tables(cls, metadata):
|
302
|
+
Table(
|
303
|
+
"data",
|
304
|
+
metadata,
|
305
|
+
Column("val", IRISListBuild(10, float)),
|
288
306
|
)
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
307
|
+
|
308
|
+
@classmethod
|
309
|
+
def fixtures(cls):
|
310
|
+
return dict(
|
311
|
+
data=(
|
312
|
+
("val",),
|
313
|
+
([1.0] * 50,),
|
314
|
+
([1.23] * 50,),
|
315
|
+
([i for i in range(0, 50)],),
|
316
|
+
(None,),
|
294
317
|
)
|
318
|
+
)
|
295
319
|
|
296
|
-
|
297
|
-
|
320
|
+
def _assert_result(self, select, result):
|
321
|
+
with config.db.connect() as conn:
|
322
|
+
eq_(conn.execute(select).fetchall(), result)
|
298
323
|
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
324
|
+
def test_listbuild(self):
|
325
|
+
self._assert_result(
|
326
|
+
select(self.tables.data),
|
327
|
+
[
|
328
|
+
([1.0] * 50,),
|
329
|
+
([1.23] * 50,),
|
330
|
+
([i for i in range(0, 50)],),
|
331
|
+
(None,),
|
332
|
+
],
|
333
|
+
)
|
334
|
+
self._assert_result(
|
335
|
+
select(self.tables.data).where(self.tables.data.c.val == [1.0] * 50),
|
336
|
+
[
|
337
|
+
([1.0] * 50,),
|
338
|
+
],
|
339
|
+
)
|
306
340
|
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
data
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
)
|
317
|
-
)
|
341
|
+
self._assert_result(
|
342
|
+
select(
|
343
|
+
self.tables.data,
|
344
|
+
self.tables.data.c.val.func("$listsame", [1.0] * 50).label("same"),
|
345
|
+
).limit(1),
|
346
|
+
[
|
347
|
+
([1.0] * 50, 1),
|
348
|
+
],
|
349
|
+
)
|
318
350
|
|
319
|
-
def _assert_result(self, select, result):
|
320
|
-
with config.db.connect() as conn:
|
321
|
-
eq_(conn.execute(select).fetchall(), result)
|
322
351
|
|
323
|
-
|
324
|
-
|
325
|
-
select(self.tables.data),
|
326
|
-
[
|
327
|
-
([1.0] * 50,),
|
328
|
-
([1.23] * 50,),
|
329
|
-
([i for i in range(0, 50)],),
|
330
|
-
(None,),
|
331
|
-
],
|
332
|
-
)
|
333
|
-
self._assert_result(
|
334
|
-
select(self.tables.data).where(self.tables.data.c.val == [1.0] * 50),
|
335
|
-
[
|
336
|
-
([1.0] * 50,),
|
337
|
-
],
|
338
|
-
)
|
352
|
+
class IRISVectorTest(fixtures.TablesTest):
|
353
|
+
__backend__ = True
|
339
354
|
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
355
|
+
__requires__ = ("iris_vector",)
|
356
|
+
|
357
|
+
@classmethod
|
358
|
+
def define_tables(cls, metadata):
|
359
|
+
Table(
|
360
|
+
"data",
|
361
|
+
metadata,
|
362
|
+
Column("id", INTEGER),
|
363
|
+
Column("emb", IRISVector(3, float)),
|
364
|
+
)
|
365
|
+
|
366
|
+
@classmethod
|
367
|
+
def fixtures(cls):
|
368
|
+
return dict(
|
369
|
+
data=(
|
370
|
+
(
|
371
|
+
"id",
|
372
|
+
"emb",
|
373
|
+
),
|
374
|
+
(
|
375
|
+
1,
|
376
|
+
[1, 1, 1],
|
377
|
+
),
|
378
|
+
(
|
379
|
+
2,
|
380
|
+
[2, 2, 2],
|
381
|
+
),
|
382
|
+
(
|
383
|
+
3,
|
384
|
+
[1, 1, 2],
|
385
|
+
),
|
348
386
|
)
|
387
|
+
)
|
349
388
|
|
350
|
-
|
351
|
-
|
389
|
+
def _assert_result(self, select, result):
|
390
|
+
with config.db.connect() as conn:
|
391
|
+
eq_(conn.execute(select).fetchall(), result)
|
352
392
|
|
353
|
-
|
393
|
+
def test_vector(self):
|
394
|
+
self._assert_result(
|
395
|
+
select(self.tables.data.c.emb),
|
396
|
+
[
|
397
|
+
([1, 1, 1],),
|
398
|
+
([2, 2, 2],),
|
399
|
+
([1, 1, 2],),
|
400
|
+
],
|
401
|
+
)
|
402
|
+
self._assert_result(
|
403
|
+
select(self.tables.data.c.id).where(self.tables.data.c.emb == [2, 2, 2]),
|
404
|
+
[
|
405
|
+
(2,),
|
406
|
+
],
|
407
|
+
)
|
354
408
|
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
409
|
+
def test_cosine(self):
|
410
|
+
self._assert_result(
|
411
|
+
select(
|
412
|
+
self.tables.data.c.id,
|
413
|
+
).order_by(self.tables.data.c.emb.cosine([1, 1, 1])),
|
414
|
+
[
|
415
|
+
(1,),
|
416
|
+
(2,),
|
417
|
+
(3,),
|
418
|
+
],
|
419
|
+
)
|
363
420
|
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
data
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
),
|
376
|
-
(
|
377
|
-
2,
|
378
|
-
[2, 2, 2],
|
379
|
-
),
|
380
|
-
(
|
381
|
-
3,
|
382
|
-
[1, 1, 2],
|
383
|
-
),
|
384
|
-
)
|
385
|
-
)
|
421
|
+
def test_cosine_distance(self):
|
422
|
+
self._assert_result(
|
423
|
+
select(
|
424
|
+
self.tables.data.c.id,
|
425
|
+
).order_by(1 - self.tables.data.c.emb.cosine_distance([1, 1, 1])),
|
426
|
+
[
|
427
|
+
(1,),
|
428
|
+
(2,),
|
429
|
+
(3,),
|
430
|
+
],
|
431
|
+
)
|
386
432
|
|
387
|
-
|
388
|
-
|
389
|
-
|
433
|
+
def test_max_inner_product(self):
|
434
|
+
self._assert_result(
|
435
|
+
select(
|
436
|
+
self.tables.data.c.id,
|
437
|
+
).order_by(self.tables.data.c.emb.max_inner_product([1, 1, 1])),
|
438
|
+
[
|
439
|
+
(1,),
|
440
|
+
(3,),
|
441
|
+
(2,),
|
442
|
+
],
|
443
|
+
)
|
390
444
|
|
391
|
-
def test_vector(self):
|
392
|
-
self._assert_result(
|
393
|
-
select(self.tables.data.c.emb),
|
394
|
-
[
|
395
|
-
([1, 1, 1],),
|
396
|
-
([2, 2, 2],),
|
397
|
-
([1, 1, 2],),
|
398
|
-
],
|
399
|
-
)
|
400
|
-
self._assert_result(
|
401
|
-
select(self.tables.data.c.id).where(
|
402
|
-
self.tables.data.c.emb == [2, 2, 2]
|
403
|
-
),
|
404
|
-
[
|
405
|
-
(2,),
|
406
|
-
],
|
407
|
-
)
|
408
445
|
|
409
|
-
|
410
|
-
|
411
|
-
select(
|
412
|
-
self.tables.data.c.id,
|
413
|
-
).order_by(self.tables.data.c.emb.cosine([1, 1, 1])),
|
414
|
-
[
|
415
|
-
(1,),
|
416
|
-
(2,),
|
417
|
-
(3,),
|
418
|
-
],
|
419
|
-
)
|
446
|
+
class ConcatTest(fixtures.TablesTest):
|
447
|
+
__backend__ = True
|
420
448
|
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
(3,),
|
430
|
-
],
|
431
|
-
)
|
449
|
+
@classmethod
|
450
|
+
def define_tables(cls, metadata):
|
451
|
+
Table(
|
452
|
+
"data",
|
453
|
+
metadata,
|
454
|
+
Column("sometext", TEXT),
|
455
|
+
Column("testdata", TEXT),
|
456
|
+
)
|
432
457
|
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
458
|
+
@classmethod
|
459
|
+
def fixtures(cls):
|
460
|
+
return dict(
|
461
|
+
data=(
|
462
|
+
(
|
463
|
+
"sometext",
|
464
|
+
"testdata",
|
465
|
+
),
|
466
|
+
(
|
467
|
+
"sometestdata",
|
468
|
+
"test",
|
469
|
+
),
|
443
470
|
)
|
471
|
+
)
|
472
|
+
|
473
|
+
def _assert_result(self, select, result):
|
474
|
+
with config.db.connect() as conn:
|
475
|
+
eq_(conn.execute(select).fetchall(), result)
|
476
|
+
|
477
|
+
def test_concat_func(self):
|
478
|
+
self._assert_result(
|
479
|
+
select(
|
480
|
+
self.tables.data.c.sometext,
|
481
|
+
).filter(
|
482
|
+
self.tables.data.c.sometext
|
483
|
+
== func.concat("some", self.tables.data.c.testdata, "data")
|
484
|
+
),
|
485
|
+
[
|
486
|
+
("sometestdata",),
|
487
|
+
],
|
488
|
+
)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_ConnectionInformation.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/_ConnectionParameters.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/_ParameterCollection.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_PreParser.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_Scanner.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_Token.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/_TokenList.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/dbapi/preparser/__init__.py
RENAMED
File without changes
|
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_BusinessOperation.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISBusinessOperation.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISBusinessService.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISInboundAdapter.py
RENAMED
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/intersystems_iris/pex/_IRISOutboundAdapter.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{sqlalchemy_iris-0.15.2 → sqlalchemy_iris-0.15.3}/sqlalchemy_iris.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|