equal
deleted
inserted
replaced
20 __docformat__ = "restructuredtext en" |
20 __docformat__ = "restructuredtext en" |
21 |
21 |
22 from rql.stmts import Union, Select |
22 from rql.stmts import Union, Select |
23 from rql.nodes import Constant, Relation |
23 from rql.nodes import Constant, Relation |
24 |
24 |
25 from cubicweb import QueryError, typed_eid |
25 from cubicweb import QueryError |
26 from cubicweb.schema import VIRTUAL_RTYPES |
26 from cubicweb.schema import VIRTUAL_RTYPES |
27 from cubicweb.rqlrewrite import add_types_restriction |
27 from cubicweb.rqlrewrite import add_types_restriction |
28 from cubicweb.server.edition import EditedEntity |
28 from cubicweb.server.edition import EditedEntity |
29 |
29 |
30 READ_ONLY_RTYPES = set(('eid', 'has_text', 'is', 'is_instance_of', 'identity')) |
30 READ_ONLY_RTYPES = set(('eid', 'has_text', 'is', 'is_instance_of', 'identity')) |
77 eschema = session.vreg.schema.eschema |
77 eschema = session.vreg.schema.eschema |
78 for rel in rqlst.where.get_nodes(Relation): |
78 for rel in rqlst.where.get_nodes(Relation): |
79 if rel.r_type == 'eid' and not rel.neged(strict=True): |
79 if rel.r_type == 'eid' and not rel.neged(strict=True): |
80 lhs, rhs = rel.get_variable_parts() |
80 lhs, rhs = rel.get_variable_parts() |
81 if isinstance(rhs, Constant): |
81 if isinstance(rhs, Constant): |
82 eid = typed_eid(rhs.eval(plan.args)) |
82 eid = int(rhs.eval(plan.args)) |
83 # check read permission here since it may not be done by |
83 # check read permission here since it may not be done by |
84 # the generated select substep if not emited (eg nothing |
84 # the generated select substep if not emited (eg nothing |
85 # to be selected) |
85 # to be selected) |
86 if checkread and eid not in neweids: |
86 if checkread and eid not in neweids: |
87 with session.security_enabled(read=False): |
87 with session.security_enabled(read=False): |
514 |
514 |
515 def execute(self): |
515 def execute(self): |
516 """execute this step""" |
516 """execute this step""" |
517 results = self.execute_child() |
517 results = self.execute_child() |
518 if results: |
518 if results: |
519 todelete = frozenset(typed_eid(eid) for eid, in results) |
519 todelete = frozenset(int(eid) for eid, in results) |
520 session = self.plan.session |
520 session = self.plan.session |
521 session.repo.glob_delete_entities(session, todelete) |
521 session.repo.glob_delete_entities(session, todelete) |
522 return results |
522 return results |
523 |
523 |
524 class DeleteRelationsStep(Step): |
524 class DeleteRelationsStep(Step): |
560 newrow = [] |
560 newrow = [] |
561 for (lhsinfo, rhsinfo, rschema) in self.updatedefs: |
561 for (lhsinfo, rhsinfo, rschema) in self.updatedefs: |
562 lhsval = _handle_relterm(lhsinfo, row, newrow) |
562 lhsval = _handle_relterm(lhsinfo, row, newrow) |
563 rhsval = _handle_relterm(rhsinfo, row, newrow) |
563 rhsval = _handle_relterm(rhsinfo, row, newrow) |
564 if rschema.final or rschema.inlined: |
564 if rschema.final or rschema.inlined: |
565 eid = typed_eid(lhsval) |
565 eid = int(lhsval) |
566 try: |
566 try: |
567 edited = edefs[eid] |
567 edited = edefs[eid] |
568 except KeyError: |
568 except KeyError: |
569 edef = session.entity_from_eid(eid) |
569 edef = session.entity_from_eid(eid) |
570 edefs[eid] = edited = EditedEntity(edef) |
570 edefs[eid] = edited = EditedEntity(edef) |