Packages
cake
4.0.0
4.1.0
4.0.0
3.0.0
2.2.2
2.2.1
2.2.0
2.1.3
2.1.2
2.1.1
2.1.0
2.0.2
2.0.1
2.0.0
1.1.2
1.1.1
1.1.0
1.0.1
1.0.0
1.0.0-rc.0
retired
0.15.0
retired
0.14.0
retired
0.13.0
retired
0.12.0
retired
0.11.0
retired
0.10.1
retired
0.10.0
retired
0.9.2
retired
0.9.1
retired
0.9.0
retired
0.8.0
retired
0.7.0
retired
0.6.0
retired
0.5.0
retired
0.4.0
retired
0.3.0
retired
0.2.0
retired
0.1.0
retired
0.0.1
retired
🎂 An SQL query builder for Gleam for SQL dialects 🐘PostgreSQL, 🪶SQLite, 🦭MariaDB, and 🐬MySQL
Current section
Files
Jump to
Current section
Files
src/cake.gleam
//// *Cake* is an SQL query building library for RDBMS:
////
//// - 🐘PostgreSQL
//// - 🪶SQLite
//// - 🦭MariaDB
//// - 🐬MySQL
////
//// For examples see the tests.
////
import cake/internal/dialect
import cake/internal/prepared_statement
import cake/internal/read_query
import cake/internal/write_query
import cake/param.{type Param}
import gleam/io
pub type ReadQuery =
read_query.ReadQuery
pub type WriteQuery(a) =
write_query.WriteQuery(a)
pub type Dialect =
dialect.Dialect
pub type PreparedStatement =
prepared_statement.PreparedStatement
/// Base wrapper query type to be able to pass around read and write queries in
/// the same way.
///
pub type CakeQuery(a) {
CakeReadQuery(query: ReadQuery)
CakeWriteQuery(query: WriteQuery(a))
}
/// Create a Cake read query from a read query.
///
/// Also see `cake/dialect/*` for dialect specific implementations of this.
///
pub fn to_read_query(query query: ReadQuery) -> CakeQuery(a) {
query |> CakeReadQuery
}
/// Create a Cake write query from a write query.
///
/// Also see `cake/dialect/*` for dialect specific implementations of this.
///
pub fn to_write_query(query query: WriteQuery(a)) -> CakeQuery(a) {
query |> CakeWriteQuery
}
/// Create a prepared statement from a Cake query.
///
/// Also see `cake/dialect/*` for dialect specific implementations of this.
///
pub fn to_prepared_statement(
query query: CakeQuery(a),
dialect dialect: Dialect,
) -> PreparedStatement {
case query {
CakeReadQuery(query:) ->
query
|> read_query_to_prepared_statement(dialect:)
CakeWriteQuery(query:) ->
query
|> write_query_to_prepared_statement(dialect:)
}
}
/// Create a prepared statement from a read query.
///
pub fn read_query_to_prepared_statement(
query query: ReadQuery,
dialect dialect: Dialect,
) -> PreparedStatement {
dialect
|> dialect.placeholder_base
|> read_query.to_prepared_statement(query:, dialect:)
}
/// Create a prepared statement from a write query.
///
pub fn write_query_to_prepared_statement(
query query: WriteQuery(a),
dialect dialect: Dialect,
) -> PreparedStatement {
dialect
|> dialect.placeholder_base
|> write_query.to_prepared_statement(query:, dialect:)
}
/// Get the SQL of the prepared statement.
///
pub fn get_sql(
prepared_statement prepared_statement: PreparedStatement,
) -> String {
prepared_statement |> prepared_statement.get_sql
}
/// Get the parameters of the prepared statement.
///
pub fn get_params(
prepared_statement prepared_statement: PreparedStatement,
) -> List(Param) {
prepared_statement |> prepared_statement.get_params
}
/// As a library *Cake* cannot be invoked directly in a meaningful way.
///
pub fn main() {
{
"\n"
<> "cake is a query building library and cannot be invoked directly."
<> "\n"
<> "For demos see the tests."
}
|> io.println
}