[Erp5-report] r13718 - /erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Mar 27 16:34:45 CEST 2007
Author: seb
Date: Tue Mar 27 16:34:44 2007
New Revision: 13718
URL: http://svn.erp5.org?rev=13718&view=rev
Log:
- allow to define aliases used by related keys
- make buildSQLQuery a bit faster
Modified:
erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
Modified: erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SQLCatalog.py?rev=13718&r1=13717&r2=13718&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py Tue Mar 27 16:34:44 2007
@@ -203,13 +203,14 @@
format - %d/%m/%Y
"""
def __init__(self, format=None, operator=None, range=None,
- search_mode=None, **kw):
+ search_mode=None, table_alias_list=None, **kw):
self.format = format
if operator is None:
operator = 'OR'
self.operator = operator
self.range = range
self.search_mode = search_mode
+ self.table_alias_list = table_alias_list
key_list = kw.keys()
if len(key_list) != 1:
raise KeyError, 'Query must have only one key'
@@ -224,6 +225,16 @@
def getFormat(self):
return self.format
+
+ def getTableAliasList(self):
+ return self.table_alias_list
+
+ def getRelatedTableMapDict(self):
+ result = {}
+ table_alias_list = self.getTableAliasList()
+ if table_alias_list is not None:
+ result[self.getKey()] = table_alias_list
+ return result
def getSearchMode(self):
return self.search_mode
@@ -384,6 +395,12 @@
def getQueryList(self):
return self.query_list
+ def getRelatedTableMapDict(self):
+ result = {}
+ for query in self.getQueryList():
+ result.update(query.getRelatedTableMapDict())
+ return result
+
def asSQLExpression(self, key_alias_dict=None,
ignore_empty_string=1,
keyword_search_keys=None,
@@ -1870,6 +1887,9 @@
key_list = [] # the list of column keys
key_alias_dict = {}
query_group_by_list = None # Useful to keep a default group_by passed by scriptable keys
+ query_related_table_map_dict = {}
+ if query is not None:
+ kw ['query'] = query
for key in kw.keys():
if key not in RESERVED_KEY_LIST:
value = kw[key]
@@ -1895,10 +1915,7 @@
if current_query is not None:
query_dict[key] = current_query
key_list.extend(current_query.getSQLKeyList())
-
- if query is not None:
- query_dict['query'] = query
- key_list.extend(query.getSQLKeyList())
+ query_related_table_map_dict.update(current_query.getRelatedTableMapDict())
# if we have a sort index, we must take it into account to get related
# keys.
@@ -1924,23 +1941,25 @@
for t in related_tuples:
t_tuple = t.split('|')
key = t_tuple[0].strip()
- join_tuple = t_tuple[1].strip().split('/')
- #LOG('related_tuples', 0, str(join_tuple))
- related_keys.append(key)
-# LOG('buildSqlQuery, join_tuple',0,join_tuple)
- method_id = join_tuple[2]
- table_list = tuple(join_tuple[0].split(','))
- related_method[key] = method_id
- related_table_list[key] = table_list
- related_column[key] = join_tuple[1]
- # Rename tables to prevent conflicts
- if not related_table_map.has_key((table_list,method_id)):
- map_list = []
- for table_id in table_list:
- map_list.append((table_id,
- "related_%s_%s" % (table_id, table_rename_index))) # We add an index in order to alias tables in the join
- table_rename_index += 1 # and prevent name conflicts
- related_table_map[(table_list,method_id)] = map_list
+ if key in key_list:
+ join_tuple = t_tuple[1].strip().split('/')
+ related_keys.append(key)
+ method_id = join_tuple[2]
+ table_list = tuple(join_tuple[0].split(','))
+ related_method[key] = method_id
+ related_table_list[key] = table_list
+ related_column[key] = join_tuple[1]
+ # Check if some aliases where specified in queries
+ map_list = query_related_table_map_dict.get(key,None)
+ # Rename tables to prevent conflicts
+ if not related_table_map.has_key((table_list,method_id)):
+ if map_list is None:
+ map_list = []
+ for table_id in table_list:
+ map_list.append((table_id,
+ "related_%s_%s" % (table_id, table_rename_index))) # We add an index in order to alias tables in the join
+ table_rename_index += 1 # and prevent name conflicts
+ related_table_map[(table_list,method_id)] = map_list
# We take additional parameters from the REQUEST
# and give priority to the REQUEST
More information about the Erp5-report
mailing list