gabsurd/client

Database client for gabsurd — wraps pog connection and provides helpers for executing parrot-generated queries against PostgreSQL.

Types

A database connection handle.

pub type Db {
  Db(pid: process.Pid, connection: pog.Connection)
}

Constructors

Errors returned by gabsurd operations.

pub type GabsurdError {
  QueryError(String)
  UnexpectedRowCount(String)
  NotFound
  ConnectionError(String)
}

Constructors

  • QueryError(String)

    The database query failed (connection issue, constraint violation, etc.)

  • UnexpectedRowCount(String)

    A query returned an unexpected number of rows.

  • NotFound

    No row was found for a :one query.

  • ConnectionError(String)

    Failed to connect to the database.

Values

pub fn connection(db: Db) -> pog.Connection

Get the underlying pog connection.

pub fn exec(
  db: Db,
  sql_and_params: #(String, List(dev.Param)),
) -> Result(Nil, GabsurdError)

Execute a :exec query — returns Nil on success. Void-returning functions are cast to ::text in SQL so pgo can decode them.

pub fn query_many(
  db: Db,
  sql_params_decoder: #(
    String,
    List(dev.Param),
    decode.Decoder(a),
  ),
) -> Result(List(a), GabsurdError)

Execute a :many query — returns a list of rows of type a.

pub fn query_one(
  db: Db,
  sql_params_decoder: #(
    String,
    List(dev.Param),
    decode.Decoder(a),
  ),
) -> Result(a, GabsurdError)

Execute a :one query — returns a single row of type a, or Error if no row.

pub fn start(
  url: String,
) -> Result(actor.Started(Db), actor.StartError)

Start a database connection from a DATABASE_URL string. Uses a unique pool name to avoid collisions when multiple connections are started (e.g., in tests).

pub fn start_with(
  host: String,
  port: Int,
  database: String,
  user: String,
  password: String,
) -> Result(actor.Started(Db), actor.StartError)

Start a connection from individual parts (useful for testing).

pub fn unique_integer() -> Int

Generate a unique integer for pool names.

Search Document