Packages
cake
4.1.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@combined.erl
-module(cake@combined).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/cake/combined.gleam").
-export([to_query/1, union/2, unions/3, union_all/2, unions_all/3, except/2, excepts/3, except_all/2, excepts_all/3, intersect/2, intersects/3, intersect_all/2, intersects_all/3, get_queries/1, limit/2, no_limit/1, get_limit/1, offset/2, no_offset/1, get_offset/1, order_by_asc/2, order_by_asc_nulls_first/2, order_by_asc_nulls_last/2, replace_order_by_asc/2, replace_order_by_asc_nulls_first/2, replace_order_by_asc_nulls_last/2, order_by_desc/2, order_by_desc_nulls_first/2, order_by_desc_nulls_last/2, replace_order_by_desc/2, replace_order_by_desc_nulls_first/2, replace_order_by_desc_nulls_last/2, order_by/3, replace_order_by/3, no_order_by/1, get_order_by/1, epilog/2, no_epilog/1, get_epilog/1, comment/2, no_comment/1, get_comment/1]).
-export_type([direction/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" A DSL to build combined queries, such as:\n"
"\n"
" - `UNION`\n"
" - `UNION ALL`\n"
" - `EXCEPT`\n"
" - `EXCEPT ALL`\n"
" - `INTERSECT`\n"
" - `INTERSECT ALL`\n"
"\n"
" ## Aliases\n"
"\n"
" ```gleam\n"
" import cake/combined as c\n"
" import cake/select as s\n"
" import cake/where as w\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## Query Lifecycle\n"
"\n"
" ```mermaid\n"
" flowchart LR\n"
" A[s.new + query builders] --> B{set operation}\n"
" B -->|union| C[c.union / c.unions]\n"
" B -->|union_all| D[c.union_all / c.unions_all]\n"
" B -->|except| E[c.except / c.excepts]\n"
" B -->|except_all| F[c.except_all / c.excepts_all]\n"
" B -->|intersect| G[c.intersect / c.intersects]\n"
" B -->|intersect_all| H[c.intersect_all / c.intersects_all]\n"
" C --> I[limit / offset / order_by]\n"
" D --> I\n"
" E --> I\n"
" F --> I\n"
" G --> I\n"
" H --> I\n"
" I --> J[c.epilog / c.comment]\n"
" J --> K[c.to_query]\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## Set Operations\n"
"\n"
" All set operations take at least two `Select` queries (converted via\n"
" `s.to_query`) and return a `Combined` value. The `_all` variants accept\n"
" two queries; the plural variants accept a list of additional queries.\n"
"\n"
" ### `union(a, b) -> Combined` / `unions(a, b, rest) -> Combined`\n"
"\n"
" `UNION` — distinct rows from both queries.\n"
"\n"
" ```gleam\n"
" let q1 =\n"
" s.new()\n"
" |> s.from_table(\"users\")\n"
" |> s.col(\"name\")\n"
" |> s.to_query\n"
"\n"
" let q2 =\n"
" s.new()\n"
" |> s.from_table(\"customers\")\n"
" |> s.col(\"name\")\n"
" |> s.to_query\n"
"\n"
" c.union(q1, q2)\n"
" // SELECT name FROM users UNION SELECT name FROM customers\n"
" ```\n"
"\n"
" ### `union_all(a, b) -> Combined` / `unions_all(a, b, rest) -> Combined`\n"
"\n"
" `UNION ALL` — all rows from both queries (no deduplication).\n"
"\n"
" ```gleam\n"
" c.union_all(q1, q2)\n"
" // SELECT name FROM users UNION ALL SELECT name FROM customers\n"
" ```\n"
"\n"
" ### `except(a, b) -> Combined` / `excepts(a, b, rest) -> Combined`\n"
"\n"
" `EXCEPT` — rows in the first query that do not appear in the second.\n"
"\n"
" ```gleam\n"
" c.except(q1, q2)\n"
" // SELECT name FROM users EXCEPT SELECT name FROM customers\n"
" ```\n"
"\n"
" ### `except_all(a, b) -> Combined` / `excepts_all(a, b, rest) -> Combined`\n"
"\n"
" `EXCEPT ALL` — rows in the first query that do not appear in the second,\n"
" including duplicates.\n"
"\n"
" > Not supported by 🪶 SQLite.\n"
"\n"
" ```gleam\n"
" c.except_all(q1, q2)\n"
" // SELECT name FROM users EXCEPT ALL SELECT name FROM customers\n"
" ```\n"
"\n"
" ### `intersect(a, b) -> Combined` / `intersects(a, b, rest) -> Combined`\n"
"\n"
" `INTERSECT` — rows that appear in both queries.\n"
"\n"
" ```gleam\n"
" c.intersect(q1, q2)\n"
" // SELECT name FROM users INTERSECT SELECT name FROM customers\n"
" ```\n"
"\n"
" ### `intersect_all(a, b) -> Combined` / `intersects_all(a, b, rest) -> Combined`\n"
"\n"
" `INTERSECT ALL` — rows that appear in both queries, including duplicates.\n"
"\n"
" > Not supported by 🪶 SQLite.\n"
"\n"
" ```gleam\n"
" c.intersect_all(q1, q2)\n"
" // SELECT name FROM users INTERSECT ALL SELECT name FROM customers\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## Helper\n"
"\n"
" ### `get_queries(combined) -> List(Select)`\n"
"\n"
" Extracts the original `Select` queries from a `Combined` value.\n"
"\n"
" ```gleam\n"
" c.get_queries(combined_query)\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## LIMIT & OFFSET\n"
"\n"
" Applied to the result of the combined query (not to individual sub-queries).\n"
"\n"
" | Function | Effect |\n"
" | ------ | ------ |\n"
" | `limit(query, n)` | Set LIMIT |\n"
" | `no_limit(query)` | Remove LIMIT |\n"
" | `get_limit(query)` | Get current LIMIT |\n"
" | `offset(query, n)` | Set OFFSET |\n"
" | `no_offset(query)` | Remove OFFSET |\n"
" | `get_offset(query)` | Get current OFFSET |\n"
"\n"
" ```gleam\n"
" c.union(q1, q2)\n"
" |> c.limit(10)\n"
" |> c.offset(20)\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## ORDER BY\n"
"\n"
" Sorts the combined result set.\n"
"\n"
" ### Direction\n"
"\n"
" | Constructor | Description |\n"
" | --- | --- |\n"
" | `c.Asc` | Ascending |\n"
" | `c.Desc` | Descending |\n"
"\n"
" ### Appending\n"
"\n"
" | Function | Notes |\n"
" | --- | --- |\n"
" | `order_by_asc(query, col)` | Append ASC |\n"
" | `order_by_asc_nulls_first(query, col)` | ASC NULLS FIRST |\n"
" | `order_by_asc_nulls_last(query, col)` | ASC NULLS LAST |\n"
" | `order_by_desc(query, col)` | Append DESC |\n"
" | `order_by_desc_nulls_first(query, col)` | DESC NULLS FIRST |\n"
" | `order_by_desc_nulls_last(query, col)` | DESC NULLS LAST |\n"
" | `order_by(query, col, direction)` | Custom direction |\n"
"\n"
" ### Replacing\n"
"\n"
" | Function | Notes |\n"
" | --- | --- |\n"
" | `replace_order_by_asc(query, col)` | Replace all with ASC |\n"
" | `replace_order_by_asc_nulls_first(query, col)` | Replace with ASC NULLS FIRST |\n"
" | `replace_order_by_asc_nulls_last(query, col)` | Replace with ASC NULLS LAST |\n"
" | `replace_order_by_desc(query, col)` | Replace all with DESC |\n"
" | `replace_order_by_desc_nulls_first(query, col)` | Replace with DESC NULLS FIRST |\n"
" | `replace_order_by_desc_nulls_last(query, col)` | Replace with DESC NULLS LAST |\n"
" | `replace_order_by(query, col, direction)` | Replace with custom direction |\n"
"\n"
" ### Removal / retrieval\n"
"\n"
" | Function | Effect |\n"
" | --- | --- |\n"
" | `no_order_by(query)` | Remove ORDER BY |\n"
" | `get_order_by(query)` | Get current ORDER BY |\n"
"\n"
" > **Note:** `NULLS FIRST` / `NULLS LAST` are not supported out of the box by\n"
" > 🦭 MariaDB or 🐬 MySQL.\n"
"\n"
" ```gleam\n"
" c.union(q1, q2)\n"
" |> c.order_by_desc(\"name\")\n"
" // SELECT ... UNION SELECT ... ORDER BY name DESC\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## Epilog and Comment\n"
"\n"
" An **epilog** is appended verbatim to the end of the generated SQL.\n"
" A **comment** is placed at the very end as a SQL `--` comment.\n"
"\n"
" | Function | Effect |\n"
" | --- | --- |\n"
" | `epilog(query, text)` | Append epilog |\n"
" | `no_epilog(query)` | Remove epilog |\n"
" | `get_epilog(query)` | Get current epilog |\n"
" | `comment(query, text)` | Append comment |\n"
" | `no_comment(query)` | Remove comment |\n"
" | `get_comment(query)` | Get current comment |\n"
"\n"
" ```gleam\n"
" c.union(q1, q2)\n"
" |> c.epilog(\"FOR UPDATE\")\n"
" |> c.comment(\"fetching locked rows\")\n"
" // SELECT ... UNION SELECT ... FOR UPDATE -- fetching locked rows\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## Converting to a Query\n"
"\n"
" ### `to_query(combined) -> ReadQuery`\n"
"\n"
" Converts a `Combined` into a `ReadQuery` suitable for passing to an adapter.\n"
"\n"
" ```gleam\n"
" c.union(q1, q2)\n"
" |> c.limit(10)\n"
" |> c.to_query\n"
" ```\n"
"\n"
" ---\n"
"\n"
" ## Full Example\n"
"\n"
" ```gleam\n"
" import cake/combined as c\n"
" import cake/select as s\n"
" import cake/where as w\n"
"\n"
" let active_users =\n"
" s.new()\n"
" |> s.from_table(\"users\")\n"
" |> s.select_cols([\"id\", \"name\", \"active\"])\n"
" |> s.where(w.eq(w.col(\"active\"), w.bool(True)))\n"
" |> s.to_query\n"
"\n"
" let active_customers =\n"
" s.new()\n"
" |> s.from_table(\"customers\")\n"
" |> s.select_cols([\"id\", \"name\", \"active\"])\n"
" |> s.where(w.eq(w.col(\"active\"), w.bool(True)))\n"
" |> s.to_query\n"
"\n"
" c.unions(active_users, active_customers, [\n"
" s.new()\n"
" |> s.from_table(\"admins\")\n"
" |> s.select_cols([\"id\", \"name\", \"active\"])\n"
" |> s.where(w.eq(w.col(\"active\"), w.bool(True)))\n"
" |> s.to_query,\n"
" ])\n"
" |> c.order_by_asc(\"name\")\n"
" |> c.limit(50)\n"
" |> c.to_query\n"
" // (SELECT id, name, active FROM users WHERE active = $1)\n"
" // UNION\n"
" // (SELECT id, name, active FROM customers WHERE active = $2)\n"
" // UNION\n"
" // (SELECT id, name, active FROM admins WHERE active = $3)\n"
" // ORDER BY name ASC\n"
" // LIMIT 50\n"
" ```\n"
"\n"
"\n"
" <!-- html assets for docs gen -->\n"
" <style>\n"
" .page {\n"
" display: block;\n"
" }\n"
" .content {\n"
" width: auto;\n"
" max-width: none;\n"
" }\n"
" </style>\n"
" <!--<script src=\"https://cdn.jsdelivr.net/npm/@mermaid-js/tiny@11/dist/mermaid.tiny.js\"></script>-->\n"
" <script\n"
" src=\"https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js\"\n"
" integrity=\"sha256-cBN+d7snO7LvlyuG6LBADMqL5TyyW/xFkRoYbcmGZd4=\"\n"
" crossorigin=\"anonymous\"\n"
" ></script>\n"
" <script>\n"
" (callback => document.readyState !== 'loading' ? callback() : document.addEventListener('DOMContentLoaded', callback, { once: true }))(() => {\n"
" mermaid.initialize({ startOnLoad: false })\n"
" mermaid.run({\n"
" querySelector: \".language-mermaid\",\n"
" })\n"
" })\n"
" </script>\n"
"\n"
).
-type direction() :: asc | desc.
-file("src/cake/combined.gleam", 352).
?DOC(" Creates a `ReadQuery` from a `Combined` `ReadQuery`.\n").
-spec to_query(cake@internal@read_query:combined()) -> cake@internal@read_query:read_query().
to_query(Combined) ->
_pipe = Combined,
{combined_query, _pipe}.
-file("src/cake/combined.gleam", 360).
?DOC(" Creates a `UNION` query out of two queries as a `Combined` `ReadQuery`.\n").
-spec union(
cake@internal@read_query:select(),
cake@internal@read_query:select()
) -> cake@internal@read_query:combined().
union(Query_a, Query_b) ->
_pipe = union_distinct,
cake@internal@read_query:combined_query_new(_pipe, [Query_a, Query_b]).
-file("src/cake/combined.gleam", 367).
?DOC(
" Creates a `UNION` query out of two or more queries as a `Combined`\n"
" `ReadQuery`.\n"
).
-spec unions(
cake@internal@read_query:select(),
cake@internal@read_query:select(),
list(cake@internal@read_query:select())
) -> cake@internal@read_query:combined().
unions(Query_a, Query_b, More_queries) ->
_pipe = union_distinct,
cake@internal@read_query:combined_query_new(
_pipe,
[Query_a, Query_b | More_queries]
).
-file("src/cake/combined.gleam", 378).
?DOC(" Creates a `UNION ALL` query out of two queries as a `Combined` `ReadQuery`.\n").
-spec union_all(
cake@internal@read_query:select(),
cake@internal@read_query:select()
) -> cake@internal@read_query:combined().
union_all(Query_a, Query_b) ->
_pipe = union_all,
cake@internal@read_query:combined_query_new(_pipe, [Query_a, Query_b]).
-file("src/cake/combined.gleam", 385).
?DOC(
" Creates a `UNION ALL` query out of two or more queries as a `Combined`\n"
" `ReadQuery`.\n"
).
-spec unions_all(
cake@internal@read_query:select(),
cake@internal@read_query:select(),
list(cake@internal@read_query:select())
) -> cake@internal@read_query:combined().
unions_all(Query_a, Query_b, More_queries) ->
_pipe = union_all,
cake@internal@read_query:combined_query_new(
_pipe,
[Query_a, Query_b | More_queries]
).
-file("src/cake/combined.gleam", 396).
?DOC(" Creates an `EXCEPT` query out of two queries as a `Combined` `ReadQuery`.\n").
-spec except(
cake@internal@read_query:select(),
cake@internal@read_query:select()
) -> cake@internal@read_query:combined().
except(Query_a, Query_b) ->
_pipe = except_distinct,
cake@internal@read_query:combined_query_new(_pipe, [Query_a, Query_b]).
-file("src/cake/combined.gleam", 403).
?DOC(
" Creates an `EXCEPT` query out of two or more queries as a `Combined`\n"
" `ReadQuery`.\n"
).
-spec excepts(
cake@internal@read_query:select(),
cake@internal@read_query:select(),
list(cake@internal@read_query:select())
) -> cake@internal@read_query:combined().
excepts(Query_a, Query_b, More_queries) ->
_pipe = except_distinct,
cake@internal@read_query:combined_query_new(
_pipe,
[Query_a, Query_b | More_queries]
).
-file("src/cake/combined.gleam", 417).
?DOC(
" Creates an `EXCEPT ALL` query out of two queries as a `Combined`\n"
" `ReadQuery`.\n"
"\n"
" NOTICE: Not supported by 🪶SQLite.\n"
).
-spec except_all(
cake@internal@read_query:select(),
cake@internal@read_query:select()
) -> cake@internal@read_query:combined().
except_all(Query_a, Query_b) ->
_pipe = except_all,
cake@internal@read_query:combined_query_new(_pipe, [Query_a, Query_b]).
-file("src/cake/combined.gleam", 429).
?DOC(
" Creates an `EXCEPT ALL` query out of two or more queries as a `Combined`\n"
" `ReadQuery`.\n"
"\n"
" NOTICE: Not supported by 🪶SQLite.\n"
).
-spec excepts_all(
cake@internal@read_query:select(),
cake@internal@read_query:select(),
list(cake@internal@read_query:select())
) -> cake@internal@read_query:combined().
excepts_all(Query_a, Query_b, More_queries) ->
_pipe = except_all,
cake@internal@read_query:combined_query_new(
_pipe,
[Query_a, Query_b | More_queries]
).
-file("src/cake/combined.gleam", 440).
?DOC(" Creates an `INTERSECT` query out of two queries as a `Combined` `ReadQuery`.\n").
-spec intersect(
cake@internal@read_query:select(),
cake@internal@read_query:select()
) -> cake@internal@read_query:combined().
intersect(Query_a, Query_b) ->
_pipe = intersect_distinct,
cake@internal@read_query:combined_query_new(_pipe, [Query_a, Query_b]).
-file("src/cake/combined.gleam", 448).
?DOC(
" Creates an `INTERSECT` query out of two or more queries as a `Combined`\n"
" `ReadQuery`.\n"
).
-spec intersects(
cake@internal@read_query:select(),
cake@internal@read_query:select(),
list(cake@internal@read_query:select())
) -> cake@internal@read_query:combined().
intersects(Query_a, Query_b, More_queries) ->
_pipe = intersect_distinct,
cake@internal@read_query:combined_query_new(
_pipe,
[Query_a, Query_b | More_queries]
).
-file("src/cake/combined.gleam", 462).
?DOC(
" Creates an `INTERSECT ALL` query out of two queries as a `Combined`\n"
" `ReadQuery`.\n"
"\n"
" NOTICE: Not supported by 🪶SQLite.\n"
).
-spec intersect_all(
cake@internal@read_query:select(),
cake@internal@read_query:select()
) -> cake@internal@read_query:combined().
intersect_all(Query_a, Query_b) ->
_pipe = intersect_all,
cake@internal@read_query:combined_query_new(_pipe, [Query_a, Query_b]).
-file("src/cake/combined.gleam", 474).
?DOC(
" Creates an `INTERSECT ALL` query out of two or more queries as a `Combined`\n"
" `ReadQuery`.\n"
"\n"
" NOTICE: Not supported by 🪶SQLite.\n"
).
-spec intersects_all(
cake@internal@read_query:select(),
cake@internal@read_query:select(),
list(cake@internal@read_query:select())
) -> cake@internal@read_query:combined().
intersects_all(Query_a, Query_b, More_queries) ->
_pipe = intersect_all,
cake@internal@read_query:combined_query_new(
_pipe,
[Query_a, Query_b | More_queries]
).
-file("src/cake/combined.gleam", 485).
?DOC(" Gets the queries from a `Combined` `ReadQuery`.\n").
-spec get_queries(cake@internal@read_query:combined()) -> list(cake@internal@read_query:select()).
get_queries(Combined) ->
erlang:element(3, Combined).
-file("src/cake/combined.gleam", 493).
?DOC(" Sets a `Limit` in the `Combined` `ReadQuery`.\n").
-spec limit(cake@internal@read_query:combined(), integer()) -> cake@internal@read_query:combined().
limit(Query, Limit) ->
Limit@1 = cake@internal@read_query:limit_new(Limit),
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
Limit@1,
erlang:element(5, Query),
erlang:element(6, Query),
erlang:element(7, Query),
erlang:element(8, Query)}.
-file("src/cake/combined.gleam", 500).
?DOC(" Removes `Limit` from the `Combined` `ReadQuery`.\n").
-spec no_limit(cake@internal@read_query:combined()) -> cake@internal@read_query:combined().
no_limit(Query) ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
no_limit,
erlang:element(5, Query),
erlang:element(6, Query),
erlang:element(7, Query),
erlang:element(8, Query)}.
-file("src/cake/combined.gleam", 506).
?DOC(" Gets `Limit` in the `Combined` `ReadQuery`.\n").
-spec get_limit(cake@internal@read_query:combined()) -> cake@internal@read_query:limit().
get_limit(Query) ->
erlang:element(4, Query).
-file("src/cake/combined.gleam", 512).
?DOC(" Sets an `Offset` in the `Combined` `ReadQuery`.\n").
-spec offset(cake@internal@read_query:combined(), integer()) -> cake@internal@read_query:combined().
offset(Query, Offset) ->
Offset@1 = cake@internal@read_query:offset_new(Offset),
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
Offset@1,
erlang:element(6, Query),
erlang:element(7, Query),
erlang:element(8, Query)}.
-file("src/cake/combined.gleam", 519).
?DOC(" Removes `Offset` from the `Combined` `ReadQuery`.\n").
-spec no_offset(cake@internal@read_query:combined()) -> cake@internal@read_query:combined().
no_offset(Query) ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
no_offset,
erlang:element(6, Query),
erlang:element(7, Query),
erlang:element(8, Query)}.
-file("src/cake/combined.gleam", 525).
?DOC(" Gets `Offset` in the `Combined` `ReadQuery`.\n").
-spec get_offset(cake@internal@read_query:combined()) -> cake@internal@read_query:offset().
get_offset(Query) ->
erlang:element(5, Query).
-file("src/cake/combined.gleam", 538).
-spec map_order_by_direction_constructor(direction()) -> cake@internal@read_query:order_by_direction().
map_order_by_direction_constructor(In) ->
case In of
asc ->
asc;
desc ->
desc
end.
-file("src/cake/combined.gleam", 547).
?DOC(" Creates or appends an ascending `OrderBy`.\n").
-spec order_by_asc(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
order_by_asc(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, asc}
end],
{order_by, _pipe@2}
end,
true
).
-file("src/cake/combined.gleam", 562).
?DOC(
" Creates or appends an ascending `OrderBy` with `NULLS FIRST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS FIRST` out of the box.\n"
).
-spec order_by_asc_nulls_first(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
order_by_asc_nulls_first(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, asc_nulls_first}
end],
{order_by, _pipe@2}
end,
true
).
-file("src/cake/combined.gleam", 577).
?DOC(
" Creates or appends an ascending `OrderBy` with `NULLS LAST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS LAST` out of the box.\n"
).
-spec order_by_asc_nulls_last(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
order_by_asc_nulls_last(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, asc_nulls_last}
end],
{order_by, _pipe@2}
end,
true
).
-file("src/cake/combined.gleam", 590).
?DOC(" Replaces the `OrderBy` with a single ascending `OrderBy`.\n").
-spec replace_order_by_asc(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
replace_order_by_asc(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, asc}
end],
{order_by, _pipe@2}
end,
false
).
-file("src/cake/combined.gleam", 605).
?DOC(
" Replaces the `OrderBy` with a single ascending `OrderBy` with `NULLS FIRST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS FIRST` out of the box.\n"
).
-spec replace_order_by_asc_nulls_first(
cake@internal@read_query:combined(),
binary()
) -> cake@internal@read_query:combined().
replace_order_by_asc_nulls_first(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, asc_nulls_first}
end],
{order_by, _pipe@2}
end,
false
).
-file("src/cake/combined.gleam", 620).
?DOC(
" Replaces the `OrderBy` with a single ascending `OrderBy` with `NULLS LAST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS LAST` out of the box.\n"
).
-spec replace_order_by_asc_nulls_last(
cake@internal@read_query:combined(),
binary()
) -> cake@internal@read_query:combined().
replace_order_by_asc_nulls_last(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, asc_nulls_last}
end],
{order_by, _pipe@2}
end,
false
).
-file("src/cake/combined.gleam", 633).
?DOC(" Creates or appends a descending `OrderBy`.\n").
-spec order_by_desc(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
order_by_desc(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, desc}
end],
{order_by, _pipe@2}
end,
true
).
-file("src/cake/combined.gleam", 648).
?DOC(
" Creates or appends a descending order with `NULLS FIRST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS FIRST` out of the box.\n"
).
-spec order_by_desc_nulls_first(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
order_by_desc_nulls_first(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, desc_nulls_first}
end],
{order_by, _pipe@2}
end,
true
).
-file("src/cake/combined.gleam", 663).
?DOC(
" Creates or appends a descending `OrderBy` with `NULLS LAST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS LAST` out of the box.\n"
).
-spec order_by_desc_nulls_last(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
order_by_desc_nulls_last(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, desc_nulls_last}
end],
{order_by, _pipe@2}
end,
true
).
-file("src/cake/combined.gleam", 676).
?DOC(" Replaces the `OrderBy` with a single descending order.\n").
-spec replace_order_by_desc(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
replace_order_by_desc(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, desc}
end],
{order_by, _pipe@2}
end,
false
).
-file("src/cake/combined.gleam", 691).
?DOC(
" Replaces the `OrderBy` with a single descending order with `NULLS FIRST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS FIRST` out of the box.\n"
).
-spec replace_order_by_desc_nulls_first(
cake@internal@read_query:combined(),
binary()
) -> cake@internal@read_query:combined().
replace_order_by_desc_nulls_first(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, desc_nulls_first}
end],
{order_by, _pipe@2}
end,
false
).
-file("src/cake/combined.gleam", 706).
?DOC(
" Replaces the `OrderBy` with a single descending `OrderBy` with `NULLS LAST`.\n"
"\n"
" NOTICE: 🦭MariaDB and 🐬MySQL do not support `NULLS LAST` out of the box.\n"
).
-spec replace_order_by_desc_nulls_last(
cake@internal@read_query:combined(),
binary()
) -> cake@internal@read_query:combined().
replace_order_by_desc_nulls_last(Query, Order_by) ->
_pipe = Query,
cake@internal@read_query:combined_order_by(
_pipe,
begin
_pipe@2 = [begin
_pipe@1 = Order_by,
{order_by_column, _pipe@1, desc_nulls_last}
end],
{order_by, _pipe@2}
end,
false
).
-file("src/cake/combined.gleam", 721).
?DOC(
" Creates or appends an `OrderBy` for a column with a direction.\n"
"\n"
" The direction can either `ASC` or `DESC`.\n"
).
-spec order_by(cake@internal@read_query:combined(), binary(), direction()) -> cake@internal@read_query:combined().
order_by(Query, Order_by, Direction) ->
Direction@1 = begin
_pipe = Direction,
map_order_by_direction_constructor(_pipe)
end,
_pipe@1 = Query,
cake@internal@read_query:combined_order_by(
_pipe@1,
begin
_pipe@3 = [begin
_pipe@2 = Order_by,
{order_by_column, _pipe@2, Direction@1}
end],
{order_by, _pipe@3}
end,
true
).
-file("src/cake/combined.gleam", 736).
?DOC(" Replaces the `OrderBy` with a column with a direction.\n").
-spec replace_order_by(
cake@internal@read_query:combined(),
binary(),
direction()
) -> cake@internal@read_query:combined().
replace_order_by(Query, Order_by, Direction) ->
Direction@1 = begin
_pipe = Direction,
map_order_by_direction_constructor(_pipe)
end,
_pipe@1 = Query,
cake@internal@read_query:combined_order_by(
_pipe@1,
begin
_pipe@3 = [begin
_pipe@2 = Order_by,
{order_by_column, _pipe@2, Direction@1}
end],
{order_by, _pipe@3}
end,
false
).
-file("src/cake/combined.gleam", 751).
?DOC(" Removes the `OrderBy` from the `Combined` read_query.\n").
-spec no_order_by(cake@internal@read_query:combined()) -> cake@internal@read_query:combined().
no_order_by(Query) ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
no_order_by,
erlang:element(7, Query),
erlang:element(8, Query)}.
-file("src/cake/combined.gleam", 757).
?DOC(" Gets the `OrderBy` from the `Combined` read_query.\n").
-spec get_order_by(cake@internal@read_query:combined()) -> cake@internal@read_query:order_by().
get_order_by(Query) ->
erlang:element(6, Query).
-file("src/cake/combined.gleam", 765).
?DOC(" Appends an `Epilog` to the `Combined` read_query.\n").
-spec epilog(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
epilog(Query, Epilog) ->
Epilog@1 = begin
_pipe = Epilog,
gleam@string:trim(_pipe)
end,
case Epilog@1 of
<<""/utf8>> ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
erlang:element(6, Query),
no_epilog,
erlang:element(8, Query)};
_ ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
erlang:element(6, Query),
begin
_pipe@1 = (<<" "/utf8, Epilog@1/binary>>),
{epilog, _pipe@1}
end,
erlang:element(8, Query)}
end.
-file("src/cake/combined.gleam", 775).
?DOC(" Removes the `Epilog` from the `Combined` read_query.\n").
-spec no_epilog(cake@internal@read_query:combined()) -> cake@internal@read_query:combined().
no_epilog(Query) ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
erlang:element(6, Query),
no_epilog,
erlang:element(8, Query)}.
-file("src/cake/combined.gleam", 781).
?DOC(" Gets the `Epilog` from the `Combined` read_query.\n").
-spec get_epilog(cake@internal@read_query:combined()) -> cake@internal@read_query:epilog().
get_epilog(Query) ->
erlang:element(7, Query).
-file("src/cake/combined.gleam", 789).
?DOC(" Appends a `Comment` to the `Combined` read_query.\n").
-spec comment(cake@internal@read_query:combined(), binary()) -> cake@internal@read_query:combined().
comment(Query, Comment) ->
Comment@1 = begin
_pipe = Comment,
gleam@string:trim(_pipe)
end,
case Comment@1 of
<<""/utf8>> ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
erlang:element(6, Query),
erlang:element(7, Query),
no_comment};
_ ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
erlang:element(6, Query),
erlang:element(7, Query),
begin
_pipe@1 = (<<" "/utf8, Comment@1/binary>>),
{comment, _pipe@1}
end}
end.
-file("src/cake/combined.gleam", 799).
?DOC(" Removes the `Comment` from the `Combined` read_query.\n").
-spec no_comment(cake@internal@read_query:combined()) -> cake@internal@read_query:combined().
no_comment(Query) ->
{combined,
erlang:element(2, Query),
erlang:element(3, Query),
erlang:element(4, Query),
erlang:element(5, Query),
erlang:element(6, Query),
erlang:element(7, Query),
no_comment}.
-file("src/cake/combined.gleam", 805).
?DOC(" Gets the `Comment` from the `Combined` read_query.\n").
-spec get_comment(cake@internal@read_query:combined()) -> cake@internal@read_query:comment().
get_comment(Query) ->
erlang:element(8, Query).