[Erp5-report] r36102 yusei - /erp5/trunk/products/ERP5/Tool/DomainTool.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Jun 8 15:46:43 CEST 2010
Author: yusei
Date: Tue Jun 8 15:46:43 2010
New Revision: 36102
URL: http://svn.erp5.org?rev=36102&view=rev
Log:
Add "no-left join" mode to searchPredicateList method. This mode is
enabled only if preferred predicate category list is defined and
all elements in tested_base_category_list parameter are contained in
that preferred value.
Modified:
erp5/trunk/products/ERP5/Tool/DomainTool.py
Modified: erp5/trunk/products/ERP5/Tool/DomainTool.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Tool/DomainTool.py?rev=36102&r1=36101&r2=36102&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Tool/DomainTool.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Tool/DomainTool.py [utf8] Tue Jun 8 15:46:43 2010
@@ -105,6 +105,7 @@
"""
portal_catalog = context.portal_catalog
portal_categories = context.portal_categories
+ portal_preferences = context.portal_preferences
# Search the columns of the predicate table
column_list = [x.split('.')[1] for x in portal_catalog.getColumnIds()
if x.startswith('predicate.')]
@@ -186,22 +187,56 @@
context.getCategoryMembershipList(tested_base_category, base=1))
if tested_base_category_list != []:
- if len(category_list)==0:
- category_list = ['NULL']
- category_expression_dict = portal_categories.buildAdvancedSQLSelector(
- category_list,
- query_table='predicate_category',
- none_sql_value=0,
- strict=strict)
- where_expression = category_expression_dict['where_expression']
- if where_expression:
- sql_kw['where_expression'] = SQLQuery(where_expression)
-
- if 'from_expression' in category_expression_dict:
- sql_kw['from_expression'] = category_expression_dict['from_expression']
+ preferred_predicate_category_list = portal_preferences.getPreferredPredicateCategoryList()
+
+ if preferred_predicate_category_list and tested_base_category_list is not None:
+ # New behavior is enabled only if preferred predicate category is
+ # defined and tested_base_category_list is passed.
+ predicate_category_query_list = []
+ predicate_category_table_name_list = []
+ for relative_url in category_list:
+ category_value = portal_categories.getCategoryValue(relative_url)
+ base_category_value = category_value.getBaseCategory()
+ if base_category_value.getId() in preferred_predicate_category_list:
+ table_index = len(predicate_category_query_list)
+ predicate_category_table_name = 'predicate_category_for_domain_tool_%s' % table_index
+ table_alias_list = [('predicate_category', predicate_category_table_name)]
+ predicate_category_query_list.append(
+ ComplexQuery(
+ Query(predicate_category_base_category_uid=base_category_value.getUid(), table_alias_list=table_alias_list),
+ Query(predicate_category_category_strict_membership=1, table_alias_list=table_alias_list),
+ ComplexQuery(
+ Query(predicate_category_category_uid=category_value.getUid(), table_alias_list=table_alias_list),
+ Query(predicate_category_category_uid='NULL', table_alias_list=table_alias_list),
+ logical_operator='OR'),
+ logical_operator='AND'))
+
+ if not predicate_category_query_list:
+ # Prevent matching everything
+ predicate_category_query_list.append(Query(predicate_category_base_category_uid=0))
+
+ predicate_category_query = ComplexQuery(
+ logical_operator='AND',
+ *predicate_category_query_list)
+ query_list.append(predicate_category_query)
else:
- # Add predicate_category.uid for automatic join
- sql_kw['predicate_category.uid'] = '!=NULL'
+ # Traditional behavior
+ if len(category_list)==0:
+ category_list = ['NULL']
+ category_expression_dict = portal_categories.buildAdvancedSQLSelector(
+ category_list,
+ query_table='predicate_category',
+ none_sql_value=0,
+ strict=strict)
+ where_expression = category_expression_dict['where_expression']
+ if where_expression:
+ sql_kw['where_expression'] = SQLQuery(where_expression)
+
+ if 'from_expression' in category_expression_dict:
+ sql_kw['from_expression'] = category_expression_dict['from_expression']
+ else:
+ # Add predicate_category.uid for automatic join
+ sql_kw['predicate_category.uid'] = '!=NULL'
kw.update(sql_kw)
if query_list:
More information about the Erp5-report
mailing list