Merge remote-tracking branch 'origin/pr/333' into 333
This commit is contained in:
		| @@ -23,6 +23,9 @@ class QNodeVisitor(object): | ||||
|         return query | ||||
|  | ||||
|  | ||||
| class DuplicateQueryConditionsError(InvalidQueryError): | ||||
|     pass | ||||
|  | ||||
| class SimplificationVisitor(QNodeVisitor): | ||||
|     """Simplifies query trees by combinging unnecessary 'and' connection nodes | ||||
|     into a single Q-object. | ||||
| @@ -33,7 +36,10 @@ class SimplificationVisitor(QNodeVisitor): | ||||
|             # The simplification only applies to 'simple' queries | ||||
|             if all(isinstance(node, Q) for node in combination.children): | ||||
|                 queries = [n.query for n in combination.children] | ||||
|                 return Q(**self._query_conjunction(queries)) | ||||
|                 try: | ||||
|                     return Q(**self._query_conjunction(queries)) | ||||
|                 except DuplicateQueryConditionsError: | ||||
|                     pass | ||||
|         return combination | ||||
|  | ||||
|     def _query_conjunction(self, queries): | ||||
| @@ -47,8 +53,7 @@ class SimplificationVisitor(QNodeVisitor): | ||||
|             # to a single field | ||||
|             intersection = ops.intersection(query_ops) | ||||
|             if intersection: | ||||
|                 msg = 'Duplicate query conditions: ' | ||||
|                 raise InvalidQueryError(msg + ', '.join(intersection)) | ||||
|                 raise DuplicateQueryConditionsError() | ||||
|  | ||||
|             query_ops.update(ops) | ||||
|             combined_query.update(copy.deepcopy(query)) | ||||
|   | ||||
		Reference in New Issue
	
	Block a user