From 0980d80950ae106889658fcf1a7b859b359007c2 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Mon, 24 Jun 2024 18:16:03 -0300 Subject: [PATCH 01/10] Fix bug 830 in supabasepy repo --- postgrest/base_request_builder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/postgrest/base_request_builder.py b/postgrest/base_request_builder.py index 08679449..855d2187 100644 --- a/postgrest/base_request_builder.py +++ b/postgrest/base_request_builder.py @@ -341,7 +341,7 @@ def like(self: Self, column: str, pattern: str) -> Self: column: The name of the column to apply a filter on pattern: The pattern to filter by """ - return self.filter(column, Filters.LIKE, pattern) + return self.filter(column, Filters.LIKE, f"{{{pattern}}}") def like_all_of(self: Self, column: str, pattern: str) -> Self: """A 'LIKE' filter, to use for pattern matching. @@ -390,7 +390,7 @@ def ilike(self: Self, column: str, pattern: str) -> Self: column: The name of the column to apply a filter on pattern: The pattern to filter by """ - return self.filter(column, Filters.ILIKE, pattern) + return self.filter(column, Filters.ILIKE, f"{{{pattern}}}") def or_(self: Self, filters: str, reference_table: Union[str, None] = None) -> Self: """An 'or' filter From 746466ecd1679c6ecd434da8500bc9b2f41ef3d4 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Wed, 26 Jun 2024 16:17:54 -0300 Subject: [PATCH 02/10] Use sanitize_pattern_param to sanitize pattern --- postgrest/base_request_builder.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/postgrest/base_request_builder.py b/postgrest/base_request_builder.py index 855d2187..62cd57c9 100644 --- a/postgrest/base_request_builder.py +++ b/postgrest/base_request_builder.py @@ -35,7 +35,13 @@ from pydantic import validator as field_validator from .types import CountMethod, Filters, RequestMethod, ReturnMethod -from .utils import AsyncClient, SyncClient, get_origin_and_cast, sanitize_param +from .utils import ( + AsyncClient, + SyncClient, + get_origin_and_cast, + sanitize_param, + sanitize_pattern_param, +) class QueryArgs(NamedTuple): @@ -341,7 +347,8 @@ def like(self: Self, column: str, pattern: str) -> Self: column: The name of the column to apply a filter on pattern: The pattern to filter by """ - return self.filter(column, Filters.LIKE, f"{{{pattern}}}") + pattern = sanitize_pattern_param(pattern) + return self.filter(column, Filters.LIKE, pattern) def like_all_of(self: Self, column: str, pattern: str) -> Self: """A 'LIKE' filter, to use for pattern matching. @@ -390,7 +397,8 @@ def ilike(self: Self, column: str, pattern: str) -> Self: column: The name of the column to apply a filter on pattern: The pattern to filter by """ - return self.filter(column, Filters.ILIKE, f"{{{pattern}}}") + pattern = sanitize_pattern_param(pattern) + return self.filter(column, Filters.ILIKE, pattern) def or_(self: Self, filters: str, reference_table: Union[str, None] = None) -> Self: """An 'or' filter From 54a1b9087c60fd6ed9f0ea19c0c4c4c9cb840df8 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Wed, 26 Jun 2024 16:33:34 -0300 Subject: [PATCH 03/10] Use sanitize_pattern_param to sanitize pattern --- tests/_async/test_filter_request_builder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/_async/test_filter_request_builder.py b/tests/_async/test_filter_request_builder.py index 1deeeba2..0e0d4aec 100644 --- a/tests/_async/test_filter_request_builder.py +++ b/tests/_async/test_filter_request_builder.py @@ -190,13 +190,13 @@ def test_overlaps_with_timestamp_range(filter_request_builder): def test_like(filter_request_builder): builder = filter_request_builder.like("x", "%a%") - assert str(builder.params) == "x=like.%a%" + assert str(builder.params) == "x=like.%2Aa%2A" def test_ilike(filter_request_builder): builder = filter_request_builder.ilike("x", "%a%") - assert str(builder.params) == "x=ilike.%a%" + assert str(builder.params) == "x=ilike.%2Aa%2A" def test_like_all_of(filter_request_builder): From a239c7b916542ad3a6bbad437396e4ce6f5f8e5b Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Wed, 26 Jun 2024 16:33:41 -0300 Subject: [PATCH 04/10] Use sanitize_pattern_param to sanitize pattern --- tests/_sync/test_filter_request_builder.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/_sync/test_filter_request_builder.py b/tests/_sync/test_filter_request_builder.py index 37434cf8..4471668d 100644 --- a/tests/_sync/test_filter_request_builder.py +++ b/tests/_sync/test_filter_request_builder.py @@ -190,13 +190,13 @@ def test_overlaps_with_timestamp_range(filter_request_builder): def test_like(filter_request_builder): builder = filter_request_builder.like("x", "%a%") - assert str(builder.params) == "x=like.%a%" + assert str(builder.params) == "x=like.%2Aa%2A" def test_ilike(filter_request_builder): builder = filter_request_builder.ilike("x", "%a%") - assert str(builder.params) == "x=ilike.%a%" + assert str(builder.params) == "x=ilike.%2Aa%2A" def test_like_all_of(filter_request_builder): From 3fc31c8c117a5c9c3f4833a6ac635c32eadb812d Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 4 Jul 2024 16:02:12 -0300 Subject: [PATCH 05/10] WIP --- tests/_async/test_filter_request_builder.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/_async/test_filter_request_builder.py b/tests/_async/test_filter_request_builder.py index 0e0d4aec..9a3a1bf8 100644 --- a/tests/_async/test_filter_request_builder.py +++ b/tests/_async/test_filter_request_builder.py @@ -192,6 +192,10 @@ def test_like(filter_request_builder): assert str(builder.params) == "x=like.%2Aa%2A" + builder = filter_request_builder.like("x", f"%{85770204020}%") + print("builder.params\t", builder.params) + assert str(builder.params) == "x=like.%2A85770204020%2A" + def test_ilike(filter_request_builder): builder = filter_request_builder.ilike("x", "%a%") From bd0bddcb4f07ac08db65fc93e42860f0c21abf78 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 4 Jul 2024 16:05:57 -0300 Subject: [PATCH 06/10] WIP --- tests/_async/test_filter_request_builder.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/_async/test_filter_request_builder.py b/tests/_async/test_filter_request_builder.py index 9a3a1bf8..c329d6a6 100644 --- a/tests/_async/test_filter_request_builder.py +++ b/tests/_async/test_filter_request_builder.py @@ -192,6 +192,8 @@ def test_like(filter_request_builder): assert str(builder.params) == "x=like.%2Aa%2A" + +def test_like2(filter_request_builder): builder = filter_request_builder.like("x", f"%{85770204020}%") print("builder.params\t", builder.params) assert str(builder.params) == "x=like.%2A85770204020%2A" From 2567f36f41f1991af47221c66837f359440cdad6 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 4 Jul 2024 16:16:09 -0300 Subject: [PATCH 07/10] WIP --- tests/_async/test_filter_request_builder.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/_async/test_filter_request_builder.py b/tests/_async/test_filter_request_builder.py index c329d6a6..0742135e 100644 --- a/tests/_async/test_filter_request_builder.py +++ b/tests/_async/test_filter_request_builder.py @@ -194,8 +194,8 @@ def test_like(filter_request_builder): def test_like2(filter_request_builder): - builder = filter_request_builder.like("x", f"%{85770204020}%") - print("builder.params\t", builder.params) + builder = filter_request_builder.like("x", f"%{85770204020}%") # See bug #830. + assert str(builder.params) == "x=like.%2A85770204020%2A" @@ -205,6 +205,12 @@ def test_ilike(filter_request_builder): assert str(builder.params) == "x=ilike.%2Aa%2A" +def test_ilike2(filter_request_builder): + builder = filter_request_builder.ilike("x", f"%{85770204020}%") + + assert str(builder.params) == "x=ilike.%2A85770204020%2A" + + def test_like_all_of(filter_request_builder): builder = filter_request_builder.like_all_of("x", "A*,*b") From 2ffa3fde0b4b1cdda42cafef123214d0283b6d00 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 4 Jul 2024 16:19:46 -0300 Subject: [PATCH 08/10] WIP --- tests/_async/test_filter_request_builder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/_async/test_filter_request_builder.py b/tests/_async/test_filter_request_builder.py index 0742135e..1be041cf 100644 --- a/tests/_async/test_filter_request_builder.py +++ b/tests/_async/test_filter_request_builder.py @@ -206,7 +206,7 @@ def test_ilike(filter_request_builder): def test_ilike2(filter_request_builder): - builder = filter_request_builder.ilike("x", f"%{85770204020}%") + builder = filter_request_builder.ilike("x", f"%{85770204020}%") # See bug #830. assert str(builder.params) == "x=ilike.%2A85770204020%2A" From 863ca648f4f7c3358ef2b90d8f9aa3b4a8b84b02 Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 4 Jul 2024 16:19:52 -0300 Subject: [PATCH 09/10] WIP --- tests/_sync/test_filter_request_builder.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/_sync/test_filter_request_builder.py b/tests/_sync/test_filter_request_builder.py index 4471668d..cc50d66c 100644 --- a/tests/_sync/test_filter_request_builder.py +++ b/tests/_sync/test_filter_request_builder.py @@ -193,12 +193,24 @@ def test_like(filter_request_builder): assert str(builder.params) == "x=like.%2Aa%2A" +def test_like2(filter_request_builder): + builder = filter_request_builder.like("x", f"%{85770204020}%") # See bug #830. + + assert str(builder.params) == "x=like.%2A85770204020%2A" + + def test_ilike(filter_request_builder): builder = filter_request_builder.ilike("x", "%a%") assert str(builder.params) == "x=ilike.%2Aa%2A" +def test_ilike2(filter_request_builder): + builder = filter_request_builder.ilike("x", f"%{85770204020}%") # See bug #830. + + assert str(builder.params) == "x=ilike.%2A85770204020%2A" + + def test_like_all_of(filter_request_builder): builder = filter_request_builder.like_all_of("x", "A*,*b") From f69bfadd0e5d9bab03faec1def83784b20845e1a Mon Sep 17 00:00:00 2001 From: Juan Carlos Date: Thu, 4 Jul 2024 16:39:29 -0300 Subject: [PATCH 10/10] Add more tests