[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