]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- repair some suite tests for firebird
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 27 Dec 2013 18:05:32 +0000 (13:05 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 27 Dec 2013 18:05:32 +0000 (13:05 -0500)
lib/sqlalchemy/testing/requirements.py
lib/sqlalchemy/testing/suite/test_insert.py
test/requirements.py

index e48fa2c0043acd8949cc675aeb0d3d47220e4614..3e48ba026eb8cb8ab81d1ed6c66e898dc3e358a1 100644 (file)
@@ -138,6 +138,20 @@ class SuiteRequirements(Requirements):
 
         return exclusions.open()
 
+    @property
+    def fetch_rows_post_commit(self):
+        """target platform will allow cursor.fetchone() to proceed after a
+        COMMIT.
+
+        Typically this refers to an INSERT statement with RETURNING which
+        is invoked within "autocommit".   If the row can be returned
+        after the autocommit, then this rule can be open.
+
+        """
+
+        return exclusions.open()
+
+
     @property
     def empty_inserts(self):
         """target platform supports INSERT with no values, i.e.
index 21141f244dc1a1f47ad70e6bf70d02bed67c7822..deda63b248daacf5697c567ccadc02a09014bcff 100644 (file)
@@ -172,7 +172,8 @@ class ReturningTest(fixtures.TablesTest):
                 Column('data', String(50))
             )
 
-    def test_explicit_returning_pk(self):
+    @requirements.fetch_rows_post_commit
+    def test_explicit_returning_pk_autocommit(self):
         engine = config.db
         table = self.tables.autoinc_pk
         r = engine.execute(
@@ -184,6 +185,19 @@ class ReturningTest(fixtures.TablesTest):
         fetched_pk = config.db.scalar(select([table.c.id]))
         eq_(fetched_pk, pk)
 
+    def test_explicit_returning_pk_no_autocommit(self):
+        engine = config.db
+        table = self.tables.autoinc_pk
+        with engine.begin() as conn:
+            r = conn.execute(
+                table.insert().returning(
+                                table.c.id),
+                data="some data"
+            )
+            pk = r.first()[0]
+        fetched_pk = config.db.scalar(select([table.c.id]))
+        eq_(fetched_pk, pk)
+
     def test_autoincrement_on_insert_implcit_returning(self):
 
         config.db.execute(
index b6fca06edc54bbfee161c5135c8f27cf5965c14f..f7b53d8dfe3b1f59f1d7c9bde0c80dc89c0df527 100644 (file)
@@ -122,6 +122,18 @@ class DefaultRequirements(SuiteRequirements):
                 "not supported by database"
             )
 
+    @property
+    def insert_from_select(self):
+        return skip_if(
+                    ["firebird"], "crashes for unknown reason"
+                )
+
+    @property
+    def fetch_rows_post_commit(self):
+        return skip_if(
+                    ["firebird"], "not supported"
+                )
+
     @property
     def binary_comparisons(self):
         """target database/driver can allow BLOB/BINARY fields to be compared
@@ -503,10 +515,10 @@ class DefaultRequirements(SuiteRequirements):
         """target backend supports Decimal() objects using E notation
         to represent very large values."""
 
-        return fails_if(
-                ("sybase+pyodbc", None, None,
+        return skip_if(
+                [("sybase+pyodbc", None, None,
                     "Don't know how do get these values through FreeTDS + Sybase"),
-                ("firebird", None, None, "Precision must be from 1 to 18"),
+                ("firebird", None, None, "Precision must be from 1 to 18"),]
             )
 
     @property