diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py
index 717858e1..88bcab5f 100644
--- a/gluon/sqlhtml.py
+++ b/gluon/sqlhtml.py
@@ -1756,10 +1756,16 @@ class SQLFORM(FORM):
keywords = keywords[0]
request.vars.keywords = keywords
key = keywords.strip()
- if key and ' ' not in key and not '"' in key and not "'" in key:
+ if not '"' in key:
SEARCHABLE_TYPES = ('string', 'text', 'list:string')
- parts = [field.contains(
- key) for field in fields if field.type in SEARCHABLE_TYPES]
+ sfields = [field for field in fields if field.type in SEARCHABLE_TYPES]
+ if settings.global_settings.web2py_runtime_gae:
+ return reduce(lambda a,b: a|b, [field.contains(key) for field in sfields])
+ else:
+ return reduce(lambda a,b:a&b,[
+ reduce(lambda a,b: a|b, [
+ field.contains(k) for field in sfields]
+ ) for k in key.split()])
# from https://groups.google.com/forum/#!topic/web2py/hKe6lI25Bv4
# needs testing...
@@ -1773,10 +1779,6 @@ class SQLFORM(FORM):
# filters.append(reduce(lambda a, b: (a & b), all_words_filters))
#parts = filters
- else:
- parts = None
- if parts:
- return reduce(lambda a, b: a | b, parts)
else:
return smart_query(fields, key)