181 rqlst = parse('Any A,C,T WHERE A documented_by C?, C title T') |
181 rqlst = parse('Any A,C,T WHERE A documented_by C?, C title T') |
182 rewrite(rqlst, {('C', 'X'): (constraint1, constraint2)}, {}) |
182 rewrite(rqlst, {('C', 'X'): (constraint1, constraint2)}, {}) |
183 self.assertEqual(rqlst.as_string(), |
183 self.assertEqual(rqlst.as_string(), |
184 "Any A,C,T WHERE A documented_by C?, A is Affaire " |
184 "Any A,C,T WHERE A documented_by C?, A is Affaire " |
185 "WITH C,T BEING (Any C,T WHERE C title T, " |
185 "WITH C,T BEING (Any C,T WHERE C title T, " |
186 "EXISTS(C in_state B, D in_group F, G require_state B, G name 'read', G require_group F), " |
186 "(EXISTS(C in_state B, D in_group F, G require_state B, G name 'read', G require_group F)) " |
187 "D eid %(A)s, C is Card, " |
187 "OR (EXISTS(C in_state E, E name 'public')), " |
188 "EXISTS(C in_state E, E name 'public'))") |
188 "D eid %(A)s, C is Card)") |
189 |
189 |
190 def test_optional_var_4(self): |
190 def test_optional_var_4(self): |
191 constraint1 = 'A created_by U, X documented_by A' |
191 constraint1 = 'A created_by U, X documented_by A' |
192 constraint2 = 'A created_by U, X concerne A' |
192 constraint2 = 'A created_by U, X concerne A' |
193 constraint3 = 'X created_by U' |
193 constraint3 = 'X created_by U' |
197 ('Y', 'X'): (constraint3,)}, {}) |
197 ('Y', 'X'): (constraint3,)}, {}) |
198 self.assertEqual(rqlst.as_string(), |
198 self.assertEqual(rqlst.as_string(), |
199 u'Any X,LA,Y WHERE LA? documented_by X, LA concerne Y, B eid %(C)s, ' |
199 u'Any X,LA,Y WHERE LA? documented_by X, LA concerne Y, B eid %(C)s, ' |
200 'EXISTS(X created_by B), EXISTS(Y created_by B), ' |
200 'EXISTS(X created_by B), EXISTS(Y created_by B), ' |
201 'X is Card, Y is IN(Division, Note, Societe) ' |
201 'X is Card, Y is IN(Division, Note, Societe) ' |
202 'WITH LA BEING (Any LA WHERE EXISTS(A created_by B, LA documented_by A), ' |
202 'WITH LA BEING (Any LA WHERE (EXISTS(A created_by B, LA documented_by A)) OR (EXISTS(E created_by B, LA concerne E)), ' |
203 'B eid %(D)s, LA is Affaire, EXISTS(E created_by B, LA concerne E))') |
203 'B eid %(D)s, LA is Affaire)') |
204 |
204 |
205 def test_optional_var_inlined(self): |
205 def test_optional_var_inlined(self): |
206 c1 = ('X require_permission P') |
206 c1 = ('X require_permission P') |
207 c2 = ('X inlined_card O, O require_permission P') |
207 c2 = ('X inlined_card O, O require_permission P') |
208 rqlst = parse('Any C,A,R WHERE A? inlined_card C, A ref R') |
208 rqlst = parse('Any C,A,R WHERE A? inlined_card C, A ref R') |
429 rqlst = rqlhelper.parse('Affaire A WHERE NOT A documented_by C', annotate=False) |
429 rqlst = rqlhelper.parse('Affaire A WHERE NOT A documented_by C', annotate=False) |
430 rewrite(rqlst, {('C', 'X'): (constraint,)}, {}, 'X') |
430 rewrite(rqlst, {('C', 'X'): (constraint,)}, {}, 'X') |
431 self.assertEqual(rqlst.as_string(), |
431 self.assertEqual(rqlst.as_string(), |
432 u'Any A WHERE NOT EXISTS(A documented_by C, EXISTS(C owned_by B, B login "hop", B is CWUser), C is Card), A is Affaire') |
432 u'Any A WHERE NOT EXISTS(A documented_by C, EXISTS(C owned_by B, B login "hop", B is CWUser), C is Card), A is Affaire') |
433 |
433 |
|
434 def test_rqlexpr_multiexpr_outerjoin(self): |
|
435 c1 = RRQLExpression('X owned_by Z, Z login "hop"', 'X') |
|
436 c2 = RRQLExpression('X owned_by Z, Z login "hip"', 'X') |
|
437 c3 = RRQLExpression('X owned_by Z, Z login "momo"', 'X') |
|
438 rqlst = rqlhelper.parse('Any A WHERE A documented_by C?', annotate=False) |
|
439 rewrite(rqlst, {('C', 'X'): (c1, c2, c3)}, {}, 'X') |
|
440 self.assertEqual(rqlst.as_string(), |
|
441 u'Any A WHERE A documented_by C?, A is Affaire ' |
|
442 'WITH C BEING (Any C WHERE ((EXISTS(C owned_by B, B login "hop")) ' |
|
443 'OR (EXISTS(C owned_by D, D login "momo"))) ' |
|
444 'OR (EXISTS(C owned_by A, A login "hip")), C is Card)') |
|
445 |
434 |
446 |
435 if __name__ == '__main__': |
447 if __name__ == '__main__': |
436 unittest_main() |
448 unittest_main() |