changeset 6427 | c8a5ac2d1eaa |
parent 6366 | 1806148d6ce8 |
child 6631 | 26c303c3f1aa |
6426:541659c39f6a | 6427:c8a5ac2d1eaa |
---|---|
128 'I': 'Affaire', |
128 'I': 'Affaire', |
129 'J': 'Affaire', |
129 'J': 'Affaire', |
130 'X': 'Affaire', |
130 'X': 'Affaire', |
131 'ET': 'CWEType', 'ETN': 'String'}]) |
131 'ET': 'CWEType', 'ETN': 'String'}]) |
132 rql, solutions = partrqls[1] |
132 rql, solutions = partrqls[1] |
133 self.assertEqual(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUniqueTogetherConstraint, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Note, Personne, RQLExpression, Societe, State, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
133 self.assertEqual(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Note, Personne, RQLExpression, Societe, State, SubDivision, SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
134 self.assertListEqual(sorted(solutions), |
134 self.assertListEqual(sorted(solutions), |
135 sorted([{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
135 sorted([{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
136 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
136 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
137 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
137 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
138 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
138 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
145 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
145 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
146 {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'}, |
146 {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'}, |
147 {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'}, |
147 {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'}, |
148 {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'}, |
148 {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'}, |
149 {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'}, |
149 {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'}, |
150 {'X': 'CWSource', 'ETN': 'String', 'ET': 'CWEType'}, |
|
150 {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
151 {'X': 'CWUniqueTogetherConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
151 {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'}, |
152 {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'}, |
152 {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'}, |
153 {'X': 'Email', 'ETN': 'String', 'ET': 'CWEType'}, |
153 {'X': 'EmailAddress', 'ETN': 'String', 'ET': 'CWEType'}, |
154 {'X': 'EmailAddress', 'ETN': 'String', 'ET': 'CWEType'}, |
154 {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'}, |
155 {'X': 'EmailPart', 'ETN': 'String', 'ET': 'CWEType'}, |
249 # selection queries tests ################################################# |
250 # selection queries tests ################################################# |
250 |
251 |
251 def test_select_1(self): |
252 def test_select_1(self): |
252 rset = self.execute('Any X ORDERBY X WHERE X is CWGroup') |
253 rset = self.execute('Any X ORDERBY X WHERE X is CWGroup') |
253 result, descr = rset.rows, rset.description |
254 result, descr = rset.rows, rset.description |
254 self.assertEqual(tuplify(result), [(1,), (2,), (3,), (4,)]) |
255 self.assertEqual(tuplify(result), [(2,), (3,), (4,), (5,)]) |
255 self.assertEqual(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)]) |
256 self.assertEqual(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)]) |
256 |
257 |
257 def test_select_2(self): |
258 def test_select_2(self): |
258 rset = self.execute('Any X ORDERBY N WHERE X is CWGroup, X name N') |
259 rset = self.execute('Any X ORDERBY N WHERE X is CWGroup, X name N') |
259 self.assertEqual(tuplify(rset.rows), [(1,), (2,), (3,), (4,)]) |
260 self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)]) |
260 self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)]) |
261 self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)]) |
261 rset = self.execute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N') |
262 rset = self.execute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N') |
262 self.assertEqual(tuplify(rset.rows), [(4,), (3,), (2,), (1,)]) |
263 self.assertEqual(tuplify(rset.rows), [(5,), (4,), (3,), (2,)]) |
263 |
264 |
264 def test_select_3(self): |
265 def test_select_3(self): |
265 rset = self.execute('Any N GROUPBY N WHERE X is CWGroup, X name N') |
266 rset = self.execute('Any N GROUPBY N WHERE X is CWGroup, X name N') |
266 result, descr = rset.rows, rset.description |
267 result, descr = rset.rows, rset.description |
267 result.sort() |
268 result.sort() |
300 self.assertEqual(rset.rows[0][0], rset1.rows[1][0]) |
301 self.assertEqual(rset.rows[0][0], rset1.rows[1][0]) |
301 self.assertEqual(len(rset), 5) |
302 self.assertEqual(len(rset), 5) |
302 |
303 |
303 def test_select_5(self): |
304 def test_select_5(self): |
304 rset = self.execute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup') |
305 rset = self.execute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup') |
305 self.assertEqual(tuplify(rset.rows), [(1, 'guests',), (2, 'managers',), (3, 'owners',), (4, 'users',)]) |
306 self.assertEqual(tuplify(rset.rows), [(2, 'guests',), (3, 'managers',), (4, 'owners',), (5, 'users',)]) |
306 self.assertEqual(rset.description, [('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',)]) |
307 self.assertEqual(rset.description, [('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',)]) |
307 |
308 |
308 def test_select_6(self): |
309 def test_select_6(self): |
309 self.execute("INSERT Personne X: X nom 'bidule'")[0] |
310 self.execute("INSERT Personne X: X nom 'bidule'")[0] |
310 rset = self.execute('Any Y where X name TMP, Y nom in (TMP, "bidule")') |
311 rset = self.execute('Any Y where X name TMP, Y nom in (TMP, "bidule")') |
348 rset = self.execute('Any U,T ORDERBY T DESC WHERE U is CWUser, ' |
349 rset = self.execute('Any U,T ORDERBY T DESC WHERE U is CWUser, ' |
349 'N ecrit_par U, N type T')#, {'x': self.ueid}) |
350 'N ecrit_par U, N type T')#, {'x': self.ueid}) |
350 self.assertEqual(len(rset.rows), 0) |
351 self.assertEqual(len(rset.rows), 0) |
351 |
352 |
352 def test_select_nonregr_edition_not(self): |
353 def test_select_nonregr_edition_not(self): |
353 groupeids = set((1, 2, 3)) |
354 groupeids = set((2, 3, 4)) |
354 groupreadperms = set(r[0] for r in self.execute('Any Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), X read_permission Y')) |
355 groupreadperms = set(r[0] for r in self.execute('Any Y WHERE X name "CWGroup", Y eid IN(2, 3, 4), X read_permission Y')) |
355 rset = self.execute('DISTINCT Any Y WHERE X is CWEType, X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y') |
356 rset = self.execute('DISTINCT Any Y WHERE X is CWEType, X name "CWGroup", Y eid IN(2, 3, 4), NOT X read_permission Y') |
356 self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms)) |
357 self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms)) |
357 rset = self.execute('DISTINCT Any Y WHERE X name "CWGroup", Y eid IN(1, 2, 3), NOT X read_permission Y') |
358 rset = self.execute('DISTINCT Any Y WHERE X name "CWGroup", Y eid IN(2, 3, 4), NOT X read_permission Y') |
358 self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms)) |
359 self.assertEqual(sorted(r[0] for r in rset.rows), sorted(groupeids - groupreadperms)) |
359 |
360 |
360 def test_select_outer_join(self): |
361 def test_select_outer_join(self): |
361 peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0] |
362 peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0] |
362 peid2 = self.execute("INSERT Personne X: X nom 'autre'")[0][0] |
363 peid2 = self.execute("INSERT Personne X: X nom 'autre'")[0][0] |
491 'WHERE RT name N, RDEF relation_type RT ' |
492 'WHERE RT name N, RDEF relation_type RT ' |
492 'HAVING COUNT(RDEF) > 10') |
493 'HAVING COUNT(RDEF) > 10') |
493 self.assertListEqual(rset.rows, |
494 self.assertListEqual(rset.rows, |
494 [[u'description_format', 12], |
495 [[u'description_format', 12], |
495 [u'description', 13], |
496 [u'description', 13], |
496 [u'name', 14], |
497 [u'name', 15], |
497 [u'created_by', 38], |
498 [u'created_by', 40], |
498 [u'creation_date', 38], |
499 [u'creation_date', 40], |
499 [u'cwuri', 38], |
500 [u'cw_source', 40], |
500 [u'in_basket', 38], |
501 [u'cwuri', 40], |
501 [u'is', 38], |
502 [u'in_basket', 40], |
502 [u'is_instance_of', 38], |
503 [u'is', 40], |
503 [u'modification_date', 38], |
504 [u'is_instance_of', 40], |
504 [u'owned_by', 38]]) |
505 [u'modification_date', 40], |
506 [u'owned_by', 40]]) |
|
505 |
507 |
506 def test_select_aggregat_having_dumb(self): |
508 def test_select_aggregat_having_dumb(self): |
507 # dumb but should not raise an error |
509 # dumb but should not raise an error |
508 rset = self.execute('Any U,COUNT(X) GROUPBY U ' |
510 rset = self.execute('Any U,COUNT(X) GROUPBY U ' |
509 'WHERE U eid %(x)s, X owned_by U ' |
511 'WHERE U eid %(x)s, X owned_by U ' |
615 self.assertEqual(len(rset.rows), 1, rset.rows) |
617 self.assertEqual(len(rset.rows), 1, rset.rows) |
616 |
618 |
617 def test_select_no_descr(self): |
619 def test_select_no_descr(self): |
618 rset = self.execute('Any X WHERE X is CWGroup', build_descr=0) |
620 rset = self.execute('Any X WHERE X is CWGroup', build_descr=0) |
619 rset.rows.sort() |
621 rset.rows.sort() |
620 self.assertEqual(tuplify(rset.rows), [(1,), (2,), (3,), (4,)]) |
622 self.assertEqual(tuplify(rset.rows), [(2,), (3,), (4,), (5,)]) |
621 self.assertEqual(rset.description, ()) |
623 self.assertEqual(rset.description, ()) |
622 |
624 |
623 def test_select_limit_offset(self): |
625 def test_select_limit_offset(self): |
624 rset = self.execute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N') |
626 rset = self.execute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N') |
625 self.assertEqual(tuplify(rset.rows), [(1,), (2,)]) |
627 self.assertEqual(tuplify(rset.rows), [(2,), (3,)]) |
626 self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',)]) |
628 self.assertEqual(rset.description, [('CWGroup',), ('CWGroup',)]) |
627 rset = self.execute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N') |
629 rset = self.execute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N') |
628 self.assertEqual(tuplify(rset.rows), [(3,), (4,)]) |
630 self.assertEqual(tuplify(rset.rows), [(4,), (5,)]) |
629 |
631 |
630 def test_select_symmetric(self): |
632 def test_select_symmetric(self): |
631 self.execute("INSERT Personne X: X nom 'machin'") |
633 self.execute("INSERT Personne X: X nom 'machin'") |
632 self.execute("INSERT Personne X: X nom 'bidule'") |
634 self.execute("INSERT Personne X: X nom 'bidule'") |
633 self.execute("INSERT Personne X: X nom 'chouette'") |
635 self.execute("INSERT Personne X: X nom 'chouette'") |
764 'Time']) |
766 'Time']) |
765 |
767 |
766 def test_select_constant(self): |
768 def test_select_constant(self): |
767 rset = self.execute('Any X, "toto" ORDERBY X WHERE X is CWGroup') |
769 rset = self.execute('Any X, "toto" ORDERBY X WHERE X is CWGroup') |
768 self.assertEqual(rset.rows, |
770 self.assertEqual(rset.rows, |
769 map(list, zip((1,2,3,4), ('toto','toto','toto','toto',)))) |
771 map(list, zip((2,3,4,5), ('toto','toto','toto','toto',)))) |
770 self.assertIsInstance(rset[0][1], unicode) |
772 self.assertIsInstance(rset[0][1], unicode) |
771 self.assertEqual(rset.description, |
773 self.assertEqual(rset.description, |
772 zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'), |
774 zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'), |
773 ('String', 'String', 'String', 'String',))) |
775 ('String', 'String', 'String', 'String',))) |
774 rset = self.execute('Any X, %(value)s ORDERBY X WHERE X is CWGroup', {'value': 'toto'}) |
776 rset = self.execute('Any X, %(value)s ORDERBY X WHERE X is CWGroup', {'value': 'toto'}) |
775 self.assertEqual(rset.rows, |
777 self.assertEqual(rset.rows, |
776 map(list, zip((1,2,3,4), ('toto','toto','toto','toto',)))) |
778 map(list, zip((2,3,4,5), ('toto','toto','toto','toto',)))) |
777 self.assertIsInstance(rset[0][1], unicode) |
779 self.assertIsInstance(rset[0][1], unicode) |
778 self.assertEqual(rset.description, |
780 self.assertEqual(rset.description, |
779 zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'), |
781 zip(('CWGroup', 'CWGroup', 'CWGroup', 'CWGroup'), |
780 ('String', 'String', 'String', 'String',))) |
782 ('String', 'String', 'String', 'String',))) |
781 rset = self.execute('Any X,GN WHERE X is CWUser, G is CWGroup, X login "syt", X in_group G, G name GN') |
783 rset = self.execute('Any X,GN WHERE X is CWUser, G is CWGroup, X login "syt", X in_group G, G name GN') |