server/ssplanner.py
changeset 8748 f5027f8d2478
parent 8697 574bb05e40a4
child 8867 6ad000b91347
equal deleted inserted replaced
8747:c0d4244e5abc 8748:f5027f8d2478
    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)