ducky/connection

Database connection management.

Types

An opaque connection to a DuckDB database.

pub opaque type Connection

Values

pub fn close(connection: Connection) -> Result(Nil, error.Error)

Closes a database connection.

Examples

let assert Ok(conn) = connect(":memory:")
let assert Ok(_) = close(conn)

Errors

Returns an error if the connection cannot be closed.

pub fn connect(path: String) -> Result(Connection, error.Error)

Opens a connection to a DuckDB database.

Must call close() when done. Use with_connection() instead for automatic cleanup.

connect(":memory:")
// => Ok(Connection(...))

connect("data.duckdb")
// => Ok(Connection(...))
pub fn native(
  connection: Connection,
) -> @internal NativeConnection

Returns the native connection handle for FFI calls.

This is an internal function for use by other modules in the ducky package.

pub fn path(connection: Connection) -> String

Returns the database path for a connection.

pub fn transaction(
  conn: Connection,
  callback: fn(Connection) -> Result(a, error.Error),
) -> Result(a, error.Error)

Executes operations within a transaction.

Commits on success, rolls back on error.

transaction(conn, fn(conn) {
  use _ <- result.try(query.query(conn, "UPDATE accounts ..."))
  query.query(conn, "SELECT * FROM accounts")
})
pub fn with_connection(
  path: String,
  callback: fn(Connection) -> Result(a, error.Error),
) -> Result(a, error.Error)

Executes operations with automatic connection cleanup.

Connection closes automatically on success or error.

use conn <- with_connection(":memory:")
query.query(conn, "SELECT 42")
Search Document