171 'J': 'Affaire', |
171 'J': 'Affaire', |
172 'X': 'Affaire', |
172 'X': 'Affaire', |
173 'ET': 'CWEType', 'ETN': 'String'}]) |
173 'ET': 'CWEType', 'ETN': 'String'}]) |
174 rql, solutions = partrqls[1] |
174 rql, solutions = partrqls[1] |
175 self.assertRQLEqual(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, ' |
175 self.assertRQLEqual(rql, 'Any ETN,X WHERE X is ET, ET name ETN, ET is CWEType, ' |
176 'X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWConstraint, ' |
176 'X is IN(BaseTransition, Bookmark, CWAttribute, CWCache, CWComputedRType, ' |
177 ' CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, CWRType, ' |
177 ' CWConstraint, CWConstraintType, CWEType, CWGroup, CWPermission, CWProperty, ' |
178 ' CWRelation, CWSource, CWUniqueTogetherConstraint, CWUser, Card, Comment, ' |
178 ' CWRType, CWRelation, CWSource, CWUniqueTogetherConstraint, CWUser, Card, ' |
179 ' Division, Email, EmailPart, EmailThread, ExternalUri, File, Folder, Note, ' |
179 ' Comment, Division, Email, EmailPart, EmailThread, ExternalUri, File, ' |
180 ' Old, Personne, RQLExpression, Societe, State, SubDivision, ' |
180 ' Folder, Note, Old, Personne, RQLExpression, Societe, State, SubDivision, ' |
181 ' SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
181 ' SubWorkflowExitPoint, Tag, TrInfo, Transition, Workflow, WorkflowTransition)') |
182 self.assertListEqual(sorted(solutions), |
182 self.assertListEqual(sorted(solutions), |
183 sorted([{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
183 sorted([{'X': 'BaseTransition', 'ETN': 'String', 'ET': 'CWEType'}, |
184 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
184 {'X': 'Bookmark', 'ETN': 'String', 'ET': 'CWEType'}, |
185 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
185 {'X': 'Card', 'ETN': 'String', 'ET': 'CWEType'}, |
186 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
186 {'X': 'Comment', 'ETN': 'String', 'ET': 'CWEType'}, |
187 {'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'}, |
187 {'X': 'Division', 'ETN': 'String', 'ET': 'CWEType'}, |
188 {'X': 'CWCache', 'ETN': 'String', 'ET': 'CWEType'}, |
188 {'X': 'CWCache', 'ETN': 'String', 'ET': 'CWEType'}, |
|
189 {'X': 'CWComputedRType', 'ETN': 'String', 'ET': 'CWEType'}, |
189 {'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
190 {'X': 'CWConstraint', 'ETN': 'String', 'ET': 'CWEType'}, |
190 {'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'}, |
191 {'X': 'CWConstraintType', 'ETN': 'String', 'ET': 'CWEType'}, |
191 {'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'}, |
192 {'X': 'CWEType', 'ETN': 'String', 'ET': 'CWEType'}, |
192 {'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'}, |
193 {'X': 'CWAttribute', 'ETN': 'String', 'ET': 'CWEType'}, |
193 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
194 {'X': 'CWGroup', 'ETN': 'String', 'ET': 'CWEType'}, |
600 def test_select_aggregat_having(self): |
601 def test_select_aggregat_having(self): |
601 rset = self.qexecute('Any N,COUNT(RDEF) GROUPBY N ORDERBY 2,N ' |
602 rset = self.qexecute('Any N,COUNT(RDEF) GROUPBY N ORDERBY 2,N ' |
602 'WHERE RT name N, RDEF relation_type RT ' |
603 'WHERE RT name N, RDEF relation_type RT ' |
603 'HAVING COUNT(RDEF) > 10') |
604 'HAVING COUNT(RDEF) > 10') |
604 self.assertListEqual(rset.rows, |
605 self.assertListEqual(rset.rows, |
605 [[u'description_format', 12], |
606 [[u'description_format', 13], |
606 [u'description', 13], |
607 [u'description', 14], |
607 [u'name', 17], |
608 [u'name', 18], |
608 [u'created_by', 43], |
609 [u'created_by', 44], |
609 [u'creation_date', 43], |
610 [u'creation_date', 44], |
610 [u'cw_source', 43], |
611 [u'cw_source', 44], |
611 [u'cwuri', 43], |
612 [u'cwuri', 44], |
612 [u'in_basket', 43], |
613 [u'in_basket', 44], |
613 [u'is', 43], |
614 [u'is', 44], |
614 [u'is_instance_of', 43], |
615 [u'is_instance_of', 44], |
615 [u'modification_date', 43], |
616 [u'modification_date', 44], |
616 [u'owned_by', 43]]) |
617 [u'owned_by', 44]]) |
617 |
618 |
618 def test_select_aggregat_having_dumb(self): |
619 def test_select_aggregat_having_dumb(self): |
619 # dumb but should not raise an error |
620 # dumb but should not raise an error |
620 rset = self.qexecute('Any U,COUNT(X) GROUPBY U ' |
621 rset = self.qexecute('Any U,COUNT(X) GROUPBY U ' |
621 'WHERE U eid %(x)s, X owned_by U ' |
622 'WHERE U eid %(x)s, X owned_by U ' |