thirdparty/google_appengine/google/appengine/ext/search/__init__.py
changeset 1278 a7766286a7be
parent 297 35211afcd563
child 2309 be1b94099f2d
--- a/thirdparty/google_appengine/google/appengine/ext/search/__init__.py	Thu Feb 12 10:24:37 2009 +0000
+++ b/thirdparty/google_appengine/google/appengine/ext/search/__init__.py	Thu Feb 12 12:30:36 2009 +0000
@@ -260,11 +260,30 @@
         filter.set_op(datastore_pb.Query_Filter.EQUAL)
         prop = filter.add_property()
         prop.set_name(SearchableEntity._FULL_TEXT_INDEX_PROPERTY)
+        prop.set_multiple(len(keywords) > 1)
         prop.mutable_value().set_stringvalue(unicode(keyword).encode('utf-8'))
 
     return pb
 
 
+class SearchableMultiQuery(datastore.MultiQuery):
+  """A multiquery that supports Search() by searching subqueries."""
+
+  def Search(self, *args, **kwargs):
+    """Add a search query, by trying to add it to all subqueries.
+
+    Args:
+      args: Passed to Search on each subquery.
+      kwargs: Passed to Search on each subquery.
+
+    Returns:
+      self for consistency with SearchableQuery.
+    """
+    for q in self:
+      q.Search(*args, **kwargs)
+    return self
+
+
 class SearchableModel(db.Model):
   """A subclass of db.Model that supports full text search and indexing.
 
@@ -290,7 +309,9 @@
 
     def _get_query(self):
       """Wraps db.Query._get_query() and injects SearchableQuery."""
-      query = db.Query._get_query(self, _query_class=SearchableQuery)
+      query = db.Query._get_query(self,
+                                  _query_class=SearchableQuery,
+                                  _multi_query_class=SearchableMultiQuery)
       if self._search_query:
         query.Search(self._search_query)
       return query