dream_postgres/query
Database query helpers
Simple utilities for extracting rows from Pog query results. Use these after executing database queries to get your data out cleanly.
Example
import dream_postgres/query
case sql.get_user(db, id) |> query.first_row() {
Ok(user) -> Ok(decode_user(user))
Error(query.NotFound) -> Error("User not found")
Error(query.DatabaseError) -> Error("Database error")
}
Types
Query error types
Simplified error types for query results. Converts Pog’s QueryError
into a simpler two-variant type for easier error handling.
Variants
NotFound: Query succeeded but returned no rowsDatabaseError: Query failed (connection error, SQL error, etc.)
pub type QueryError {
NotFound
DatabaseError
}
Constructors
-
NotFound -
DatabaseError
Values
pub fn all_rows(
result: Result(pog.Returned(row), pog.QueryError),
) -> Result(List(row), QueryError)
Extract all rows from a query result
Extracts all rows from a Pog query result. This is useful for queries that return multiple rows (e.g., “list all” queries).
Returns an empty list if the query succeeded but found no rows, or
DatabaseError if the query itself failed.
Parameters
result: The result from a Pog query execution
Returns
Ok(List(row)): All rows (may be empty)Error(DatabaseError): Query failed (connection error, SQL error, etc.)
Example
import dream_postgres/query
import user/sql
case sql.list_users(db) |> query.all_rows() {
Ok(users) -> user_view.respond_list(users)
Error(query.DatabaseError) -> error_response()
}
pub fn first_row(
result: Result(pog.Returned(row), pog.QueryError),
) -> Result(row, QueryError)
Extract the first row from a query result
Extracts the first row from a Pog query result. This is useful for queries that should return exactly one row (e.g., “get by ID” queries).
Returns NotFound if the query succeeded but returned no rows, or
DatabaseError if the query itself failed.
Parameters
result: The result from a Pog query execution
Returns
Ok(row): First row foundError(NotFound): Query succeeded but no rows returnedError(DatabaseError): Query failed (connection error, SQL error, etc.)
Example
import dream_postgres/query
import user/sql
case sql.get_user(db, id) |> query.first_row() {
Ok(user) -> user_view.respond(user)
Error(query.NotFound) -> not_found_response()
Error(query.DatabaseError) -> error_response()
}