diff --git a/test/test_suite.py b/test/test_suite.py index e0e8550..5ef403a 100644 --- a/test/test_suite.py +++ b/test/test_suite.py @@ -274,7 +274,6 @@ class NumericTest(_NumericTest): pass -@pytest.mark.skip("TODO: see issue #13") class BinaryTest(_BinaryTest): pass diff --git a/ydb_sqlalchemy/sqlalchemy/__init__.py b/ydb_sqlalchemy/sqlalchemy/__init__.py index 62875cb..ca5fae2 100644 --- a/ydb_sqlalchemy/sqlalchemy/__init__.py +++ b/ydb_sqlalchemy/sqlalchemy/__init__.py @@ -157,6 +157,9 @@ class YqlDialect(StrCompileDialect): sa.types.DATETIME: types.YqlDateTime, sa.types.TIMESTAMP: types.YqlTimestamp, sa.types.DECIMAL: types.Decimal, + sa.types.BINARY: types.Binary, + sa.types.LargeBinary: types.Binary, + sa.types.BLOB: types.Binary, } connection_characteristics = util.immutabledict( diff --git a/ydb_sqlalchemy/sqlalchemy/compiler/base.py b/ydb_sqlalchemy/sqlalchemy/compiler/base.py index 9833139..fcf2ec5 100644 --- a/ydb_sqlalchemy/sqlalchemy/compiler/base.py +++ b/ydb_sqlalchemy/sqlalchemy/compiler/base.py @@ -216,7 +216,7 @@ def get_ydb_type( ydb_type = ydb.PrimitiveType.Timestamp elif isinstance(type_, sa.Date): ydb_type = ydb.PrimitiveType.Date - elif isinstance(type_, sa.BINARY): + elif isinstance(type_, (sa.BINARY, sa.LargeBinary, types.Binary)): ydb_type = ydb.PrimitiveType.String elif isinstance(type_, sa.Float): ydb_type = ydb.PrimitiveType.Float diff --git a/ydb_sqlalchemy/sqlalchemy/types.py b/ydb_sqlalchemy/sqlalchemy/types.py index 89c43d0..57b9dec 100644 --- a/ydb_sqlalchemy/sqlalchemy/types.py +++ b/ydb_sqlalchemy/sqlalchemy/types.py @@ -139,3 +139,10 @@ def __init__(self, func): self.type = type_api.NULLTYPE self.func = func + + +class Binary(types.LargeBinary): + __visit_name__ = "BINARY" + + def bind_processor(self, dialect): + return None