689 return self.related(rtype, role, limit, entities) |
689 return self.related(rtype, role, limit, entities) |
690 |
690 |
691 def related_rql(self, rtype, role='subject', targettypes=None): |
691 def related_rql(self, rtype, role='subject', targettypes=None): |
692 rschema = self.schema[rtype] |
692 rschema = self.schema[rtype] |
693 if role == 'subject': |
693 if role == 'subject': |
|
694 restriction = 'E eid %%(x)s, E %s X' % rtype |
694 if targettypes is None: |
695 if targettypes is None: |
695 targettypes = rschema.objects(self.e_schema) |
696 targettypes = rschema.objects(self.e_schema) |
696 restriction = 'E eid %%(x)s, E %s X' % rtype |
697 else: |
|
698 restriction += 'E is IN (%s)' % ','.join(targettypes) |
697 card = greater_card(rschema, (self.e_schema,), targettypes, 0) |
699 card = greater_card(rschema, (self.e_schema,), targettypes, 0) |
698 else: |
700 else: |
|
701 restriction = 'E eid %%(x)s, X %s E' % rtype |
699 if targettypes is None: |
702 if targettypes is None: |
700 targettypes = rschema.subjects(self.e_schema) |
703 targettypes = rschema.subjects(self.e_schema) |
701 restriction = 'E eid %%(x)s, X %s E' % rtype |
704 else: |
|
705 restriction += 'E is IN (%s)' % ','.join(targettypes) |
702 card = greater_card(rschema, targettypes, (self.e_schema,), 1) |
706 card = greater_card(rschema, targettypes, (self.e_schema,), 1) |
703 if len(targettypes) > 1: |
707 if len(targettypes) > 1: |
704 fetchattrs_list = [] |
708 fetchattrs_list = [] |
705 for ttype in targettypes: |
709 for ttype in targettypes: |
706 etypecls = self.vreg['etypes'].etype_class(ttype) |
710 etypecls = self.vreg['etypes'].etype_class(ttype) |