diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-03-16 11:22:28 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2011-03-16 11:22:28 -0400 |
| commit | 92c8979d4a4c87cba7a68fd8d1766c3e8c0049b7 (patch) | |
| tree | e229426729c001e8ff364a7cc075e4e66c9bed32 | |
| parent | f75ea6945cf2f0b727558e2f5c247a94cf2668bf (diff) | |
| download | sqlalchemy-92c8979d4a4c87cba7a68fd8d1766c3e8c0049b7.tar.gz | |
- Firebird - the "implicit_returning" flag on create_engine() is
honored if set to False. [ticket:2083]
| -rw-r--r-- | CHANGES | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/firebird/base.py | 6 | ||||
| -rw-r--r-- | test/sql/test_returning.py | 36 |
3 files changed, 41 insertions, 7 deletions
@@ -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] |
