# HG changeset patch # User Sylvain Thénault # Date 1270625040 -7200 # Node ID 73760bbb66bdefaf743ee357dcb48b085a7e34ea # Parent 3079b8345915f934885a4bbfa1bee39846311a7c [rql annotation] add test and fix for bug introduced by 5004:4cc020ee70e2. While it sounded good, it wasn't because stinfo['relations'] didn't include anymore stinfo['typerels'] diff -r 3079b8345915 -r 73760bbb66bd server/rqlannotation.py --- a/server/rqlannotation.py Wed Apr 07 09:45:15 2010 +0200 +++ b/server/rqlannotation.py Wed Apr 07 09:24:00 2010 +0200 @@ -339,11 +339,7 @@ def set_rel_constraint(self, term, rel, etypes_func): if isinstance(term, VariableRef) and self.is_ambiguous(term.variable): var = term.variable - if var.stinfo['typerel'] is not None: - sub = 1 - else: - sub = 0 - if len(var.stinfo['relations']) - sub == 1 \ + if len(var.stinfo['relations']) == 1 \ or rel.sqlscope is var.sqlscope or rel.r_type == 'identity': self.restrict(var, frozenset(etypes_func())) try: diff -r 3079b8345915 -r 73760bbb66bd server/test/unittest_rqlannotation.py --- a/server/test/unittest_rqlannotation.py Wed Apr 07 09:45:15 2010 +0200 +++ b/server/test/unittest_rqlannotation.py Wed Apr 07 09:24:00 2010 +0200 @@ -100,6 +100,12 @@ self.assertEquals(rqlst.defined_vars['X']._q_invariant, False) self.assertEquals(rqlst.defined_vars['Y']._q_invariant, False) + def test_8(self): + # DISTINCT Any P WHERE P require_group %(g)s, NOT %(u)s has_group_permission P, P is CWPermission + rqlst = self._prepare('DISTINCT Any X WHERE A concerne X, NOT N migrated_from X, ' + 'X is Note, N eid 1') + self.assertEquals(rqlst.defined_vars['X']._q_invariant, False) + def test_diff_scope_identity_deamb(self): rqlst = self._prepare('Any X WHERE X concerne Y, Y is Note, EXISTS(Y identity Z, Z migrated_from N)') self.assertEquals(rqlst.defined_vars['Z']._q_invariant, True)