[Erp5-report] r25940 - in /erp5/trunk/products/ZSQLCatalog: ./ Interface/ SearchKey/ Search...
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Mar 10 14:41:23 CET 2009
Author: vincent
Date: Tue Mar 10 14:41:20 2009
New Revision: 25940
URL: http://svn.erp5.org?rev=25940&view=rev
Log:
Strenghten a bit SearchText detector: a word followed by a colon is not enough to qulify as a COLUMN token, tha word must also be in a set of valid column names.
Modified:
erp5/trunk/products/ZSQLCatalog/Interface/ISearchKey.py
erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
erp5/trunk/products/ZSQLCatalog/SearchKey/DefaultKey.py
erp5/trunk/products/ZSQLCatalog/SearchKey/FullTextKey.py
erp5/trunk/products/ZSQLCatalog/SearchKey/KeywordKey.py
erp5/trunk/products/ZSQLCatalog/SearchKey/SearchKey.py
erp5/trunk/products/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py
erp5/trunk/products/ZSQLCatalog/SearchText/SearchTextParser.py
Modified: erp5/trunk/products/ZSQLCatalog/Interface/ISearchKey.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/Interface/ISearchKey.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/Interface/ISearchKey.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/Interface/ISearchKey.py [utf8] Tue Mar 10 14:41:20 2009
@@ -109,7 +109,7 @@
If given, expresses the comparison between column and value.
"""
- def parseSearchText(value):
+ def parseSearchText(value, column_id_set):
"""
Parse given value to generate an Abstract Syntax Tree representing its
logical structure, or None if there is no obvious structure in given
@@ -118,6 +118,9 @@
value (string)
The string to parse.
+ column_id_set (set)
+ A list of valid column names. This is used when deciding wether value
+ should really be parsed or remain a bare string.
Returns: (None, AbstratSyntaxNode)
AbstratSyntaxNode complies with the IAbstractSyntaxNode interface.
Modified: erp5/trunk/products/ZSQLCatalog/SQLCatalog.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SQLCatalog.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SQLCatalog.py [utf8] Tue Mar 10 14:41:20 2009
@@ -1981,6 +1981,9 @@
# column names with empty values. This is for backward compatibility. See
# comment about empty values.
implicit_table_list = []
+ # It's not a problem to use a dict instead of a set here, and saves a
+ # cast.
+ column_id_set = self.getColumnMap()
for key, value in kw.iteritems():
result = None
if isinstance(value, dict_type_list):
@@ -2014,7 +2017,7 @@
# String: parse using key's default search key.
search_key = self.getColumnDefaultSearchKey(key)
if search_key is not None:
- abstract_syntax_tree = search_key.parseSearchText(value)
+ abstract_syntax_tree = search_key.parseSearchText(value, column_id_set)
if abstract_syntax_tree is None:
# Parsing failed, create a query from the bare string.
result = self.buildSingleQuery(key, value)
Modified: erp5/trunk/products/ZSQLCatalog/SearchKey/DefaultKey.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SearchKey/DefaultKey.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SearchKey/DefaultKey.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SearchKey/DefaultKey.py [utf8] Tue Mar 10 14:41:20 2009
@@ -42,8 +42,8 @@
default_comparison_operator = '='
get_operator_from_value = True
- def parseSearchText(self, value):
- return parse(value)
+ def parseSearchText(self, value, column_id_set):
+ return parse(value, column_id_set)
def _guessComparisonOperator(self, value):
if isinstance(value, basestring) and '%' in value:
Modified: erp5/trunk/products/ZSQLCatalog/SearchKey/FullTextKey.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SearchKey/FullTextKey.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SearchKey/FullTextKey.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SearchKey/FullTextKey.py [utf8] Tue Mar 10 14:41:20 2009
@@ -40,8 +40,8 @@
default_comparison_operator = 'match'
get_operator_from_value = False
- def parseSearchText(self, value):
- return parse(value)
+ def parseSearchText(self, value, column_id_set):
+ return parse(value, column_id_set)
verifyClass(ISearchKey, FullTextKey)
Modified: erp5/trunk/products/ZSQLCatalog/SearchKey/KeywordKey.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SearchKey/KeywordKey.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SearchKey/KeywordKey.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SearchKey/KeywordKey.py [utf8] Tue Mar 10 14:41:20 2009
@@ -42,8 +42,8 @@
default_comparison_operator = 'like'
get_operator_from_value = True
- def parseSearchText(self, value):
- return parse(value)
+ def parseSearchText(self, value, column_id_set):
+ return parse(value, column_id_set)
def _buildQuery(self, operator_value_dict, logical_operator, parsed, group):
"""
Modified: erp5/trunk/products/ZSQLCatalog/SearchKey/SearchKey.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SearchKey/SearchKey.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SearchKey/SearchKey.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SearchKey/SearchKey.py [utf8] Tue Mar 10 14:41:20 2009
@@ -341,7 +341,7 @@
query = ComplexQuery(query_list, operator=logical_operator)
return query
- def parseSearchText(self, value):
+ def parseSearchText(self, value, column_id_set):
return None
verifyClass(ISearchKey, SearchKey)
Modified: erp5/trunk/products/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SearchText/AdvancedSearchTextDetector.py [utf8] Tue Mar 10 14:41:20 2009
@@ -47,7 +47,7 @@
return t
def t_COLUMN(self, t):
- self.found = True
+ self.found = t.value[:-1] in self.column_id_set
t.type = 'WORD'
return t
@@ -89,7 +89,8 @@
def token(self):
return self.token_list.pop(0)
- def __call__(self, input):
+ def __call__(self, input, column_id_set):
+ self.column_id_set = column_id_set
self.found = False
check_grammar = False
self.token_list = token_list = []
Modified: erp5/trunk/products/ZSQLCatalog/SearchText/SearchTextParser.py
URL: http://svn.erp5.org/erp5/trunk/products/ZSQLCatalog/SearchText/SearchTextParser.py?rev=25940&r1=25939&r2=25940&view=diff
==============================================================================
--- erp5/trunk/products/ZSQLCatalog/SearchText/SearchTextParser.py [utf8] (original)
+++ erp5/trunk/products/ZSQLCatalog/SearchText/SearchTextParser.py [utf8] Tue Mar 10 14:41:20 2009
@@ -66,8 +66,8 @@
return parser
@profiler_decorator
-def _parse(input, *args, **kw):
- if getAdvancedSearchTextDetector()(input):
+def _parse(input, column_id_set, *args, **kw):
+ if getAdvancedSearchTextDetector()(input, column_id_set):
result = getAdvancedSearchTextParser()(input, *args, **kw)
else:
result = None
@@ -274,12 +274,13 @@
return result
original_parse = _parse
+ fake_column_id_set = set(['a', 'b', 'c', 'd', 'title', 'toto', 'titi', 'foo', 'bar'])
def parse(input, *args, **kw):
"""
Parse input and walk generated AST.
"""
- result = original_parse(input, *args, **kw)
+ result = original_parse(input, fake_column_id_set, *args, **kw)
if result is not None:
#print repr(result)
result = walk(result)
@@ -309,7 +310,7 @@
print repr(input)
try:
try:
- detector_result = getAdvancedSearchTextDetector()(input)
+ detector_result = getAdvancedSearchTextDetector()(input, fake_column_id_set)
except ParserOrLexerError, message:
print ' Detector raise: %r' % (message, )
detector_result = False
More information about the Erp5-report
mailing list