summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Robertson <davidr@element.io>2022-11-02 12:28:47 +0000
committerDavid Robertson <davidr@element.io>2022-11-02 12:28:47 +0000
commit7f77f1386c94c753755b79d7d7025e958b228282 (patch)
treedca802d6bf6b376cf1662946ec342332d208a4f9
parentRevert "Switch search SQL to triple-quote strings. (#14311)" (diff)
downloadsynapse-7f77f1386c94c753755b79d7d7025e958b228282.tar.xz
Revert "Fix tests for change in PostgreSQL 14 behavior change. (#14310)"
This reverts commit 67583281e3f8ea923eedbc56a4c85c7ba75d1582.
-rw-r--r--synapse/storage/databases/main/search.py5
-rw-r--r--tests/storage/test_room_search.py16
2 files changed, 7 insertions, 14 deletions
diff --git a/synapse/storage/databases/main/search.py b/synapse/storage/databases/main/search.py
index 594b935614..a89fc54c2c 100644
--- a/synapse/storage/databases/main/search.py
+++ b/synapse/storage/databases/main/search.py
@@ -824,8 +824,9 @@ def _tokenize_query(query: str) -> TokenList:
     in_phrase = False
     parts = deque(query.split('"'))
     for i, part in enumerate(parts):
-        # The contents inside double quotes is treated as a phrase.
-        in_phrase = bool(i % 2)
+        # The contents inside double quotes is treated as a phrase, a trailing
+        # double quote is not implied.
+        in_phrase = bool(i % 2) and i != (len(parts) - 1)
 
         # Pull out the individual words, discarding any non-word characters.
         words = deque(re.findall(r"([\w\-]+)", part, re.UNICODE))
diff --git a/tests/storage/test_room_search.py b/tests/storage/test_room_search.py
index 868b5bee84..9ddc19900a 100644
--- a/tests/storage/test_room_search.py
+++ b/tests/storage/test_room_search.py
@@ -239,6 +239,7 @@ class MessageSearchTest(HomeserverTestCase):
         ("fox -nope", (True, False)),
         ("fox -brown", (False, True)),
         ('"fox" quick', True),
+        ('"fox quick', True),
         ('"quick brown', True),
         ('" quick "', True),
         ('" nope"', False),
@@ -268,15 +269,6 @@ class MessageSearchTest(HomeserverTestCase):
         response = self.helper.send(self.room_id, self.PHRASE, tok=self.access_token)
         self.assertIn("event_id", response)
 
-        # The behaviour of a missing trailing double quote changed in PostgreSQL 14
-        # from ignoring the initial double quote to treating it as a phrase.
-        main_store = homeserver.get_datastores().main
-        found = False
-        if isinstance(main_store.database_engine, PostgresEngine):
-            assert main_store.database_engine._version is not None
-            found = main_store.database_engine._version < 140000
-        self.COMMON_CASES.append(('"fox quick', (found, True)))
-
     def test_tokenize_query(self) -> None:
         """Test the custom logic to tokenize a user's query."""
         cases = (
@@ -288,9 +280,9 @@ class MessageSearchTest(HomeserverTestCase):
             ("fox -brown", ["fox", SearchToken.Not, "brown"]),
             ("- fox", [SearchToken.Not, "fox"]),
             ('"fox" quick', [Phrase(["fox"]), SearchToken.And, "quick"]),
-            # No trailing double quote.
-            ('"fox quick', [Phrase(["fox", "quick"])]),
-            ('"-fox quick', [Phrase(["-fox", "quick"])]),
+            # No trailing double quoe.
+            ('"fox quick', ["fox", SearchToken.And, "quick"]),
+            ('"-fox quick', [SearchToken.Not, "fox", SearchToken.And, "quick"]),
             ('" quick "', [Phrase(["quick"])]),
             (
                 'q"uick brow"n',