async def paginate( db: Database, query: Select, params: Optional[AbstractParams] = None, *, convert_to_mapping: bool = True, ) -> AbstractPage: params = resolve_params(params) total = await db.fetch_val( select([func.count()]).select_from(query.alias())) items = await db.fetch_all(paginate_query(query, params)) if convert_to_mapping: items = [{**item} for item in items] return create_page(items, total, params)
async def paginate(query: Select, params: Optional[AbstractParams] = None) -> AbstractPage: params = resolve_params(params) try: is_loader_used = query._execution_options[ "loader"]._distinct # type: ignore except (AttributeError, KeyError): is_loader_used = False if is_loader_used: # FIXME: find better way to fetch rows when loader is used items = await query.gino.all() # type: ignore return base_paginate(items, params) total = await func.count().select().select_from(query.alias() ).gino.scalar() items = await paginate_query(query, params).gino.all() # type: ignore return create_page(items, total, params)