diff options
author | David Robertson <davidr@element.io> | 2022-11-02 12:28:47 +0000 |
---|---|---|
committer | David Robertson <davidr@element.io> | 2022-11-02 12:28:47 +0000 |
commit | 7f77f1386c94c753755b79d7d7025e958b228282 (patch) | |
tree | dca802d6bf6b376cf1662946ec342332d208a4f9 | |
parent | Revert "Switch search SQL to triple-quote strings. (#14311)" (diff) | |
download | synapse-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.py | 5 | ||||
-rw-r--r-- | tests/storage/test_room_search.py | 16 |
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', |