Skip to main content

src/gdo.gleam

//// Public entrypoint for the `gdo` package.

import gdo/connection
import gdo/decode
import gdo/error.{type Error}
import gdo/result
import gdo/row
import gdo/statement
import gdo/value.{type Param}
import gleam/option.{type Option}

pub const package_name = "gdo"

pub const version = "0.1.0"

pub fn sqlite(database: String) -> connection.ConnectionConfig {
  connection.sqlite(database)
}

pub fn sqlite_config(database: String) -> connection.ConnectionConfig {
  connection.sqlite_config(database)
}

pub fn open_sqlite(database: String) -> Result(connection.Connection, Error) {
  database
  |> connection.sqlite
  |> connection.open
}

pub fn prepare(sql: String) -> Result(statement.Statement, Error) {
  statement.prepare(sql)
}

pub fn exec_sqlite(
  database: String,
  sql: String,
  params: List(Param),
) -> Result(result.ExecutionResult, Error) {
  case open_sqlite(database) {
    Ok(connection) -> connection.exec(connection, sql, params)
    Error(error) -> Error(error)
  }
}

pub fn query_one_sqlite(
  database: String,
  sql: String,
  params: List(Param),
) -> Result(Option(row.Row), Error) {
  case open_sqlite(database) {
    Ok(connection) -> connection.query_one(connection, sql, params)
    Error(error) -> Error(error)
  }
}

pub fn query_all_sqlite(
  database: String,
  sql: String,
  params: List(Param),
) -> Result(result.QueryResult, Error) {
  case open_sqlite(database) {
    Ok(connection) -> connection.query_all(connection, sql, params)
    Error(error) -> Error(error)
  }
}

pub fn query_one_sqlite_as(
  database: String,
  sql: String,
  params: List(Param),
  using decoder: decode.Decoder(a),
) -> Result(Option(a), Error) {
  case open_sqlite(database) {
    Ok(connection) ->
      connection.query_one_as(connection, sql, params, using: decoder)
    Error(error) -> Error(error)
  }
}

pub fn query_all_sqlite_as(
  database: String,
  sql: String,
  params: List(Param),
  using decoder: decode.Decoder(a),
) -> Result(List(a), Error) {
  case open_sqlite(database) {
    Ok(connection) ->
      connection.query_all_as(connection, sql, params, using: decoder)
    Error(error) -> Error(error)
  }
}