diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-02-24 12:34:54 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-02-24 12:34:54 -0500 |
| commit | 537d9212938669e7140880387d68e769381d5c2e (patch) | |
| tree | 6ab32cbae926349fe45667874a63d6f1d99dc2a2 /examples | |
| parent | 8b58c6adc2f000f6ce69e8107d10af3ee6e304ba (diff) | |
| download | sqlalchemy-537d9212938669e7140880387d68e769381d5c2e.tar.gz | |
- Fixed bug in the versioned_history example where column-level INSERT
defaults would prevent history values of NULL from being written.
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/versioned_history/history_meta.py | 12 | ||||
| -rw-r--r-- | examples/versioned_history/test_versioning.py | 31 |
2 files changed, 38 insertions, 5 deletions
diff --git a/examples/versioned_history/history_meta.py b/examples/versioned_history/history_meta.py index c4479d99e..f9e979a6a 100644 --- a/examples/versioned_history/history_meta.py +++ b/examples/versioned_history/history_meta.py @@ -32,14 +32,19 @@ def _history_mapper(local_mapper): polymorphic_on = None super_fks = [] + def _col_copy(col): + col = col.copy() + col.unique = False + col.default = col.server_default = None + return col + if not super_mapper or local_mapper.local_table is not super_mapper.local_table: cols = [] for column in local_mapper.local_table.c: if _is_versioning_col(column): continue - col = column.copy() - col.unique = False + col = _col_copy(column) if super_mapper and col_references_table(column, super_mapper.local_table): super_fks.append((col.key, list(super_history_mapper.local_table.primary_key)[0])) @@ -80,8 +85,7 @@ def _history_mapper(local_mapper): # been added and add them to the history table. for column in local_mapper.local_table.c: if column.key not in super_history_mapper.local_table.c: - col = column.copy() - col.unique = False + col = _col_copy(column) super_history_mapper.local_table.append_column(col) table = None diff --git a/examples/versioned_history/test_versioning.py b/examples/versioned_history/test_versioning.py index 73f515ed4..1a0bfec04 100644 --- a/examples/versioned_history/test_versioning.py +++ b/examples/versioned_history/test_versioning.py @@ -3,7 +3,7 @@ from unittest import TestCase from sqlalchemy.ext.declarative import declarative_base from .history_meta import Versioned, versioned_session -from sqlalchemy import create_engine, Column, Integer, String, ForeignKey +from sqlalchemy import create_engine, Column, Integer, String, ForeignKey, Boolean from sqlalchemy.orm import clear_mappers, Session, deferred, relationship from sqlalchemy.testing import AssertsCompiledSQL, eq_, assert_raises from sqlalchemy.testing.entities import ComparableEntity @@ -142,6 +142,35 @@ class TestVersioning(TestCase, AssertsCompiledSQL): assert sc.version == 2 + def test_insert_null(self): + class SomeClass(Versioned, self.Base, ComparableEntity): + __tablename__ = 'sometable' + + id = Column(Integer, primary_key=True) + boole = Column(Boolean, default=False) + + self.create_tables() + sess = self.session + sc = SomeClass(boole=True) + sess.add(sc) + sess.commit() + + sc.boole = None + sess.commit() + + sc.boole = False + sess.commit() + + SomeClassHistory = SomeClass.__history_mapper__.class_ + + eq_( + sess.query(SomeClassHistory.boole).order_by(SomeClassHistory.id).all(), + [(True, ), (None, )] + ) + + eq_(sc.version, 3) + + def test_deferred(self): """test versioning of unloaded, deferred columns.""" |
