server/test/unittest_querier.py
changeset 2608 21856eda34f6
parent 1977 606923dff11b
child 2773 b2530e3e0afb
child 2920 64322aa83a1d
child 3109 e7e1bb06b716
equal deleted inserted replaced
2607:5d889b4928bb 2608:21856eda34f6
   108                                        'J': 'Affaire',
   108                                        'J': 'Affaire',
   109                                        'X': 'Affaire',
   109                                        'X': 'Affaire',
   110                                        'ET': 'CWEType', 'ETN': 'String'}])
   110                                        'ET': 'CWEType', 'ETN': 'String'}])
   111         rql, solutions = partrqls[1]
   111         rql, solutions = partrqls[1]
   112         self.assertEquals(rql,  'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, '
   112         self.assertEquals(rql,  'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, '
   113                           'X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, File, Folder, Image, Note, Personne, RQLExpression, Societe, State, SubDivision, Tag, TrInfo, Transition)')
   113                           'X is IN(Bookmark, CWAttribute, CWCache, CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, CWRelation, CWUser, Card, Comment, Division, Email, EmailAddress, EmailPart, EmailThread, ExternalUri, File, Folder, Image, Note, Personne, RQLExpression, Societe, State, SubDivision, Tag, TrInfo, Transition)')
   114         self.assertListEquals(sorted(solutions),
   114         self.assertListEquals(sorted(solutions),
   115                               sorted([{'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'},
   115                               sorted([{'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'},
   116                                       {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'},
   116                                       {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'},
   117                                       {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'},
   117                                       {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'},
   118                                       {'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'},
   118                                       {'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'},
   129                                       {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'},
   129                                       {'X': 'CWRelation', 'ETN': 'String', 'ET': 'CWEType'},
   130                                       {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'},
   130                                       {'X': 'CWPermission', 'ETN': 'String', 'ET': 'CWEType'},
   131                                       {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'},
   131                                       {'X': 'CWProperty', 'ETN': 'String', 'ET': 'CWEType'},
   132                                       {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'},
   132                                       {'X': 'CWRType', 'ETN': 'String', 'ET': 'CWEType'},
   133                                       {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'},
   133                                       {'X': 'CWUser', 'ETN': 'String', 'ET': 'CWEType'},
       
   134                                       {'X': 'ExternalUri', 'ETN': 'String', 'ET': 'CWEType'},
   134                                       {'X': 'File', 'ETN': 'String', 'ET': 'CWEType'},
   135                                       {'X': 'File', 'ETN': 'String', 'ET': 'CWEType'},
   135                                       {'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'},
   136                                       {'X': 'Folder', 'ETN': 'String', 'ET': 'CWEType'},
   136                                       {'X': 'Image', 'ETN': 'String', 'ET': 'CWEType'},
   137                                       {'X': 'Image', 'ETN': 'String', 'ET': 'CWEType'},
   137                                       {'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'},
   138                                       {'X': 'Note', 'ETN': 'String', 'ET': 'CWEType'},
   138                                       {'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'},
   139                                       {'X': 'Personne', 'ETN': 'String', 'ET': 'CWEType'},
   224         self.assertEquals(tuplify(result), [(1,), (2,), (3,), (4,)])
   225         self.assertEquals(tuplify(result), [(1,), (2,), (3,), (4,)])
   225         self.assertEquals(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   226         self.assertEquals(descr, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   226 
   227 
   227     def test_select_2(self):
   228     def test_select_2(self):
   228         rset = self.execute('Any X ORDERBY N WHERE X is CWGroup, X name N')
   229         rset = self.execute('Any X ORDERBY N WHERE X is CWGroup, X name N')
   229         self.assertEquals(tuplify(rset.rows), [(3,), (1,), (4,), (2,)])
   230         self.assertEquals(tuplify(rset.rows), [(1,), (2,), (3,), (4,)])
   230         self.assertEquals(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   231         self.assertEquals(rset.description, [('CWGroup',), ('CWGroup',), ('CWGroup',), ('CWGroup',)])
   231         rset = self.execute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N')
   232         rset = self.execute('Any X ORDERBY N DESC WHERE X is CWGroup, X name N')
   232         self.assertEquals(tuplify(rset.rows), [(2,), (4,), (1,), (3,)])
   233         self.assertEquals(tuplify(rset.rows), [(4,), (3,), (2,), (1,)])
   233 
   234 
   234     def test_select_3(self):
   235     def test_select_3(self):
   235         rset = self.execute('Any N GROUPBY N WHERE X is CWGroup, X name N')
   236         rset = self.execute('Any N GROUPBY N WHERE X is CWGroup, X name N')
   236         result, descr = rset.rows, rset.description
   237         result, descr = rset.rows, rset.description
   237         result.sort()
   238         result.sort()
   270         self.assertEquals(rset.rows[0][0], rset1.rows[1][0])
   271         self.assertEquals(rset.rows[0][0], rset1.rows[1][0])
   271         self.assertEquals(len(rset), 5)
   272         self.assertEquals(len(rset), 5)
   272 
   273 
   273     def test_select_5(self):
   274     def test_select_5(self):
   274         rset = self.execute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup')
   275         rset = self.execute('Any X, TMP ORDERBY TMP WHERE X name TMP, X is CWGroup')
   275         self.assertEquals(tuplify(rset.rows), [(3, 'guests',), (1, 'managers',), (4, 'owners',), (2, 'users',)])
   276         self.assertEquals(tuplify(rset.rows), [(1, 'guests',), (2, 'managers',), (3, 'owners',), (4, 'users',)])
   276         self.assertEquals(rset.description, [('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',)])
   277         self.assertEquals(rset.description, [('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',), ('CWGroup', 'String',)])
   277 
   278 
   278     def test_select_6(self):
   279     def test_select_6(self):
   279         self.execute("INSERT Personne X: X nom 'bidule'")[0]
   280         self.execute("INSERT Personne X: X nom 'bidule'")[0]
   280         rset = self.execute('Any Y where X name TMP, Y nom in (TMP, "bidule")')
   281         rset = self.execute('Any Y where X name TMP, Y nom in (TMP, "bidule")')
   342 
   343 
   343     def test_select_outer_join_optimized(self):
   344     def test_select_outer_join_optimized(self):
   344         peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   345         peid1 = self.execute("INSERT Personne X: X nom 'bidule'")[0][0]
   345         rset = self.execute('Any X WHERE X eid %(x)s, P? connait X', {'x':peid1}, 'x')
   346         rset = self.execute('Any X WHERE X eid %(x)s, P? connait X', {'x':peid1}, 'x')
   346         self.assertEquals(rset.rows, [[peid1]])
   347         self.assertEquals(rset.rows, [[peid1]])
   347         rset = self.execute('Any X WHERE X eid %(x)s, X require_permission P?', {'x':peid1}, 'x')
   348         rset = self.execute('Any X WHERE X eid %(x)s, X require_permission P?',
       
   349                             {'x':peid1}, 'x')
   348         self.assertEquals(rset.rows, [[peid1]])
   350         self.assertEquals(rset.rows, [[peid1]])
   349 
   351 
   350     def test_select_left_outer_join(self):
   352     def test_select_left_outer_join(self):
   351         ueid = self.execute("INSERT CWUser X: X login 'bob', X upassword 'toto', X in_group G "
   353         ueid = self.execute("INSERT CWUser X: X login 'bob', X upassword 'toto', X in_group G "
   352                             "WHERE G name 'users'")[0][0]
   354                             "WHERE G name 'users'")[0][0]
   462     def test_select_aggregat_having(self):
   464     def test_select_aggregat_having(self):
   463         rset = self.execute('Any N,COUNT(RDEF) GROUPBY N ORDERBY 2,N '
   465         rset = self.execute('Any N,COUNT(RDEF) GROUPBY N ORDERBY 2,N '
   464                             'WHERE RT name N, RDEF relation_type RT '
   466                             'WHERE RT name N, RDEF relation_type RT '
   465                             'HAVING COUNT(RDEF) > 10')
   467                             'HAVING COUNT(RDEF) > 10')
   466         self.assertListEquals(rset.rows,
   468         self.assertListEquals(rset.rows,
   467                               [[u'description', 11], ['in_basket', 11],
   469                               [[u'description', 11],
   468                                [u'name', 13], [u'created_by', 33],
   470                                [u'name', 13], [u'created_by', 34],
   469                                [u'creation_date', 33], [u'is', 33], [u'is_instance_of', 33],
   471                                [u'creation_date', 34], [u'cwuri', 34],
   470                                [u'modification_date', 33], [u'owned_by', 33]])
   472                                ['in_basket', 34],
       
   473                                [u'is', 34], [u'is_instance_of', 34],
       
   474                                [u'modification_date', 34], [u'owned_by', 34]])
   471 
   475 
   472     def test_select_aggregat_having_dumb(self):
   476     def test_select_aggregat_having_dumb(self):
   473         # dumb but should not raise an error
   477         # dumb but should not raise an error
   474         rset = self.execute('Any U,COUNT(X) GROUPBY U '
   478         rset = self.execute('Any U,COUNT(X) GROUPBY U '
   475                             'WHERE U eid %(x)s, X owned_by U '
   479                             'WHERE U eid %(x)s, X owned_by U '
   551         self.assertEquals(tuplify(rset.rows), [(1,), (2,), (3,), (4,)])
   555         self.assertEquals(tuplify(rset.rows), [(1,), (2,), (3,), (4,)])
   552         self.assertEquals(rset.description, ())
   556         self.assertEquals(rset.description, ())
   553 
   557 
   554     def test_select_limit_offset(self):
   558     def test_select_limit_offset(self):
   555         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N')
   559         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 WHERE X name N')
   556         self.assertEquals(tuplify(rset.rows), [(3,), (1,)])
   560         self.assertEquals(tuplify(rset.rows), [(1,), (2,)])
   557         self.assertEquals(rset.description, [('CWGroup',), ('CWGroup',)])
   561         self.assertEquals(rset.description, [('CWGroup',), ('CWGroup',)])
   558         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N')
   562         rset = self.execute('CWGroup X ORDERBY N LIMIT 2 OFFSET 2 WHERE X name N')
   559         self.assertEquals(tuplify(rset.rows), [(4,), (2,)])
   563         self.assertEquals(tuplify(rset.rows), [(3,), (4,)])
   560 
   564 
   561     def test_select_symetric(self):
   565     def test_select_symetric(self):
   562         self.execute("INSERT Personne X: X nom 'machin'")
   566         self.execute("INSERT Personne X: X nom 'machin'")
   563         self.execute("INSERT Personne X: X nom 'bidule'")
   567         self.execute("INSERT Personne X: X nom 'bidule'")
   564         self.execute("INSERT Personne X: X nom 'chouette'")
   568         self.execute("INSERT Personne X: X nom 'chouette'")