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]))
# 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
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
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."""