Adapter between cake
and sqlight
🎂Cake 🪶SQLite adapter which passes PreparedStatement
s to the sqlight library for execution written in Gleam.
Installation
gleam add cake_sqlight@1
Example
Notice: Official cake adapters re-use the cake namespace, thus you can import them like
such: import cake/adapter/sqlite
.
import cake/adapter/sqlite
import cake/delete as d
import cake/insert as i
import cake/select as s
import cake/where as w
import gleam/dynamic
const sqlite_database_filename = "birds.sqlite3"
pub fn main() {
// sqlite.with_memory_connection, fn(db_connection) { // If you only want to use an in-memory database
sqlite.with_connection(sqlite_database_filename, fn(db_connection) {
db_connection |> create_table_if_not_exists_birds
db_connection |> insert_into_table_birds
db_connection |> select_from_table_birds
db_connection |> delete_from_table_birds
})
}
fn create_table_if_not_exists_birds(db_connection) {
"CREATE TABLE IF NOT EXISTS birds (
species TEXT,
average_weight FLOAT(8),
is_extinct BOOLEAN
);"
|> sqlite.execute_raw_sql(db_connection)
|> io.debug
}
fn insert_into_table_birds(db_connection) {
[
[i.string("Dodo"), i.float(14.05), i.bool(True)] |> i.row,
[i.string("Great auk"), i.float(5.0), i.bool(True)] |> i.row,
]
|> i.from_values(
table_name: "birds",
columns: [
"species", "average_weight", "is_extinct",
]
)
|> i.to_query
|> sqlite.run_write_query(dynamic.dynamic, db_connection)
|> io.debug
}
fn select_from_table_birds(db_connection) {
s.new()
|> s.from_table("table")
|> s.selects([s.col("species")])
|> s.to_query
|> sqlite.run_read_query(dynamic.dynamic, db_connection)
|> io.debug
}
fn delete_from_table_birds(db_connection) {
d.new()
|> d.table("birds")
|> d.where(w.col("species") |> w.eq(w.string("Dodo")))
|> d.to_query
|> sqlite.run_write_query(dynamic.dynamic, db_connection)
|> io.debug
}
Migrations
You may use the storch library to run SQLite migrations.