Skip to content

Commit

Permalink
some irisasync support
Browse files Browse the repository at this point in the history
  • Loading branch information
daimor committed Apr 18, 2024
1 parent f9c79a0 commit aac223e
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 9 deletions.
2 changes: 2 additions & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ addopts= --tb native -v -r fxX --maxfail=25 -p no:warnings

[db]
default=iris://_SYSTEM:SYS@localhost:1972/USER
iris=iris://_SYSTEM:SYS@localhost:1972/USER
irisasync=iris+irisasync://_SYSTEM:SYS@localhost:1972/USER
irisemb=iris+emb:///
sqlite=sqlite:///:memory:

Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"sqlalchemy.dialects": [
"iris = sqlalchemy_iris.iris:IRISDialect_iris",
"iris.emb = sqlalchemy_iris.embedded:IRISDialect_emb",
"iris.irisasync = sqlalchemy_iris.irisasync:IRISDialect_irisasync",
]
},
)
1 change: 1 addition & 0 deletions sqlalchemy_iris/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@

_registry.register("iris.iris", "sqlalchemy_iris.iris", "IRISDialect_iris")
_registry.register("iris.emb", "sqlalchemy_iris.embedded", "IRISDialect_emb")
_registry.register("iris.irisasync", "sqlalchemy_iris.irisasync", "IRISDialect_irisasync")

__all__ = [
"BIGINT",
Expand Down
28 changes: 19 additions & 9 deletions sqlalchemy_iris/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -884,8 +884,12 @@ def __init__(self, **kwargs):

def _get_server_version_info(self, connection):
server_version = connection.connection._connection_info._server_version
server_version = server_version[server_version.find("Version") + 8:].split(" ")[0].split(".")
return tuple([int(''.join(filter(str.isdigit, v))) for v in server_version])
server_version = (
server_version[server_version.find("Version") + 8 :]
.split(" ")[0]
.split(".")
)
return tuple([int("".join(filter(str.isdigit, v))) for v in server_version])

_isolation_lookup = set(
[
Expand All @@ -906,17 +910,23 @@ def on_connect(conn):
super_(conn)

if self.embedded:
self.supports_vectors = conn.iris.cls("%SYSTEM.License").GetFeature(28) == 1
self.supports_vectors = (
conn.iris.cls("%SYSTEM.License").GetFeature(28) == 1
)
else:
try:
iris = IRISNative.createIRIS(conn)
self.supports_vectors = iris.classMethodBoolean("%SYSTEM.License", "GetFeature", 28)
except: # noqa
self.supports_vectors = iris.classMethodBoolean(
"%SYSTEM.License", "GetFeature", 28
)
except: # noqa
self.supports_vectors = False
if self.supports_vectors:
with conn.cursor() as cursor:
# Distance or similarity
cursor.execute("select vector_cosine(to_vector('1'), to_vector('1'))")
cursor.execute(
"select vector_cosine(to_vector('1'), to_vector('1'))"
)
self.vector_cosine_similarity = cursor.fetchone()[0] == 0

self._dictionary_access = False
Expand Down Expand Up @@ -1511,9 +1521,9 @@ def get_multi_foreign_keys(
table_fkey[rfknm] = fkey = {
"name": rfknm,
"constrained_columns": [],
"referred_schema": rschema
if rschema != self.default_schema_name
else None,
"referred_schema": (
rschema if rschema != self.default_schema_name else None
),
"referred_table": rtbl,
"referred_columns": [],
"options": {},
Expand Down
17 changes: 17 additions & 0 deletions sqlalchemy_iris/irisasync.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
from .base import IRISDialect


class IRISDialect_irisasync(IRISDialect):
driver = "irisasync"

is_async = True
supports_statement_cache = True

@classmethod
def import_dbapi(cls):
import intersystems_iris.dbapi._DBAPI as dbapi

return dbapi


dialect = IRISDialect_irisasync
3 changes: 3 additions & 0 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

registry.register("iris.iris", "sqlalchemy_iris.iris", "IRISDialect_iris")
registry.register("iris.emb", "sqlalchemy_iris.embedded", "IRISDialect_emb")
registry.register(
"iris.irisasync", "sqlalchemy_iris.irisasync", "IRISDialect_irisasync"
)

pytest.register_assert_rewrite("sqlalchemy.testing.assertions")

Expand Down

0 comments on commit aac223e

Please sign in to comment.