server/schemahooks.py
branchstable
changeset 3546 f0aecddf367e
parent 3543 ed152fe5aa8b
child 3550 f9bdcfeb12ee
equal deleted inserted replaced
3544:188d86631c45 3546:f0aecddf367e
   810     * instantiate an operation to delete the relation definition on commit
   810     * instantiate an operation to delete the relation definition on commit
   811     * delete the associated relation type when necessary
   811     * delete the associated relation type when necessary
   812     """
   812     """
   813     subjschema, rschema, objschema = session.schema.schema_by_eid(rdefeid)
   813     subjschema, rschema, objschema = session.schema.schema_by_eid(rdefeid)
   814     pendings = session.transaction_data.get('pendingeids', ())
   814     pendings = session.transaction_data.get('pendingeids', ())
       
   815     pendingrdefs = session.transaction_data.setdefault('pendingrdefs', set())
   815     # first delete existing relation if necessary
   816     # first delete existing relation if necessary
   816     if rschema.is_final():
   817     if rschema.is_final():
   817         rdeftype = 'CWAttribute'
   818         rdeftype = 'CWAttribute'
       
   819         pendingrdefs.add((subjschema, rschema))
   818     else:
   820     else:
   819         rdeftype = 'CWRelation'
   821         rdeftype = 'CWRelation'
       
   822         pendingrdefs.add((subjschema, rschema, objschema))
   820         if not (subjschema.eid in pendings or objschema.eid in pendings):
   823         if not (subjschema.eid in pendings or objschema.eid in pendings):
   821             pending = session.transaction_data.setdefault('pendingrdefs', set())
       
   822             pending.add((subjschema, rschema, objschema))
       
   823             session.execute('DELETE X %s Y WHERE X is %s, Y is %s'
   824             session.execute('DELETE X %s Y WHERE X is %s, Y is %s'
   824                             % (rschema, subjschema, objschema))
   825                             % (rschema, subjschema, objschema))
   825     execute = session.unsafe_execute
   826     execute = session.unsafe_execute
   826     rset = execute('Any COUNT(X) WHERE X is %s, X relation_type R,'
   827     rset = execute('Any COUNT(X) WHERE X is %s, X relation_type R,'
   827                    'R eid %%(x)s' % rdeftype, {'x': rteid})
   828                    'R eid %%(x)s' % rdeftype, {'x': rteid})