diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-08-29 13:37:02 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2017-08-29 13:37:02 -0400 |
commit | ec4f567f31856a92bd91144112cd29df356a8ca8 (patch) | |
tree | d582c8b48aa7214f98f649dcfbd02e5a9234441f | |
parent | 4f342344927f78b429ed7ab4073dd7de956d6d22 (diff) | |
download | sqlalchemy-ec4f567f31856a92bd91144112cd29df356a8ca8.tar.gz |
Generalize autocommit testing
To support adding AUTOCOMMIT to more dialects, add a suite
test
Change-Id: I585dcce19fcdce70e8cf21aea4edaa97d7bf2bb9
-rw-r--r-- | lib/sqlalchemy/testing/requirements.py | 5 | ||||
-rw-r--r-- | lib/sqlalchemy/testing/suite/test_dialect.py | 43 | ||||
-rw-r--r-- | test/requirements.py | 7 |
3 files changed, 55 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/requirements.py b/lib/sqlalchemy/testing/requirements.py index 95aef0e17..08a7b1ced 100644 --- a/lib/sqlalchemy/testing/requirements.py +++ b/lib/sqlalchemy/testing/requirements.py @@ -513,6 +513,11 @@ class SuiteRequirements(Requirements): return exclusions.open() @property + def autocommit(self): + """target dialect supports 'AUTOCOMMIT' as an isolation_level""" + return exclusions.closed() + + @property def json_type(self): """target platform implements a native JSON type.""" diff --git a/lib/sqlalchemy/testing/suite/test_dialect.py b/lib/sqlalchemy/testing/suite/test_dialect.py index 0e62c347f..5dd1f0501 100644 --- a/lib/sqlalchemy/testing/suite/test_dialect.py +++ b/lib/sqlalchemy/testing/suite/test_dialect.py @@ -43,6 +43,49 @@ class ExceptionTest(fixtures.TablesTest): ) +class AutocommitTest(fixtures.TablesTest): + + run_deletes = 'each' + + __requires__ = 'autocommit', + + __backend__ = True + + @classmethod + def define_tables(cls, metadata): + Table('some_table', metadata, + Column('id', Integer, primary_key=True, autoincrement=False), + Column('data', String(50)), + test_needs_acid=True + ) + + def _test_conn_autocommits(self, conn, autocommit): + trans = conn.begin() + conn.execute( + self.tables.some_table.insert(), + {"id": 1, "data": "some data"} + ) + trans.rollback() + + eq_( + conn.scalar(select([self.tables.some_table.c.id])), + 1 if autocommit else None + ) + + conn.execute(self.tables.some_table.delete()) + + def test_autocommit_on(self): + conn = config.db.connect() + c2 = conn.execution_options(isolation_level='AUTOCOMMIT') + self._test_conn_autocommits(c2, True) + conn.invalidate() + self._test_conn_autocommits(conn, False) + + def test_autocommit_off(self): + conn = config.db.connect() + self._test_conn_autocommits(conn, False) + + class EscapingTest(fixtures.TestBase): @provide_metadata def test_percent_sign_round_trip(self): diff --git a/test/requirements.py b/test/requirements.py index ee3bb2db5..4fcf541e3 100644 --- a/test/requirements.py +++ b/test/requirements.py @@ -265,6 +265,13 @@ class DefaultRequirements(SuiteRequirements): 'pypostgresql bombs on multiple isolation level calls') @property + def autocommit(self): + """target dialect supports 'AUTOCOMMIT' as an isolation_level""" + return only_on( + ('postgresql', 'mysql'), + "dialect does not support AUTOCOMMIT isolation mode") + + @property def row_triggers(self): """Target must support standard statement-running EACH ROW triggers.""" |