From dcae8b7242a1e35eba93e050ac090c05a3c3dac0 Mon Sep 17 00:00:00 2001 From: Akishore407 Date: Sun, 6 Sep 2026 20:26:53 +0530 Subject: [PATCH] fix(postgrest): overwrite duplicate pagination parameters --- .../src/postgrest/base_request_builder.py | 8 ++++---- ...test_filter_request_builder_integration.py | 19 +++++++++++++++++++ ...test_filter_request_builder_integration.py | 19 +++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/postgrest/src/postgrest/base_request_builder.py b/src/postgrest/src/postgrest/base_request_builder.py index fcbad9ad4..e0fc1994a 100644 --- a/src/postgrest/src/postgrest/base_request_builder.py +++ b/src/postgrest/src/postgrest/base_request_builder.py @@ -608,7 +608,7 @@ def limit(self: Self, size: int, *, foreign_table: Optional[str] = None) -> Self .. versionchanged:: 0.10.3 Allow limiting results returned for foreign tables with the foreign_table parameter. """ - self.request.params = self.request.params.add( + self.request.params = self.request.params.set( f"{foreign_table}.limit" if foreign_table else "limit", size, ) @@ -619,7 +619,7 @@ def offset(self: Self, size: int) -> Self: Args: size: The number of the row to start at """ - self.request.params = self.request.params.add( + self.request.params = self.request.params.set( "offset", size, ) @@ -628,10 +628,10 @@ def offset(self: Self, size: int) -> Self: def range( self: Self, start: int, end: int, foreign_table: Optional[str] = None ) -> Self: - self.request.params = self.request.params.add( + self.request.params = self.request.params.set( f"{foreign_table}.offset" if foreign_table else "offset", start ) - self.request.params = self.request.params.add( + self.request.params = self.request.params.set( f"{foreign_table}.limit" if foreign_table else "limit", end - start + 1, ) diff --git a/src/postgrest/tests/_async/test_filter_request_builder_integration.py b/src/postgrest/tests/_async/test_filter_request_builder_integration.py index 0ad7302cd..2699f4258 100644 --- a/src/postgrest/tests/_async/test_filter_request_builder_integration.py +++ b/src/postgrest/tests/_async/test_filter_request_builder_integration.py @@ -589,6 +589,25 @@ async def test_rpc_with_range(): ] +async def test_limit_twice(): + query = rest_client().from_("countries").select("*").limit(1).limit(2) + + assert query.request.params["limit"] == "2" + + +async def test_offset_twice(): + query = rest_client().from_("countries").select("*").offset(1).offset(2) + + assert query.request.params["offset"] == "2" + + +async def test_range_twice(): + query = rest_client().from_("countries").select("*").range(0, 1).range(2, 3) + + assert query.request.params["offset"] == "2" + assert query.request.params["limit"] == "2" + + async def test_rpc_post_with_args(): res = ( await rest_client() diff --git a/src/postgrest/tests/_sync/test_filter_request_builder_integration.py b/src/postgrest/tests/_sync/test_filter_request_builder_integration.py index bc2e9af62..0b20da56c 100644 --- a/src/postgrest/tests/_sync/test_filter_request_builder_integration.py +++ b/src/postgrest/tests/_sync/test_filter_request_builder_integration.py @@ -582,6 +582,25 @@ def test_rpc_with_range(): ] +def test_limit_twice(): + query = rest_client().from_("countries").select("*").limit(1).limit(2) + + assert query.request.params["limit"] == "2" + + +def test_offset_twice(): + query = rest_client().from_("countries").select("*").offset(1).offset(2) + + assert query.request.params["offset"] == "2" + + +def test_range_twice(): + query = rest_client().from_("countries").select("*").range(0, 1).range(2, 3) + + assert query.request.params["offset"] == "2" + assert query.request.params["limit"] == "2" + + def test_rpc_post_with_args(): res = ( rest_client()