From: Mike Bayer Date: Sun, 24 Mar 2013 18:31:48 +0000 (-0400) Subject: - add an event to testing so that other dialects can intercept "test_needs_autoincrement" X-Git-Tag: rel_0_8_1~26^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5e66224d63cf1f23fce8a7fde83e791ca475f099;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - add an event to testing so that other dialects can intercept "test_needs_autoincrement" - get the assumption of "1" for "first sequence item" to be dialect configured --- diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 4c49e58f6b..abb9f0fc3d 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -34,6 +34,10 @@ class DefaultDialect(interfaces.Dialect): preparer = compiler.IdentifierPreparer supports_alter = True + # the first value we'd get for an autoincrement + # column. + default_sequence_base = 1 + # most DBAPIs happy with this for execute(). # not cx_oracle. execute_sequence_format = tuple diff --git a/lib/sqlalchemy/testing/schema.py b/lib/sqlalchemy/testing/schema.py index ad233ec22a..325d74f1ea 100644 --- a/lib/sqlalchemy/testing/schema.py +++ b/lib/sqlalchemy/testing/schema.py @@ -66,18 +66,27 @@ def Column(*args, **kw): col = schema.Column(*args, **kw) if 'test_needs_autoincrement' in test_opts and \ - kw.get('primary_key', False) and \ - exclusions.against('firebird', 'oracle'): - def add_seq(c, tbl): - c._init_items( - schema.Sequence(_truncate_name( - config.db.dialect, tbl.name + '_' + c.name + '_seq'), - optional=True) - ) - event.listen(col, 'after_parent_attach', add_seq, propagate=True) + kw.get('primary_key', False): + + # allow any test suite to pick up on this + col.info['test_needs_autoincrement'] = True + + # hardcoded rule for firebird, oracle; this should + # be moved out + if exclusions.against('firebird', 'oracle'): + def add_seq(c, tbl): + c._init_items( + schema.Sequence(_truncate_name( + config.db.dialect, tbl.name + '_' + c.name + '_seq'), + optional=True) + ) + event.listen(col, 'after_parent_attach', add_seq, propagate=True) return col + + + def _truncate_name(dialect, name): if len(name) > dialect.max_identifier_length: return name[0:max(dialect.max_identifier_length - 6, 0)] + \ diff --git a/lib/sqlalchemy/testing/suite/test_insert.py b/lib/sqlalchemy/testing/suite/test_insert.py index 66aa1ecfa6..a00fde312e 100644 --- a/lib/sqlalchemy/testing/suite/test_insert.py +++ b/lib/sqlalchemy/testing/suite/test_insert.py @@ -33,7 +33,7 @@ class LastrowidTest(fixtures.TablesTest): row = conn.execute(table.select()).first() eq_( row, - (1, "some data") + (config.db.dialect.default_sequence_base, "some data") ) def test_autoincrement_on_insert(self): @@ -132,7 +132,7 @@ class ReturningTest(fixtures.TablesTest): row = conn.execute(table.select()).first() eq_( row, - (1, "some data") + (config.db.dialect.default_sequence_base, "some data") ) @classmethod