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}) |