Packages

Run you Gleam programs on Cloudflare's 'World Computer'/Developer Platform

Current section

Files

Jump to
plinth_cloudflare src plinth cloudflare d1.gleam
Raw

src/plinth/cloudflare/d1.gleam

import gleam/dynamic.{type Dynamic}
import gleam/javascript/array.{type Array}
import gleam/javascript/promise.{type Promise}
pub type Database
// TODO test errors
@external(javascript, "../../plinth_cloudflare_d1_ffi.mjs", "prepare")
pub fn prepare(db: Database, query: String) -> PreparedStatement
pub type PreparedStatement
@external(javascript, "../../plinth_cloudflare_d1_ffi.mjs", "bind")
fn do_bind(
statement: PreparedStatement,
values: Array(String),
) -> PreparedStatement
pub fn bind(statement, values) {
do_bind(statement, array.from_list(values))
}
pub type RunResult {
RunResult(success: Bool, meta: Dynamic, results: Array(Dynamic))
}
// Errors if syntax error or selecting a field that doesn't exist
@external(javascript, "../../plinth_cloudflare_d1_ffi.mjs", "run")
pub fn run(statement: PreparedStatement) -> Promise(Result(RunResult, String))
@external(javascript, "../../plinth_cloudflare_d1_ffi.mjs", "raw")
pub fn raw(
statement: PreparedStatement,
) -> Promise(Result(Array(Array(Dynamic)), String))
@external(javascript, "../../plinth_cloudflare_d1_ffi.mjs", "first")
pub fn first(statement: PreparedStatement) -> Promise(Result(Dynamic, String))
@external(javascript, "../../plinth_cloudflare_d1_ffi.mjs", "batch")
fn do_batch(
db: Database,
statements: Array(PreparedStatement),
) -> Promise(Result(Array(RunResult), String))
pub fn batch(db, statements) {
do_batch(db, array.from_list(statements))
}
pub type ExecResult {
ExecResult(count: Int, duration: Float)
}
@external(javascript, "../../plinth_cloudflare_d1_ffi.mjs", "exec")
pub fn exec(db: Database, query: String) -> Promise(Result(ExecResult, String))
// This API only works on databases created during D1's alpha period.
// dump