[Erp5-report] r33145 yusuke - /erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri Feb 26 12:22:02 CET 2010
Author: yusuke
Date: Fri Feb 26 12:22:01 2010
New Revision: 33145
URL: http://svn.erp5.org?rev=33145&view=rev
Log:
the query shall raise an exception when buggy case.
Modified:
erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py
Modified: erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py?rev=33145&r1=33144&r2=33145&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py [utf8] Fri Feb 26 12:22:01 2010
@@ -34,6 +34,8 @@
from Products.ZSQLCatalog.interfaces.query import IQuery
from zope.interface.verify import verifyClass
from Products.ZSQLCatalog.SQLCatalog import profiler_decorator
+from Products.ZSQLCatalog.Query.AutoQuery import AutoQuery
+from Products.ZSQLCatalog.Query.RelatedQuery import RelatedQuery
logical_operator_search_text_dict = {
'and': 'AND',
@@ -91,6 +93,45 @@
query = SQLQuery(query)
append(query)
self.query_list = new_query_list
+ self.checkQueryTree()
+
+ def _findRelatedQuery(self, query):
+ """
+ XXX This method is used for checkQueryTree checking.
+ Find RelatedQuery or a query which have RelatedQuery
+ from container queries recursively
+ """
+ result = None
+ if isinstance(query, AutoQuery):
+ result = self._findRelatedQuery(query.wrapped_query)
+ elif isinstance(query, ComplexQuery):
+ if getattr(query, '_has_related_query', False):
+ result = query
+ else:
+ for sub_query in query.query_list:
+ result = self._findRelatedQuery(sub_query)
+ if result:
+ break
+ elif isinstance(query, RelatedQuery):
+ result = query
+ return result
+
+ def checkQueryTree(self):
+ """
+ XXX
+ If self has 'or' operator and a RelatedQuery in the tree,
+ it will not return valid result.
+ """
+ for query in self.query_list:
+ result = self._findRelatedQuery(query)
+ if result:
+ self._has_related_query = True
+ break
+ else:
+ self._has_related_query = False
+ if (self._has_related_query and
+ self.logical_operator == 'or'):
+ raise NotImplementedError
@profiler_decorator
def _asSearchTextExpression(self, sql_catalog, column=None):
More information about the Erp5-report
mailing list