diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-12-20 10:26:09 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-12-20 10:26:09 -0500 |
commit | 65bd6ec96602ab8b755b9bc25638957a09477de6 (patch) | |
tree | e6474cea1324cf0921cc542ce38d153d86bd814c /test/sql/test_defaults.py | |
parent | 5402e2f5dde680ea5715f81a2e6c3ccf7274afeb (diff) | |
download | sqlalchemy-65bd6ec96602ab8b755b9bc25638957a09477de6.tar.gz |
- Fixed issue where a primary key column that has a Sequence on it,
yet the column is not the "auto increment" column, either because
it has a foreign key constraint or ``autoincrement=False`` set,
would attempt to fire the Sequence on INSERT for backends that don't
support sequences, when presented with an INSERT missing the primary
key value. This would take place on non-sequence backends like
SQLite, MySQL. [ticket:2896]
Diffstat (limited to 'test/sql/test_defaults.py')
-rw-r--r-- | test/sql/test_defaults.py | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/test/sql/test_defaults.py b/test/sql/test_defaults.py index 4a17c1cda..1622c4ed8 100644 --- a/test/sql/test_defaults.py +++ b/test/sql/test_defaults.py @@ -615,6 +615,33 @@ class AutoIncrementTest(fixtures.TablesTest): nonai.insert().execute(id=1, data='row 1') + + def test_col_w_sequence_non_autoinc_no_firing(self): + metadata = self.metadata + # plain autoincrement/PK table in the actual schema + Table("x", metadata, + Column("set_id", Integer, primary_key=True) + ) + metadata.create_all() + + # for the INSERT use a table with a Sequence + # and autoincrement=False. Using a ForeignKey + # would have the same effect + dataset_no_autoinc = Table("x", MetaData(), + Column("set_id", Integer, Sequence("some_seq"), + primary_key=True, autoincrement=False) + ) + + testing.db.execute( + dataset_no_autoinc.insert() + ) + eq_( + testing.db.scalar(dataset_no_autoinc.count()), 1 + ) + + + + class SequenceDDLTest(fixtures.TestBase, testing.AssertsCompiledSQL): __dialect__ = 'default' @@ -887,6 +914,7 @@ class SequenceTest(fixtures.TestBase, testing.AssertsCompiledSQL): assert not self._has_sequence('s1') assert not self._has_sequence('s2') + cartitems = sometable = metadata = None class TableBoundSequenceTest(fixtures.TestBase): __requires__ = ('sequences',) |