# HG changeset patch # User Sylvain Thénault # Date 1269940641 -7200 # Node ID bc481dab93d43f34dba411a24e25b859e2c31098 # Parent a9697325cffa71a420fa7531a19ef5d33f471f55 [undo] consistent is/is_instance_of processing diff -r a9697325cffa -r bc481dab93d4 server/session.py --- a/server/session.py Tue Mar 30 11:15:57 2010 +0200 +++ b/server/session.py Tue Mar 30 11:17:21 2010 +0200 @@ -28,6 +28,11 @@ NO_UNDO_TYPES = schema.SCHEMA_TYPES.copy() NO_UNDO_TYPES.add('CWCache') +# is / is_instance_of are usually added by sql hooks except when using +# dataimport.NoHookRQLObjectStore, and we don't want to record them +# anyway in the later case +NO_UNDO_TYPES.add('is') +NO_UNDO_TYPES.add('is_instance_of') # XXX rememberme,forgotpwd,apycot,vcsfile def is_final(rqlst, variable, args): diff -r a9697325cffa -r bc481dab93d4 server/sources/native.py --- a/server/sources/native.py Tue Mar 30 11:15:57 2010 +0200 +++ b/server/sources/native.py Tue Mar 30 11:17:21 2010 +0200 @@ -927,6 +927,13 @@ action.changes['cw_eid'] = eid sql = self.sqlgen.insert(SQL_PREFIX + etype, action.changes) self.doexec(session, sql, action.changes) + # add explicitly is / is_instance_of whose deletion is not recorded for + # consistency with addition (done by sql in hooks) + self.doexec(session, 'INSERT INTO is_relation(eid_from, eid_to) ' + 'VALUES(%s, %s)' % (eid, eschema_eid(session, eschema))) + for eschema in entity.e_schema.ancestors() + [entity.e_schema]: + self.doexec(session, 'INSERT INTO is_instance_of_relation(eid_from,' + 'eid_to) VALUES(%s, %s)' % (eid, eschema_eid(session, eschema))) # restore record in entities (will update fti if needed) self.add_info(session, entity, self, None, True) # remove record from deleted_entities if entity's type is multi-sources