Commit 35c310bd authored by Kazuhiko Shiozaki's avatar Kazuhiko Shiozaki

fixup! full text: merge several full text AND queries into one.

parent 7655945f
...@@ -40,15 +40,19 @@ class MroongaFullTextKey(DefaultKey): ...@@ -40,15 +40,19 @@ class MroongaFullTextKey(DefaultKey):
same operator into just one query, to save SQL server from the burden to same operator into just one query, to save SQL server from the burden to
do multiple fulltext lookups when one would suit the purpose. do multiple fulltext lookups when one would suit the purpose.
""" """
print '_buildQuery: %r, %r, %r, %r' % (operator_value_dict, logical_operator, parsed, group)
column = self.getColumn() column = self.getColumn()
query_list = [] query_list = []
append = query_list.append append = query_list.append
def escape(x): def escape(x):
return (not parsed and '"%s"' % x.replace('"', '\\\\"') or x).replace( # We need to escape once here for Mroonga, and it will be
'(', '\\\\(').replace( # escaped once more in OperatorBase._renderValue().
')', '\\\\)') return (not parsed and '"%s"' % x.replace('"', '\\"') or x).replace(
for comparison_operator, value_list in operator_value_dict.iteritems(): '(', '\\(').replace(
')', '\\)')
for comparison_operator in ('mroonga', 'mroonga_boolean'):
value_list = operator_value_dict.pop(comparison_operator, [])
if not value_list:
continue
if logical_operator == 'and': if logical_operator == 'and':
joined_value = ' '.join(escape(value) for value in value_list) joined_value = ' '.join(escape(value) for value in value_list)
append(SimpleQuery(search_key=self, append(SimpleQuery(search_key=self,
...@@ -60,6 +64,10 @@ class MroongaFullTextKey(DefaultKey): ...@@ -60,6 +64,10 @@ class MroongaFullTextKey(DefaultKey):
append(SimpleQuery(search_key=self, append(SimpleQuery(search_key=self,
comparison_operator=comparison_operator, comparison_operator=comparison_operator,
group=group, **{column:escape(value)})) group=group, **{column:escape(value)}))
# Other comparison operators are handled by the super class.
if operator_value_dict:
query_list += super(MroongaFullTextKey, self)._buildQuery(
operator_value_dict, logical_operator, parsed, group)
return query_list return query_list
verifyClass(ISearchKey, MroongaFullTextKey) verifyClass(ISearchKey, MroongaFullTextKey)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment