Skip to content

Commit

Permalink
limit and order on foreign tables (#120)
Browse files Browse the repository at this point in the history
* limit and order on foreign tables

* Apply suggestions from code review

Co-authored-by: Anand <40204976+anand2312@users.noreply.github.com>

* Updated docstrings for order and limit

* Changed limit modifier to use limit param instead of range headers

Co-authored-by: privaterepo <hauntedanon420@gmail.com>
Co-authored-by: Anand <40204976+anand2312@users.noreply.github.com>
  • Loading branch information
3 people committed May 14, 2022
1 parent 5c0c128 commit bf27b85
Showing 1 changed file with 20 additions and 6 deletions.
26 changes: 20 additions & 6 deletions postgrest/base_request_builder.py
Expand Up @@ -366,30 +366,44 @@ def __init__(
BaseFilterRequestBuilder.__init__(self, session, headers, params)

def order(
self: _FilterT, column: str, *, desc: bool = False, nullsfirst: bool = False
self: _FilterT,
column: str,
*,
desc: bool = False,
nullsfirst: bool = False,
foreign_table: Optional[str] = None,
) -> _FilterT:
"""Sort the returned rows in some specific order.
Args:
column: The column to order by
desc: Whether the rows should be ordered in descending order or not.
nullsfirst: nullsfirst
foreign_table: Foreign table name whose results are to be ordered.
.. versionchanged:: 0.10.3
Allow ordering results for foreign tables with the foreign_table parameter.
"""
self.params = self.params.add(
"order",
f"{foreign_table}.order" if foreign_table else "order",
f"{column}{'.desc' if desc else ''}{'.nullsfirst' if nullsfirst else ''}",
)
return self

def limit(self: _FilterT, size: int, *, start: int = 0) -> _FilterT:
def limit(
self: _FilterT, size: int, *, foreign_table: Optional[str] = None
) -> _FilterT:
"""Limit the number of rows returned by a query.
Args:
size: The number of rows to be returned
start: Offset to start from
foreign_table: Foreign table name to limit
.. versionchanged:: 0.10.3
Allow limiting results returned for foreign tables with the foreign_table parameter.
"""
self.headers["Range-Unit"] = "items"
self.headers["Range"] = f"{start}-{start + size - 1}"
self.params = self.params.add(
f"{foreign_table}.limit" if foreign_table else "limit",
size,
)
return self

def range(self: _FilterT, start: int, end: int) -> _FilterT:
Expand Down

0 comments on commit bf27b85

Please sign in to comment.