From: Mike Bayer Date: Wed, 16 Mar 2011 15:22:28 +0000 (-0400) Subject: - Firebird - the "implicit_returning" flag on create_engine() is X-Git-Tag: rel_0_7b3~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92c8979d4a4c87cba7a68fd8d1766c3e8c0049b7;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Firebird - the "implicit_returning" flag on create_engine() is honored if set to False. [ticket:2083] --- diff --git a/CHANGES b/CHANGES index f2a6c79781..f31af1d914 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 4b8df55bb1..5f07b57b76 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 2a8e6fc2f0..8c4e2ac3c6 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]