]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Generalize autocommit testing
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 29 Aug 2017 17:37:02 +0000 (13:37 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 29 Aug 2017 17:37:02 +0000 (13:37 -0400)
To support adding AUTOCOMMIT to more dialects, add a suite
test

Change-Id: I585dcce19fcdce70e8cf21aea4edaa97d7bf2bb9

lib/sqlalchemy/testing/requirements.py
lib/sqlalchemy/testing/suite/test_dialect.py
test/requirements.py

index 95aef0e1755c0b8078b4730b8ca9904a6de89100..08a7b1cedc0ff29f46edf6ce5d2e8c89b2c56007 100644 (file)
@@ -512,6 +512,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."""
index 0e62c347fe6e6e96cb26cabd47f4752956637df0..5dd1f0501712e411c7d2b4b730bd49e0b3cedb5f 100644 (file)
@@ -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):
index ee3bb2db5215631a2b45957340e0ce19558b67f8..4fcf541e31ac729c5886ccdef3e4a9c0a0e28be4 100644 (file)
@@ -264,6 +264,13 @@ class DefaultRequirements(SuiteRequirements):
             + fails_on('postgresql+pypostgresql',
                        '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."""