Skip to content

Commit 0e4f7d8

Browse files
Add Modifiers to query builder (#9)
1 parent c3d3e45 commit 0e4f7d8

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

Sources/PostgREST/PostgrestFilterBuilder.swift

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ public class PostgrestFilterBuilder: PostgrestTransformBuilder {
44
public enum Operator: String {
55
case eq, neq, gt, gte, lt, lte, like, ilike, `is`, `in`, cs, cd, sl, sr, nxl, nxr, adj, ov, fts, plfts, phfts, wfts
66
}
7+
8+
// MARK: - Filters
79

810
public func not(column: String, operator op: Operator, value: String) -> PostgrestFilterBuilder {
911
appendSearchParams(name: column, value: "not.\(op.rawValue).\(value)")
@@ -155,4 +157,48 @@ public class PostgrestFilterBuilder: PostgrestTransformBuilder {
155157
}
156158
return self
157159
}
160+
161+
// MARK: - Modifiers
162+
163+
/// Limits the number of results returned by the query
164+
/// https://supabase.io/docs/reference/javascript/limit
165+
/// - Parameter limit: Number of results to return
166+
public func limit(_ limit: Int) -> PostgrestFilterBuilder {
167+
appendSearchParams(name: "limit", value: String(limit))
168+
return self
169+
}
170+
171+
/// Offsets the query by a number of results. Useful for paginating queries
172+
/// https://postgrest.org/en/v8.0/api.html#limits-and-pagination
173+
/// - Parameter offset: Number of results to offset by
174+
public func offset(_ offset: Int) -> PostgrestFilterBuilder {
175+
appendSearchParams(name: "offset", value: String(offset))
176+
return self
177+
}
178+
179+
/// Limits a query to a range of values
180+
/// Eg: 15 - 30 gets the results from 15 -> 30
181+
/// https://supabase.io/docs/reference/javascript/range
182+
/// - Parameters:
183+
/// - offset: The start offset
184+
/// - range: The last index of the range
185+
public func range(_ offset: Int, _ range: Int) -> PostgrestFilterBuilder {
186+
return self.offset(offset).limit(range - offset)
187+
}
188+
189+
/// Returns only a single result
190+
/// https://supabase.io/docs/reference/javascript/single
191+
public func single() -> PostgrestFilterBuilder {
192+
return self.limit(1)
193+
}
194+
195+
/// Orders the results by a column
196+
/// https://postgrest.org/en/v8.0/api.html#ordering
197+
/// - Parameters:
198+
/// - column: Column to order by
199+
/// - desc: Toggle descending order
200+
public func order(_ column: String, desc: Bool = false) -> PostgrestFilterBuilder {
201+
appendSearchParams(name: "order", value: desc ? "\(column).desc" : "\(column).asc")
202+
return self
203+
}
158204
}

0 commit comments

Comments
 (0)