summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2022-01-21 01:26:02 +0000
committerGerrit Code Review <gerrit@ci3.zzzcomputing.com>2022-01-21 01:26:02 +0000
commitf8a13c3dc751123eeefa2b475916a74aab99f023 (patch)
tree59e0c8cc1b5b8c115f7ae5fb193522292a44b848 /lib
parent1a24813bab99376ccd1c726dd7b69db3635a2d2b (diff)
parent469f7fd2f3d51796904cde63dfcc2aafe5663087 (diff)
downloadsqlalchemy-f8a13c3dc751123eeefa2b475916a74aab99f023.tar.gz
Merge "re-enable tests for asyncmy; fix Binary" into main
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/dialects/mysql/asyncmy.py12
-rw-r--r--lib/sqlalchemy/dialects/mysql/mariadbconnector.py11
-rw-r--r--lib/sqlalchemy/testing/suite/test_types.py39
3 files changed, 56 insertions, 6 deletions
diff --git a/lib/sqlalchemy/dialects/mysql/asyncmy.py b/lib/sqlalchemy/dialects/mysql/asyncmy.py
index 3eb19411e..915b666bb 100644
--- a/lib/sqlalchemy/dialects/mysql/asyncmy.py
+++ b/lib/sqlalchemy/dialects/mysql/asyncmy.py
@@ -229,6 +229,11 @@ class AsyncAdaptFallback_asyncmy_connection(AsyncAdapt_asyncmy_connection):
await_ = staticmethod(await_fallback)
+def _Binary(x):
+ """Return x as a binary type."""
+ return bytes(x)
+
+
class AsyncAdapt_asyncmy_dbapi:
def __init__(self, asyncmy):
self.asyncmy = asyncmy
@@ -251,6 +256,13 @@ class AsyncAdapt_asyncmy_dbapi:
):
setattr(self, name, getattr(self.asyncmy.errors, name))
+ STRING = util.symbol("STRING")
+ NUMBER = util.symbol("NUMBER")
+ BINARY = util.symbol("BINARY")
+ DATETIME = util.symbol("DATETIME")
+ TIMESTAMP = util.symbol("TIMESTAMP")
+ Binary = staticmethod(_Binary)
+
def connect(self, *arg, **kw):
async_fallback = kw.pop("async_fallback", False)
diff --git a/lib/sqlalchemy/dialects/mysql/mariadbconnector.py b/lib/sqlalchemy/dialects/mysql/mariadbconnector.py
index f31304887..ea6060c01 100644
--- a/lib/sqlalchemy/dialects/mysql/mariadbconnector.py
+++ b/lib/sqlalchemy/dialects/mysql/mariadbconnector.py
@@ -163,22 +163,21 @@ class MySQLDialect_mariadbconnector(MySQLDialect):
def _detect_charset(self, connection):
return "utf8mb4"
- _isolation_lookup = set(
- [
+ def get_isolation_level_values(self, dbapi_connection):
+ return (
"SERIALIZABLE",
"READ UNCOMMITTED",
"READ COMMITTED",
"REPEATABLE READ",
"AUTOCOMMIT",
- ]
- )
+ )
- def _set_isolation_level(self, connection, level):
+ def set_isolation_level(self, connection, level):
if level == "AUTOCOMMIT":
connection.autocommit = True
else:
connection.autocommit = False
- super(MySQLDialect_mariadbconnector, self)._set_isolation_level(
+ super(MySQLDialect_mariadbconnector, self).set_isolation_level(
connection, level
)
diff --git a/lib/sqlalchemy/testing/suite/test_types.py b/lib/sqlalchemy/testing/suite/test_types.py
index c51a66690..94bab009a 100644
--- a/lib/sqlalchemy/testing/suite/test_types.py
+++ b/lib/sqlalchemy/testing/suite/test_types.py
@@ -42,6 +42,8 @@ from ... import Unicode
from ... import UnicodeText
from ...orm import declarative_base
from ...orm import Session
+from ...sql.sqltypes import LargeBinary
+from ...sql.sqltypes import PickleType
class _LiteralRoundTripFixture:
@@ -193,6 +195,42 @@ class UnicodeTextTest(_UnicodeFixture, fixtures.TablesTest):
self._test_null_strings(connection)
+class BinaryTest(_LiteralRoundTripFixture, fixtures.TablesTest):
+ __requires__ = ("binary_literals",)
+ __backend__ = True
+
+ @classmethod
+ def define_tables(cls, metadata):
+ Table(
+ "binary_table",
+ metadata,
+ Column(
+ "id", Integer, primary_key=True, test_needs_autoincrement=True
+ ),
+ Column("binary_data", LargeBinary),
+ Column("pickle_data", PickleType),
+ )
+
+ def test_binary_roundtrip(self, connection):
+ binary_table = self.tables.binary_table
+
+ connection.execute(
+ binary_table.insert(), {"id": 1, "binary_data": b"this is binary"}
+ )
+ row = connection.execute(select(binary_table.c.binary_data)).first()
+ eq_(row, (b"this is binary",))
+
+ def test_pickle_roundtrip(self, connection):
+ binary_table = self.tables.binary_table
+
+ connection.execute(
+ binary_table.insert(),
+ {"id": 1, "pickle_data": {"foo": [1, 2, 3], "bar": "bat"}},
+ )
+ row = connection.execute(select(binary_table.c.pickle_data)).first()
+ eq_(row, ({"foo": [1, 2, 3], "bar": "bat"},))
+
+
class TextTest(_LiteralRoundTripFixture, fixtures.TablesTest):
__requires__ = ("text_type",)
__backend__ = True
@@ -1553,6 +1591,7 @@ class JSONLegacyStringCastIndexTest(
__all__ = (
+ "BinaryTest",
"UnicodeVarcharTest",
"UnicodeTextTest",
"JSONTest",