)
+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):
+ 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."""