Fix UDT changed behavior with a default value

This commit is contained in:
Alan Boudreault
2017-05-02 10:59:26 -04:00
committed by bjmb
parent a3aaac38d6
commit c571d36777
2 changed files with 27 additions and 11 deletions

View File

@@ -235,8 +235,6 @@ class Column(object):
"""
Converts python value into database value
"""
if value is None and self.has_default:
return self.get_default()
return value
@property
@@ -948,7 +946,16 @@ class Map(BaseContainerColumn):
class UDTValueManager(BaseValueManager):
@property
def changed(self):
return self.value != self.previous_value or (self.value is not None and self.value.has_changed_fields())
if self.explicit:
return self.value != self.previous_value
default_value = self.column.get_default()
if not self.column._val_is_null(default_value):
return self.value != default_value
elif self.previous_value is None:
return not self.column._val_is_null(self.value) and self.value.has_changed_fields()
return False
def reset_previous_value(self):
if self.value is not None:

View File

@@ -183,9 +183,11 @@ class ModelWithDefaultTests(BaseCassEngTestCase):
def setUp(self):
sync_table(ModelWithDefault)
sync_table(ModelWithDefaultCollection)
def tearDown(self):
drop_table(ModelWithDefault)
drop_table(ModelWithDefaultCollection)
def test_value_override_with_default(self):
"""
@@ -309,28 +311,35 @@ class ModelWithDefaultTests(BaseCassEngTestCase):
udt, udt_default = UDT(age=1, mf={6: 6}), UDT(age=1, mf={6: 6})
item = ModelWithDefaultCollection.create(id=1, mf={1: 1}, dummy=1, udt=udt, udt_default=udt_default).save()
self.assertEqual(ModelWithDefaultCollection.all().get()._as_dict(),
self.assertEqual(ModelWithDefaultCollection.objects.get(id=1)._as_dict(),
{'id': 1, 'dummy': 1, 'mf': {1: 1}, "udt": udt, "udt_default": udt_default})
udt, udt_default = UDT(age=1, mf={5: 5}), UDT(age=1, mf={5: 5})
item.update(mf={2: 2}, udt=udt, udt_default=udt_default)
self.assertEqual(ModelWithDefaultCollection.all().get()._as_dict(),
self.assertEqual(ModelWithDefaultCollection.objects.get(id=1)._as_dict(),
{'id': 1, 'dummy': 1, 'mf': {2: 2}, "udt": udt, "udt_default": udt_default})
udt, udt_default = UDT(age=1, mf=None), UDT(age=1, mf=None)
expected_udt, expected_udt_default = UDT(age=1, mf={}), UDT(age=1, mf={})
item.update(mf=None, udt=udt, udt_default=udt_default)
self.assertEqual(ModelWithDefaultCollection.all().get()._as_dict(),
self.assertEqual(ModelWithDefaultCollection.objects.get(id=1)._as_dict(),
{'id': 1, 'dummy': 1, 'mf': {}, "udt": expected_udt, "udt_default": expected_udt_default})
udt_default = UDT(age=1, mf=None), UDT(age=1, mf={5:5})
item = ModelWithDefaultCollection.create(id=2, dummy=2).save()
self.assertEqual(ModelWithDefaultCollection.all().get(id=2)._as_dict(),
udt_default = UDT(age=1, mf={2:2}, dummy_udt=42)
item = ModelWithDefaultCollection.create(id=2, dummy=2)
self.assertEqual(ModelWithDefaultCollection.objects.get(id=2)._as_dict(),
{'id': 2, 'dummy': 2, 'mf': {2: 2}, "udt": None, "udt_default": udt_default})
udt, udt_default = UDT(age=1, mf={1: 1, 6: 6}), UDT(age=1, mf={1: 1, 6: 6})
item.update(mf={1: 1, 4: 4}, udt=udt, udt_default=udt_default)
self.assertEqual(ModelWithDefaultCollection.all().get(id=2)._as_dict(),
self.assertEqual(ModelWithDefaultCollection.objects.get(id=2)._as_dict(),
{'id': 2, 'dummy': 2, 'mf': {1: 1, 4: 4}, "udt": udt, "udt_default": udt_default})
drop_table(ModelWithDefaultCollection)
item.update(udt_default=None)
self.assertEqual(ModelWithDefaultCollection.objects.get(id=2)._as_dict(),
{'id': 2, 'dummy': 2, 'mf': {1: 1, 4: 4}, "udt": udt, "udt_default": None})
udt_default = UDT(age=1, mf={2:2})
item.update(udt_default=udt_default)
self.assertEqual(ModelWithDefaultCollection.objects.get(id=2)._as_dict(),
{'id': 2, 'dummy': 2, 'mf': {1: 1, 4: 4}, "udt": udt, "udt_default": udt_default})