From c980657a3327f1abee3c82fc6d282f4bc9813b18 Mon Sep 17 00:00:00 2001 From: Temrjan Date: Wed, 25 Mar 2026 10:44:26 +0500 Subject: [PATCH] fix: compute totalPages from unpaginated count query The objects_count query reused the same SELECT that already had LIMIT/OFFSET applied, so count() always returned at most page_size rows, making totalPages always 1 regardless of actual row count. Build a separate count query with only filters and joins (no pagination) so that totalPages reflects the true number of pages. Closes #103 Co-Authored-By: Claude Opus 4.6 (1M context) --- fastapi_jsonapi/data_layers/sqla/orm.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/fastapi_jsonapi/data_layers/sqla/orm.py b/fastapi_jsonapi/data_layers/sqla/orm.py index 783b9c6c..6b437b42 100644 --- a/fastapi_jsonapi/data_layers/sqla/orm.py +++ b/fastapi_jsonapi/data_layers/sqla/orm.py @@ -425,9 +425,15 @@ async def get_collection( objects_count = self.default_collection_count if not self.disable_collection_count: + count_query = self._base_sql.query( + model=self.model, + filters=filters, + jsonapi_join=relationships_info, + stmt=self._query, + ) objects_count = await self._base_sql.count( session=self.session, - stmt=query, + stmt=count_query, ) collection = await self.after_get_collection(collection, qs, view_kwargs)