[Erp5-report] r27662 - in /erp5/trunk/products/ZSQLCatalog: Query/ interfaces/

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Jun 18 17:10:19 CEST 2009


Author: vincent
Date: Thu Jun 18 17:10:15 2009
New Revision: 27662

URL: http://svn.erp5.org?rev=27662&view=rev
Log:
Replace asSearchTextExpression implementations with _asSearchTextExpression and a default asSearchTextExpression wrapping _asSearchTextExpression call.
This fixes unneeded parentheses in generated search text expressions.

Modified:
    erp5/trunk/products/ZSQLCatalog/Query/AutoQuery.py
    erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py
    erp5/trunk/products/ZSQLCatalog/Query/Query.py
    erp5/trunk/products/ZSQLCatalog/Query/RelatedQuery.py
    erp5/trunk/products/ZSQLCatalog/Query/SQLQuery.py
    erp5/trunk/products/ZSQLCatalog/Query/SimpleQuery.py
    erp5/trunk/products/ZSQLCatalog/interfaces/query.py

Modified: erp5/trunk/products/ZSQLCatalog/Query/AutoQuery.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Query/AutoQuery.py?rev=27662&r1=27661&r2=27662&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Query/AutoQuery.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Query/AutoQuery.py [utf8] Thu Jun 18 17:10:15 2009
@@ -111,6 +111,12 @@
     self.wrapped_query = query
 
   @profiler_decorator
+  def _asSearchTextExpression(self, sql_catalog, column=None):
+    if self.wrapped_query is None:
+      self._createWrappedQuery(sql_catalog)
+    return self.wrapped_query._asSearchTextExpression(sql_catalog, column=column)
+
+  @profiler_decorator
   def asSearchTextExpression(self, sql_catalog, column=None):
     if self.wrapped_query is None:
       self._createWrappedQuery(sql_catalog)

Modified: erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py?rev=27662&r1=27661&r2=27662&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Query/ComplexQuery.py [utf8] Thu Jun 18 17:10:15 2009
@@ -93,29 +93,48 @@
     self.query_list = new_query_list
 
   @profiler_decorator
-  def asSearchTextExpression(self, sql_catalog, column=None):
+  def _asSearchTextExpression(self, sql_catalog, column=None):
     if column in (None, ''):
       query_column = column
     else:
       query_column = ''
-    search_text_list = [y for y in [x.asSearchTextExpression(sql_catalog, column=query_column) for x in self.query_list] if y is not None]
+    search_text_list = []
+    composition_list = []
+    for query in self.query_list:
+      is_composed, search_text = query._asSearchTextExpression(sql_catalog, column=query_column)
+      if search_text is not None:
+        search_text_list.append(search_text)
+        composition_list.append(is_composed)
+    self_is_composed = False
     if len(search_text_list) == 0:
       result = ''
     else:
       if self.logical_operator in logical_operator_search_text_dict:
         if len(search_text_list) == 1:
           result = search_text_list[0]
+          self_is_composed = composition_list[0]
         else:
+          self_is_composed = True
           logical_operator = ' %s ' % (logical_operator_search_text_dict[self.logical_operator], )
-          result = '(%s)' % (logical_operator.join(search_text_list), )
+          parenthesed_search_text_list = []
+          append = parenthesed_search_text_list.append
+          for is_composed, search_text in zip(composition_list, search_text_list):
+            if is_composed:
+              append('(%s)' % (search_text, ))
+            else:
+              append(search_text)
+          result = logical_operator.join(parenthesed_search_text_list)
       elif self.logical_operator == 'not':
         assert len(search_text_list) == 1
-        result = '(NOT %s)' % (search_text_list[0], )
+        result = 'NOT %s' % (search_text_list[0], )
       else:
         raise ValueError, 'Unknown operator %r' % (self.logical_operator, )
       if column not in (None, ''):
+        if self_is_composed:
+          result = '(%s)' % (result, )
+          self_is_composed = False
         result = '%s:%s' % (column, result)
-    return result
+    return self_is_composed, result
 
   @profiler_decorator
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):

