Skip to content

Commit ea791f4

Browse files
Fix 830 (#461)
1 parent 61be87c commit ea791f4

File tree

3 files changed

+37
-5
lines changed

3 files changed

+37
-5
lines changed

postgrest/base_request_builder.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,13 @@
3535
from pydantic import validator as field_validator
3636

3737
from .types import CountMethod, Filters, RequestMethod, ReturnMethod
38-
from .utils import AsyncClient, SyncClient, get_origin_and_cast, sanitize_param
38+
from .utils import (
39+
AsyncClient,
40+
SyncClient,
41+
get_origin_and_cast,
42+
sanitize_param,
43+
sanitize_pattern_param,
44+
)
3945

4046

4147
class QueryArgs(NamedTuple):
@@ -341,6 +347,7 @@ def like(self: Self, column: str, pattern: str) -> Self:
341347
column: The name of the column to apply a filter on
342348
pattern: The pattern to filter by
343349
"""
350+
pattern = sanitize_pattern_param(pattern)
344351
return self.filter(column, Filters.LIKE, pattern)
345352

346353
def like_all_of(self: Self, column: str, pattern: str) -> Self:
@@ -390,6 +397,7 @@ def ilike(self: Self, column: str, pattern: str) -> Self:
390397
column: The name of the column to apply a filter on
391398
pattern: The pattern to filter by
392399
"""
400+
pattern = sanitize_pattern_param(pattern)
393401
return self.filter(column, Filters.ILIKE, pattern)
394402

395403
def or_(self: Self, filters: str, reference_table: Union[str, None] = None) -> Self:

tests/_async/test_filter_request_builder.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,25 @@ def test_overlaps_with_timestamp_range(filter_request_builder):
190190
def test_like(filter_request_builder):
191191
builder = filter_request_builder.like("x", "%a%")
192192

193-
assert str(builder.params) == "x=like.%a%"
193+
assert str(builder.params) == "x=like.%2Aa%2A"
194+
195+
196+
def test_like2(filter_request_builder):
197+
builder = filter_request_builder.like("x", f"%{85770204020}%") # See bug #830.
198+
199+
assert str(builder.params) == "x=like.%2A85770204020%2A"
194200

195201

196202
def test_ilike(filter_request_builder):
197203
builder = filter_request_builder.ilike("x", "%a%")
198204

199-
assert str(builder.params) == "x=ilike.%a%"
205+
assert str(builder.params) == "x=ilike.%2Aa%2A"
206+
207+
208+
def test_ilike2(filter_request_builder):
209+
builder = filter_request_builder.ilike("x", f"%{85770204020}%") # See bug #830.
210+
211+
assert str(builder.params) == "x=ilike.%2A85770204020%2A"
200212

201213

202214
def test_like_all_of(filter_request_builder):

tests/_sync/test_filter_request_builder.py

+14-2
Original file line numberDiff line numberDiff line change
@@ -190,13 +190,25 @@ def test_overlaps_with_timestamp_range(filter_request_builder):
190190
def test_like(filter_request_builder):
191191
builder = filter_request_builder.like("x", "%a%")
192192

193-
assert str(builder.params) == "x=like.%a%"
193+
assert str(builder.params) == "x=like.%2Aa%2A"
194+
195+
196+
def test_like2(filter_request_builder):
197+
builder = filter_request_builder.like("x", f"%{85770204020}%") # See bug #830.
198+
199+
assert str(builder.params) == "x=like.%2A85770204020%2A"
194200

195201

196202
def test_ilike(filter_request_builder):
197203
builder = filter_request_builder.ilike("x", "%a%")
198204

199-
assert str(builder.params) == "x=ilike.%a%"
205+
assert str(builder.params) == "x=ilike.%2Aa%2A"
206+
207+
208+
def test_ilike2(filter_request_builder):
209+
builder = filter_request_builder.ilike("x", f"%{85770204020}%") # See bug #830.
210+
211+
assert str(builder.params) == "x=ilike.%2A85770204020%2A"
200212

201213

202214
def test_like_all_of(filter_request_builder):

0 commit comments

Comments
 (0)