diff --git a/tests/xapian_tests/tests/xapian_backend.py b/tests/xapian_tests/tests/xapian_backend.py index a8a708b..bcf63ca 100644 --- a/tests/xapian_tests/tests/xapian_backend.py +++ b/tests/xapian_tests/tests/xapian_backend.py @@ -373,6 +373,14 @@ class LiveXapianSearchQueryTestCase(TestCase): self.assertEqual(self.sq.get_spelling_suggestion(), u'indexed') self.assertEqual(self.sq.get_spelling_suggestion('indxd'), u'indexed') + def test_startswith(self): + self.sq.add_filter(SQ(name__startswith='da*')) + self.assertEqual([result.pk for result in self.sq.get_results()], [1, 2, 3]) + + self.sq = SearchQuery(backend=SearchBackend()) + self.sq.add_filter(SQ(name__startswith='daniel1')) + self.assertEqual([result.pk for result in self.sq.get_results()], [1]) + def test_log_query(self): backends.reset_search_queries() self.assertEqual(len(backends.queries), 0) diff --git a/xapian_backend.py b/xapian_backend.py index f6d36bc..6bed2ed 100755 --- a/xapian_backend.py +++ b/xapian_backend.py @@ -480,6 +480,11 @@ class SearchBackend(BaseSearchBackend): Returns a xapian.Query """ + if query_string == '*': + return xapian.Query('') # Match everything + elif query_string == '': + return xapian.Query() # Match nothing + flags = xapian.QueryParser.FLAG_PARTIAL \ | xapian.QueryParser.FLAG_PHRASE \ | xapian.QueryParser.FLAG_BOOLEAN \ @@ -969,10 +974,12 @@ class SearchQuery(BaseSearchQuery): A xapian.Query """ sb = SearchBackend() + term_list = set() for t in sb._database().allterms(): - print t - term_list = [term, 'foo'] - return self._filter_in(term_list, field, is_not) + if t.term.startswith(term.rstrip('*')): + term_list.add(t.term) + + return self._filter_in(list(term_list), field, is_not) def _all_query(self):