Modified: erp5/trunk/products/ZSQLCatalog/Query/Query.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Query/Query.py?rev=27662&r1=27661&r2=27662&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Query/Query.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Query/Query.py [utf8] Thu Jun 18 17:10:15 2009
@@ -46,11 +46,14 @@
     """
     raise TypeError, 'A %s cannot be rendered as an SQL expression.' % (self.__class__.__name__, )
 
-  def asSearchTextExpression(self, sql_catalog, column=None):
+  def _asSearchTextExpression(self, sql_catalog, column=None):
     """
       To enable Search Text rendering, overload this method in a subclass.
     """
     raise TypeError, 'A %s cannot be rendered as a SearchText expression.' % (self.__class__.__name__, )
+
+  def asSearchTextExpression(self, sql_catalog, column=None):
+    return self._asSearchTextExpression(sql_catalog, column=column)[1]
 
   def registerColumnMap(self, sql_catalog, column_map):
     """

Modified: erp5/trunk/products/ZSQLCatalog/Query/RelatedQuery.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Query/RelatedQuery.py?rev=27662&r1=27661&r2=27662&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Query/RelatedQuery.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Query/RelatedQuery.py [utf8] Thu Jun 18 17:10:15 2009
@@ -65,14 +65,14 @@
     self.table_alias_list = table_alias_list
 
   @profiler_decorator
-  def asSearchTextExpression(self, sql_catalog, column=None):
+  def _asSearchTextExpression(self, sql_catalog, column=None):
     assert column is None
     join_condition = self.join_condition
     if join_condition is None:
       result = None
     else:
       result = join_condition.asSearchTextExpression(sql_catalog, column=self.search_key.getColumn())
-    return result
+    return False, result
 
   @profiler_decorator
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):

Modified: erp5/trunk/products/ZSQLCatalog/Query/SQLQuery.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Query/SQLQuery.py?rev=27662&r1=27661&r2=27662&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Query/SQLQuery.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Query/SQLQuery.py [utf8] Thu Jun 18 17:10:15 2009
@@ -49,8 +49,8 @@
     assert len(payload)
     self.payload = '(' + payload + ')'
 
-  def asSearchTextExpression(self, sql_catalog):
-    return None
+  def _asSearchTextExpression(self, sql_catalog, column=None):
+    return False, None
 
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):
     return SQLExpression(self, where_expression=self.payload)

Modified: erp5/trunk/products/ZSQLCatalog/Query/SimpleQuery.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Query/SimpleQuery.py?rev=27662&r1=27661&r2=27662&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Query/SimpleQuery.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Query/SimpleQuery.py [utf8] Thu Jun 18 17:10:15 2009
@@ -95,8 +95,8 @@
     self.group = group
 
   @profiler_decorator
-  def asSearchTextExpression(self, sql_catalog, column=None):
-    return self.getSearchKey(sql_catalog).buildSearchTextExpression(self.getOperator(sql_catalog), self.getValue(), column=column)
+  def _asSearchTextExpression(self, sql_catalog, column=None):
+    return False, self.getSearchKey(sql_catalog).buildSearchTextExpression(self.getOperator(sql_catalog), self.getValue(), column=column)
 
   @profiler_decorator
   def asSQLExpression(self, sql_catalog, column_map, only_group_columns):

Modified: erp5/trunk/products/ZSQLCatalog/interfaces/query.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/interfaces/query.py?rev=27662&r1=27661&r2=27662&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/interfaces/query.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/interfaces/query.py [utf8] Thu Jun 18 17:10:15 2009
@@ -47,6 +47,15 @@
     format.
   """
 
+  def _asSearchTextExpression(sql_catalog, column=None):
+    """
+      Same as asSearchTextExpression, but also returns a boolean telling
+      caller if returned value must be parenthesed.
+      Returns a 2-tuple:
+      - a boolean (True if returned string must be parenthesed)
+      - a string (a SearchText expression)
+    """
+
   def asSearchTextExpression(sql_catalog, column=None):
     """
       Render a query in a user-oriented SearchText.




More information about the Erp5-report mailing list