(
self,
filters: list[Filter] | None = None,
order_by: list[OrderBy] | None = None,
pagination: Pagination | None = None,
pager: Pager | None = None,
)
| 197 | return result.rowcount or 0 |
| 198 | |
| 199 | async def find_all( |
| 200 | self, |
| 201 | filters: list[Filter] | None = None, |
| 202 | order_by: list[OrderBy] | None = None, |
| 203 | pagination: Pagination | None = None, |
| 204 | pager: Pager | None = None, |
| 205 | ) -> Sequence[T] | Paginator[T]: |
| 206 | query = select(self._model) |
| 207 | |
| 208 | if filters: |
| 209 | query = self._apply_filters(query, filters) |
| 210 | |
| 211 | if order_by: |
| 212 | query = self._apply_ordering(query, order_by) |
| 213 | |
| 214 | if pagination is not None: |
| 215 | count_query = select(func.count()).select_from(query.subquery()) |
| 216 | if pagination.per_page is not None: |
| 217 | query = query.limit(pagination.per_page) |
| 218 | if pagination.offset is not None: |
| 219 | query = query.offset(pagination.offset) |
| 220 | async with self.get_session() as session: |
| 221 | total_result = await session.execute(count_query) |
| 222 | total = total_result.scalar_one() |
| 223 | result = await session.execute(query) |
| 224 | items = result.scalars().all() |
| 225 | return Paginator( |
| 226 | items=items, |
| 227 | total=total, |
| 228 | page=pagination.page or 1, |
| 229 | per_page=pagination.per_page or total, |
| 230 | ) |
| 231 | elif pager is not None: |
| 232 | if pager.limit is not None: |
| 233 | query = query.limit(pager.limit) |
| 234 | if pager.offset is not None: |
| 235 | query = query.offset(pager.offset) |
| 236 | |
| 237 | async with self.get_session() as session: |
| 238 | result = await session.execute(query) |
| 239 | return result.scalars().all() |
| 240 | |
| 241 | async def find_one( |
| 242 | self, |
no test coverage detected