[Erp5-report] r9333 - /erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Aug 22 18:43:25 CEST 2006
Author: bartek
Date: Tue Aug 22 18:43:21 2006
New Revision: 9333
URL: http://svn.erp5.org?rev=9333&view=rev
Log:
added support for arbitrary select_expression; fulltext searches return relevance values;
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=9333&r1=9332&r2=9333&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py Tue Aug 22 18:43:21 2006
@@ -1486,8 +1486,12 @@
# kw[key] = REQUEST[key]
# Let us start building the where_expression
+ # and select_expression
if kw:
where_expression = []
+ select_expression = []
+ if kw.has_key('select_expression'):
+ select_expression.append(kw['select_expression'])
from_table_dict = {'catalog' : 'catalog'} # Always include catalog table
sort_on = None
@@ -1622,12 +1626,17 @@
# or we fall back to natural mode
search_mode=kw.get('search_mode_%s' % key) \
or kw.get('search_mode_%s' % key.replace('.','_')) \
- or (key.find('.')>-1 and kw.get('search_mode_%s' % key.split('.')[1])) \
+ or ('.' in key and kw.get('search_mode_%s' % key.split('.')[1])) \
or kw.get('search_mode', 'natural')
if search_mode is not None:
search_mode=search_mode.lower()
mode = full_text_search_modes.get(search_mode,'')
where_expression += ["MATCH %s AGAINST ('%s' %s)" % (key, value, mode)]
+ # we return relevance as Table_Key_relevance
+ select_expression += ["MATCH %s AGAINST ('%s' %s) AS %s_relevance" % (key, value, mode,key.replace('.','_'))]
+ # and for simplicity as Key_relevance
+ if '.' in key:
+ select_expression += ["MATCH %s AGAINST ('%s' %s) AS %s_relevance" % (key, value, mode,key.split('.')[1])]
else:
where_expression += ["%s = '%s'" % (key, value)]
elif isinstance(value, (list, tuple)):
@@ -1656,12 +1665,17 @@
# or we fall back to natural mode
search_mode=kw.get('search_mode_%s' % key) \
or kw.get('search_mode_%s' % key.replace('.','_')) \
- or (key.find('.')>-1 and kw.get('search_mode_%' % key.split('.')[1])) \
+ or ('.' in key and kw.get('search_mode_%' % key.split('.')[1])) \
or kw.get('search_mode', 'natural')
if search_mode is not None:
search_mode=search_mode.lower()
mode = full_text_search_modes.get(search_mode, '')
query_item += ["MATCH %s AGAINST ('%s')" % (key, value, mode)]
+ # we return relevance as Table_Key_relevance
+ select_expression += ["MATCH %s AGAINST ('%s' %s) AS %s_relevance" % (key, value, mode,key.replace('.','_'))]
+ # and for simplicity as Key_relevance
+ if '.' in key:
+ select_expression += ["MATCH %s AGAINST ('%s' %s) AS %s_relevance" % (key, value, mode,key.split('.')[1])]
else:
query_item += ["%s = '%s'" % (key, value_item)]
if len(query_item) > 0:
@@ -1737,12 +1751,13 @@
from_table_dict[t_tuple[1]] = t_tuple[0]
table_index += 1
where_expression.append(related_method(**table_id))
- # Concatenate where_expressions
+ # Concatenate expressions
if kw.get('where_expression'):
if len(where_expression) > 0:
where_expression = "(%s) AND (%s)" % (kw['where_expression'], join(where_expression, ' AND ') )
else:
where_expression = join(where_expression, ' AND ')
+ select_expression= join(select_expression,',')
limit_expression = kw.get('limit', None)
if isinstance(limit_expression, (list, tuple)):
@@ -1754,7 +1769,8 @@
return { 'from_table_list' : from_table_dict.items(),
'order_by_expression' : sort_on,
'where_expression' : where_expression,
- 'limit_expression' : limit_expression }
+ 'limit_expression' : limit_expression,
+ 'select_expression': select_expression}
def queryResults(self, sql_method, REQUEST=None, used=None, src__=0, **kw):
""" Returns a list of brains from a set of constraints on variables """
@@ -1763,6 +1779,7 @@
kw['sort_on'] = query['order_by_expression']
kw['from_table_list'] = query['from_table_list']
kw['limit_expression'] = query['limit_expression']
+ kw['select_expression'] = query['select_expression']
# Return the result
#LOG('acceptable_keys',0,'acceptable_keys: %s' % str(acceptable_keys))
More information about the Erp5-report
mailing list