summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2011-03-16 11:22:28 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2011-03-16 11:22:28 -0400
commit92c8979d4a4c87cba7a68fd8d1766c3e8c0049b7 (patch)
treee229426729c001e8ff364a7cc075e4e66c9bed32
parentf75ea6945cf2f0b727558e2f5c247a94cf2668bf (diff)
downloadsqlalchemy-92c8979d4a4c87cba7a68fd8d1766c3e8c0049b7.tar.gz
- Firebird - the "implicit_returning" flag on create_engine() is
honored if set to False. [ticket:2083]
-rw-r--r--CHANGES6
-rw-r--r--lib/sqlalchemy/dialects/firebird/base.py6
-rw-r--r--test/sql/test_returning.py36
3 files changed, 41 insertions, 7 deletions
diff --git a/CHANGES b/CHANGES
index f2a6c7978..f31af1d91 100644
--- a/CHANGES
+++ b/CHANGES
@@ -487,12 +487,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
diff --git a/lib/sqlalchemy/dialects/firebird/base.py b/lib/sqlalchemy/dialects/firebird/base.py
index 4b8df55bb..5f07b57b7 100644
--- a/lib/sqlalchemy/dialects/firebird/base.py
+++ b/lib/sqlalchemy/dialects/firebird/base.py
@@ -362,7 +362,6 @@ class FBDialect(default.DefaultDialect):
requires_name_normalize = True
supports_empty_insert = False
-
statement_compiler = FBCompiler
ddl_compiler = FBDDLCompiler
preparer = FBIdentifierPreparer
@@ -393,8 +392,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,
diff --git a/test/sql/test_returning.py b/test/sql/test_returning.py
index 2a8e6fc2f..8c4e2ac3c 100644
--- a/test/sql/test_returning.py
+++ b/test/sql/test_returning.py
@@ -5,7 +5,7 @@ from test.lib.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]