[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