# HG changeset patch # User Julien Cristau # Date 1323088660 -3600 # Node ID 7980b36fb1aa7aabad5811d03af72889f8db220b # Parent 71d9fb78b772e4a20838fbc6f6b6fcbfbb7955e2 [schema sync] Update repo._type_source_cache when renaming an entity (closes #2094470) When an entity type is renamed as part of a migration, it leaves stale entries in repo._type_source_cache, which makes subsequent operations on those entities fail (they look for the old entity name instead of the new one). diff -r 71d9fb78b772 -r 7980b36fb1aa hooks/syncschema.py --- a/hooks/syncschema.py Thu Dec 01 12:48:46 2011 +0100 +++ b/hooks/syncschema.py Mon Dec 05 13:37:40 2011 +0100 @@ -300,6 +300,9 @@ self.info('renamed table %s to %s', oldname, newname) sqlexec('UPDATE entities SET type=%(newname)s WHERE type=%(oldname)s', {'newname': newname, 'oldname': oldname}) + for eid, (etype, uri, extid, auri) in self.session.repo._type_source_cache.items(): + if etype == oldname: + self.session.repo._type_source_cache[eid] = (newname, uri, extid, auri) sqlexec('UPDATE deleted_entities SET type=%(newname)s WHERE type=%(oldname)s', {'newname': newname, 'oldname': oldname}) # XXX transaction records diff -r 71d9fb78b772 -r 7980b36fb1aa server/test/data/migratedapp/schema.py --- a/server/test/data/migratedapp/schema.py Thu Dec 01 12:48:46 2011 +0100 +++ b/server/test/data/migratedapp/schema.py Mon Dec 05 13:37:40 2011 +0100 @@ -120,6 +120,10 @@ concerne2 = SubjectRelation(('Affaire', 'Note'), cardinality='1*') connait = SubjectRelation('Personne', symmetric=True) + +class New(EntityType): + new_name = String() + class Societe(WorkflowableEntityType): __permissions__ = { 'read': ('managers', 'users', 'guests'), diff -r 71d9fb78b772 -r 7980b36fb1aa server/test/data/schema.py --- a/server/test/data/schema.py Thu Dec 01 12:48:46 2011 +0100 +++ b/server/test/data/schema.py Mon Dec 05 13:37:40 2011 +0100 @@ -128,6 +128,9 @@ inline2 = SubjectRelation('Affaire', inlined=True, cardinality='?*') +class Old(EntityType): + name = String() + class connait(RelationType): symmetric = True diff -r 71d9fb78b772 -r 7980b36fb1aa server/test/unittest_migractions.py --- a/server/test/unittest_migractions.py Thu Dec 01 12:48:46 2011 +0100 +++ b/server/test/unittest_migractions.py Mon Dec 05 13:37:40 2011 +0100 @@ -234,6 +234,12 @@ self.assertFalse(self.execute('State X WHERE NOT X state_of WF')) self.assertFalse(self.execute('Transition X WHERE NOT X transition_of WF')) + def test_rename_entity_type(self): + entity = self.mh.create_entity('Old', name=u'old') + self.repo.type_and_source_from_eid(entity.eid) + self.mh.cmd_rename_entity_type('Old', 'New') + self.mh.cmd_rename_attribute('New', 'name', 'new_name') + def test_add_drop_relation_type(self): self.mh.cmd_add_entity_type('Folder2', auto=False) self.mh.cmd_add_relation_type('filed_under2')