]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Firebird - the "implicit_returning" flag on create_engine() is
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 16 Mar 2011 15:22:28 +0000 (11:22 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 16 Mar 2011 15:22:28 +0000 (11:22 -0400)
honored if set to False.  [ticket:2083]

CHANGES
lib/sqlalchemy/dialects/firebird/base.py
test/sql/test_returning.py

diff --git a/CHANGES b/CHANGES
index eea59866011b6d7aa2631e9d2e28425ac63f524f..127062d632717cfdbbac6876e9492002d171800e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -75,12 +75,16 @@ CHANGES
 
 - informix
 
-- Added RESERVED_WORDS informix dialect. [ticket:2092]
+  - Added RESERVED_WORDS informix dialect. [ticket:2092]
 
 - mysql
   - oursql dialect accepts the same "ssl" arguments in 
     create_engine() as that of MySQLdb.  [ticket:2047]
 
+- firebird
+  - The "implicit_returning" flag on create_engine() is
+    honored if set to False.  [ticket:2083]
+
 - declarative
   - Added an explicit check for the case that the name
     'metadata' is used for a column attribute on a 
index 978f044084a76a7086853bcbba197622516772e2..a19176c3638863d933a8cefcb0d7f1aca29f0068 100644 (file)
@@ -357,7 +357,6 @@ class FBDialect(default.DefaultDialect):
     requires_name_normalize = True
     supports_empty_insert = False
 
-
     statement_compiler = FBCompiler
     ddl_compiler = FBDDLCompiler
     preparer = FBIdentifierPreparer
@@ -382,8 +381,9 @@ class FBDialect(default.DefaultDialect):
             self.colspecs = {
                 sqltypes.DateTime: sqltypes.DATE
             }
-        else:
-            self.implicit_returning = True
+
+        self.implicit_returning = self._version_two  and \
+                            self.__dict__.get('implicit_returning', True)
 
     def normalize_name(self, name):
         # Remove trailing spaces: FB uses a CHAR() type,
index c519f50aace28ff72d1ac9347519f6dac0e416cc..995736328f6215a72c71e2136616425613bc9203 100644 (file)
@@ -5,7 +5,7 @@ from sqlalchemy.test.schema import Table, Column
 from sqlalchemy.types import TypeDecorator
 
 class ReturningTest(TestBase, AssertsExecutionResults):
-    __unsupported_on__ = ('sqlite', 'mysql', 'maxdb', 'sybase', 'access')
+    __requires__ = 'returning',
 
     def setup(self):
         meta = MetaData(testing.db)
@@ -142,7 +142,7 @@ class ReturningTest(TestBase, AssertsExecutionResults):
         eq_(result2.fetchall(), [(2,False),])
 
 class SequenceReturningTest(TestBase):
-    __unsupported_on__ = ('sqlite', 'mysql', 'maxdb', 'sybase', 'access', 'mssql')
+    __requires__ = 'returning',
 
     def setup(self):
         meta = MetaData(testing.db)
@@ -165,7 +165,7 @@ class SequenceReturningTest(TestBase):
 class KeyReturningTest(TestBase, AssertsExecutionResults):
     """test returning() works with columns that define 'key'."""
 
-    __unsupported_on__ = ('sqlite', 'mysql', 'maxdb', 'sybase', 'access')
+    __requires__ = 'returning',
 
     def setup(self):
         meta = MetaData(testing.db)
@@ -191,3 +191,33 @@ class KeyReturningTest(TestBase, AssertsExecutionResults):
         assert row[table.c.foo_id] == row['id'] == 1
 
 
+class ImplicitReturningFlag(TestBase):
+    def test_flag_turned_off(self):
+        e = engines.testing_engine(options={'implicit_returning':False})
+        assert e.dialect.implicit_returning is False
+        c = e.connect()
+        assert e.dialect.implicit_returning is False
+
+    def test_flag_turned_on(self):
+        e = engines.testing_engine(options={'implicit_returning':True})
+        assert e.dialect.implicit_returning is True
+        c = e.connect()
+        assert e.dialect.implicit_returning is True
+
+    def test_flag_turned_default(self):
+        supports = [False]
+        def go():
+            supports[0] = True
+        testing.requires.returning(go)()
+        e = engines.testing_engine()
+
+        # starts as False.  This is because all of Firebird,
+        # Postgresql, Oracle, SQL Server started supporting RETURNING
+        # as of a certain version, and the flag is not set until
+        # version detection occurs.  If some DB comes along that has 
+        # RETURNING in all cases, this test can be adjusted.
+        assert e.dialect.implicit_returning is False 
+
+        # version detection on connect sets it
+        c = e.connect()
+        assert e.dialect.implicit_returning is supports[0]