diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-03-24 14:31:48 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-03-24 14:31:48 -0400 |
| commit | 5e66224d63cf1f23fce8a7fde83e791ca475f099 (patch) | |
| tree | 9040121d35828f03993926c413a7573e18b9918b /lib | |
| parent | a4703917d82a7100ff91d938c0592e39dd757a64 (diff) | |
| download | sqlalchemy-5e66224d63cf1f23fce8a7fde83e791ca475f099.tar.gz | |
- 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
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/engine/default.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/schema.py | 27 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/suite/test_insert.py | 4 |
3 files changed, 24 insertions, 11 deletions
diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index 4c49e58f6..abb9f0fc3 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 ad233ec22..325d74f1e 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 66aa1ecfa..a00fde312 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 |
