Packages

A compile-time safe database library for Gleam - Ecto-inspired schemas, composable queries, and adapter-based persistence

Current section

Files

Jump to
cquill src bench@schema_bench.erl
Raw

src/bench@schema_bench.erl

-module(bench@schema_bench).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/bench/schema_bench.gleam").
-export([main/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.
-file("src/bench/schema_bench.gleam", 17).
?DOC(" Benchmark simple schema construction\n").
-spec bench_simple_schema() -> nil.
bench_simple_schema() ->
_ = begin
_pipe = cquill@schema:new(<<"users"/utf8>>),
_pipe@2 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"id"/utf8>>),
cquill@schema@field:primary_key(_pipe@1)
end
),
_pipe@3 = cquill@schema:field(
_pipe@2,
cquill@schema@field:string(<<"email"/utf8>>)
),
_pipe@4 = cquill@schema:field(
_pipe@3,
cquill@schema@field:string(<<"name"/utf8>>)
),
cquill@schema:single_primary_key(_pipe@4, <<"id"/utf8>>)
end,
nil.
-file("src/bench/schema_bench.gleam", 28).
?DOC(" Benchmark schema with many fields\n").
-spec bench_large_schema() -> nil.
bench_large_schema() ->
_ = begin
_pipe = cquill@schema:new(<<"large_table"/utf8>>),
_pipe@2 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"id"/utf8>>),
cquill@schema@field:primary_key(_pipe@1)
end
),
_pipe@3 = cquill@schema:field(
_pipe@2,
cquill@schema@field:string(<<"field_1"/utf8>>)
),
_pipe@4 = cquill@schema:field(
_pipe@3,
cquill@schema@field:string(<<"field_2"/utf8>>)
),
_pipe@5 = cquill@schema:field(
_pipe@4,
cquill@schema@field:string(<<"field_3"/utf8>>)
),
_pipe@6 = cquill@schema:field(
_pipe@5,
cquill@schema@field:string(<<"field_4"/utf8>>)
),
_pipe@7 = cquill@schema:field(
_pipe@6,
cquill@schema@field:string(<<"field_5"/utf8>>)
),
_pipe@8 = cquill@schema:field(
_pipe@7,
cquill@schema@field:integer(<<"field_6"/utf8>>)
),
_pipe@9 = cquill@schema:field(
_pipe@8,
cquill@schema@field:integer(<<"field_7"/utf8>>)
),
_pipe@10 = cquill@schema:field(
_pipe@9,
cquill@schema@field:integer(<<"field_8"/utf8>>)
),
_pipe@11 = cquill@schema:field(
_pipe@10,
cquill@schema@field:integer(<<"field_9"/utf8>>)
),
_pipe@12 = cquill@schema:field(
_pipe@11,
cquill@schema@field:integer(<<"field_10"/utf8>>)
),
_pipe@13 = cquill@schema:field(
_pipe@12,
cquill@schema@field:boolean(<<"field_11"/utf8>>)
),
_pipe@14 = cquill@schema:field(
_pipe@13,
cquill@schema@field:boolean(<<"field_12"/utf8>>)
),
_pipe@15 = cquill@schema:field(
_pipe@14,
cquill@schema@field:string(<<"field_13"/utf8>>)
),
_pipe@16 = cquill@schema:field(
_pipe@15,
cquill@schema@field:string(<<"field_14"/utf8>>)
),
_pipe@17 = cquill@schema:field(
_pipe@16,
cquill@schema@field:decimal(<<"field_15"/utf8>>, 10, 2)
),
_pipe@18 = cquill@schema:field(
_pipe@17,
cquill@schema@field:datetime(<<"field_16"/utf8>>)
),
_pipe@19 = cquill@schema:field(
_pipe@18,
cquill@schema@field:datetime(<<"field_17"/utf8>>)
),
_pipe@20 = cquill@schema:field(
_pipe@19,
cquill@schema@field:date(<<"field_18"/utf8>>)
),
_pipe@21 = cquill@schema:field(
_pipe@20,
cquill@schema@field:time(<<"field_19"/utf8>>)
),
_pipe@22 = cquill@schema:field(
_pipe@21,
cquill@schema@field:uuid(<<"field_20"/utf8>>)
),
cquill@schema:single_primary_key(_pipe@22, <<"id"/utf8>>)
end,
nil.
-file("src/bench/schema_bench.gleam", 57).
?DOC(" Benchmark schema with constraints\n").
-spec bench_schema_with_constraints() -> nil.
bench_schema_with_constraints() ->
_ = begin
_pipe = cquill@schema:new(<<"products"/utf8>>),
_pipe@2 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"id"/utf8>>),
cquill@schema@field:primary_key(_pipe@1)
end
),
_pipe@5 = cquill@schema:field(
_pipe@2,
begin
_pipe@3 = cquill@schema@field:string(<<"sku"/utf8>>),
_pipe@4 = cquill@schema@field:not_null(_pipe@3),
cquill@schema@field:unique(_pipe@4)
end
),
_pipe@7 = cquill@schema:field(
_pipe@5,
begin
_pipe@6 = cquill@schema@field:string(<<"name"/utf8>>),
cquill@schema@field:not_null(_pipe@6)
end
),
_pipe@9 = cquill@schema:field(
_pipe@7,
begin
_pipe@8 = cquill@schema@field:decimal(<<"price"/utf8>>, 10, 2),
cquill@schema@field:not_null(_pipe@8)
end
),
_pipe@12 = cquill@schema:field(
_pipe@9,
begin
_pipe@10 = cquill@schema@field:integer(<<"category_id"/utf8>>),
_pipe@11 = cquill@schema@field:not_null(_pipe@10),
cquill@schema@field:references(
_pipe@11,
<<"categories"/utf8>>,
<<"id"/utf8>>
)
end
),
_pipe@13 = cquill@schema:field(
_pipe@12,
cquill@schema@field:integer(<<"quantity"/utf8>>)
),
_pipe@14 = cquill@schema:field(
_pipe@13,
cquill@schema@field:boolean(<<"active"/utf8>>)
),
_pipe@15 = cquill@schema:single_primary_key(_pipe@14, <<"id"/utf8>>),
_pipe@16 = cquill@schema:unique_constraint(
_pipe@15,
<<"products_sku_unique"/utf8>>,
[<<"sku"/utf8>>]
),
cquill@schema:index(
_pipe@16,
<<"products_category_idx"/utf8>>,
[<<"category_id"/utf8>>],
false
)
end,
nil.
-file("src/bench/schema_bench.gleam", 78).
?DOC(" Benchmark schema with composite primary key\n").
-spec bench_composite_primary_key() -> nil.
bench_composite_primary_key() ->
_ = begin
_pipe = cquill@schema:new(<<"order_items"/utf8>>),
_pipe@2 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"order_id"/utf8>>),
cquill@schema@field:primary_key(_pipe@1)
end
),
_pipe@4 = cquill@schema:field(
_pipe@2,
begin
_pipe@3 = cquill@schema@field:integer(<<"product_id"/utf8>>),
cquill@schema@field:primary_key(_pipe@3)
end
),
_pipe@6 = cquill@schema:field(
_pipe@4,
begin
_pipe@5 = cquill@schema@field:integer(<<"quantity"/utf8>>),
cquill@schema@field:not_null(_pipe@5)
end
),
_pipe@8 = cquill@schema:field(
_pipe@6,
begin
_pipe@7 = cquill@schema@field:decimal(
<<"unit_price"/utf8>>,
10,
2
),
cquill@schema@field:not_null(_pipe@7)
end
),
cquill@schema:primary_key(
_pipe@8,
[<<"order_id"/utf8>>, <<"product_id"/utf8>>]
)
end,
nil.
-file("src/bench/schema_bench.gleam", 94).
?DOC(" Create a test schema for lookup benchmarks\n").
-spec test_schema() -> cquill@schema:schema().
test_schema() ->
_pipe = cquill@schema:new(<<"test_table"/utf8>>),
_pipe@2 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"id"/utf8>>),
cquill@schema@field:primary_key(_pipe@1)
end
),
_pipe@5 = cquill@schema:field(
_pipe@2,
begin
_pipe@3 = cquill@schema@field:string(<<"email"/utf8>>),
_pipe@4 = cquill@schema@field:not_null(_pipe@3),
cquill@schema@field:unique(_pipe@4)
end
),
_pipe@6 = cquill@schema:field(
_pipe@5,
cquill@schema@field:string(<<"name"/utf8>>)
),
_pipe@7 = cquill@schema:field(
_pipe@6,
cquill@schema@field:boolean(<<"active"/utf8>>)
),
_pipe@8 = cquill@schema:field(
_pipe@7,
cquill@schema@field:integer(<<"age"/utf8>>)
),
_pipe@9 = cquill@schema:field(
_pipe@8,
cquill@schema@field:string(<<"bio"/utf8>>)
),
_pipe@10 = cquill@schema:field(
_pipe@9,
cquill@schema@field:datetime(<<"created_at"/utf8>>)
),
_pipe@11 = cquill@schema:field(
_pipe@10,
cquill@schema@field:datetime(<<"updated_at"/utf8>>)
),
_pipe@12 = cquill@schema:field(
_pipe@11,
cquill@schema@field:integer(<<"department_id"/utf8>>)
),
_pipe@13 = cquill@schema:field(
_pipe@12,
cquill@schema@field:integer(<<"manager_id"/utf8>>)
),
cquill@schema:single_primary_key(_pipe@13, <<"id"/utf8>>).
-file("src/bench/schema_bench.gleam", 110).
?DOC(" Benchmark get field by name (first field)\n").
-spec bench_get_field_first() -> nil.
bench_get_field_first() ->
S = test_schema(),
_ = cquill@schema:get_field(S, <<"id"/utf8>>),
nil.
-file("src/bench/schema_bench.gleam", 117).
?DOC(" Benchmark get field by name (middle field)\n").
-spec bench_get_field_middle() -> nil.
bench_get_field_middle() ->
S = test_schema(),
_ = cquill@schema:get_field(S, <<"active"/utf8>>),
nil.
-file("src/bench/schema_bench.gleam", 124).
?DOC(" Benchmark get field by name (last field)\n").
-spec bench_get_field_last() -> nil.
bench_get_field_last() ->
S = test_schema(),
_ = cquill@schema:get_field(S, <<"manager_id"/utf8>>),
nil.
-file("src/bench/schema_bench.gleam", 131).
?DOC(" Benchmark has_field check\n").
-spec bench_has_field() -> nil.
bench_has_field() ->
S = test_schema(),
_ = cquill@schema:has_field(S, <<"email"/utf8>>),
_ = cquill@schema:has_field(S, <<"nonexistent"/utf8>>),
nil.
-file("src/bench/schema_bench.gleam", 139).
?DOC(" Benchmark get all field names\n").
-spec bench_get_field_names() -> nil.
bench_get_field_names() ->
S = test_schema(),
_ = cquill@schema:field_names(S),
nil.
-file("src/bench/schema_bench.gleam", 146).
?DOC(" Benchmark get all fields\n").
-spec bench_get_all_fields() -> nil.
bench_get_all_fields() ->
S = test_schema(),
_ = cquill@schema:get_fields(S),
nil.
-file("src/bench/schema_bench.gleam", 153).
?DOC(" Benchmark field count\n").
-spec bench_field_count() -> nil.
bench_field_count() ->
S = test_schema(),
_ = cquill@schema:field_count(S),
nil.
-file("src/bench/schema_bench.gleam", 164).
?DOC(" Benchmark select_fields transformation\n").
-spec bench_select_fields() -> nil.
bench_select_fields() ->
S = test_schema(),
_ = cquill@schema:select_fields(
S,
[<<"id"/utf8>>, <<"email"/utf8>>, <<"name"/utf8>>]
),
nil.
-file("src/bench/schema_bench.gleam", 171).
?DOC(" Benchmark exclude_fields transformation\n").
-spec bench_exclude_fields() -> nil.
bench_exclude_fields() ->
S = test_schema(),
_ = cquill@schema:exclude_fields(
S,
[<<"created_at"/utf8>>, <<"updated_at"/utf8>>]
),
nil.
-file("src/bench/schema_bench.gleam", 178).
?DOC(" Benchmark insertable_fields transformation\n").
-spec bench_insertable_fields() -> nil.
bench_insertable_fields() ->
S = begin
_pipe = cquill@schema:new(<<"users"/utf8>>),
_pipe@3 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"id"/utf8>>),
_pipe@2 = cquill@schema@field:primary_key(_pipe@1),
cquill@schema@field:auto_increment(_pipe@2)
end
),
_pipe@5 = cquill@schema:field(
_pipe@3,
begin
_pipe@4 = cquill@schema@field:string(<<"email"/utf8>>),
cquill@schema@field:not_null(_pipe@4)
end
),
_pipe@6 = cquill@schema:field(
_pipe@5,
cquill@schema@field:string(<<"name"/utf8>>)
),
_pipe@8 = cquill@schema:field(
_pipe@6,
begin
_pipe@7 = cquill@schema@field:datetime(<<"created_at"/utf8>>),
cquill@schema@field:auto_increment(_pipe@7)
end
),
cquill@schema:single_primary_key(_pipe@8, <<"id"/utf8>>)
end,
_ = cquill@schema:insertable_fields(S),
nil.
-file("src/bench/schema_bench.gleam", 194).
?DOC(" Benchmark rename_field transformation\n").
-spec bench_rename_field() -> nil.
bench_rename_field() ->
S = test_schema(),
_ = cquill@schema:rename_field(
S,
<<"email"/utf8>>,
<<"email_address"/utf8>>
),
nil.
-file("src/bench/schema_bench.gleam", 205).
?DOC(" Benchmark validation of valid schema\n").
-spec bench_validate_valid() -> nil.
bench_validate_valid() ->
S = test_schema(),
_ = cquill@schema:validate(S),
nil.
-file("src/bench/schema_bench.gleam", 212).
?DOC(" Benchmark validation of invalid schema\n").
-spec bench_validate_invalid() -> nil.
bench_validate_invalid() ->
S = begin
_pipe = cquill@schema:new(<<"invalid"/utf8>>),
_pipe@1 = cquill@schema:field(
_pipe,
cquill@schema@field:string(<<"name"/utf8>>)
),
_pipe@2 = cquill@schema:field(
_pipe@1,
cquill@schema@field:string(<<"name"/utf8>>)
),
cquill@schema:primary_key(_pipe@2, [<<"nonexistent"/utf8>>])
end,
_ = cquill@schema:validate(S),
nil.
-file("src/bench/schema_bench.gleam", 226).
?DOC(" Benchmark is_valid check\n").
-spec bench_is_valid() -> nil.
bench_is_valid() ->
S = test_schema(),
_ = cquill@schema:is_valid(S),
nil.
-file("src/bench/schema_bench.gleam", 237).
?DOC(" Benchmark schema diff\n").
-spec bench_schema_diff() -> nil.
bench_schema_diff() ->
Old_schema = begin
_pipe = cquill@schema:new(<<"users"/utf8>>),
_pipe@2 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"id"/utf8>>),
cquill@schema@field:primary_key(_pipe@1)
end
),
_pipe@3 = cquill@schema:field(
_pipe@2,
cquill@schema@field:string(<<"email"/utf8>>)
),
_pipe@4 = cquill@schema:field(
_pipe@3,
cquill@schema@field:string(<<"name"/utf8>>)
),
cquill@schema:single_primary_key(_pipe@4, <<"id"/utf8>>)
end,
New_schema = begin
_pipe@5 = cquill@schema:new(<<"users"/utf8>>),
_pipe@7 = cquill@schema:field(
_pipe@5,
begin
_pipe@6 = cquill@schema@field:integer(<<"id"/utf8>>),
cquill@schema@field:primary_key(_pipe@6)
end
),
_pipe@8 = cquill@schema:field(
_pipe@7,
cquill@schema@field:string(<<"email"/utf8>>)
),
_pipe@9 = cquill@schema:field(
_pipe@8,
cquill@schema@field:string(<<"name"/utf8>>)
),
_pipe@10 = cquill@schema:field(
_pipe@9,
cquill@schema@field:boolean(<<"active"/utf8>>)
),
cquill@schema:single_primary_key(_pipe@10, <<"id"/utf8>>)
end,
_ = cquill@schema:diff(Old_schema, New_schema),
nil.
-file("src/bench/schema_bench.gleam", 264).
?DOC(" Benchmark getting primary key fields\n").
-spec bench_primary_key_fields() -> nil.
bench_primary_key_fields() ->
S = test_schema(),
_ = cquill@schema:primary_key_fields(S),
nil.
-file("src/bench/schema_bench.gleam", 271).
?DOC(" Benchmark getting non-primary key fields\n").
-spec bench_non_primary_key_fields() -> nil.
bench_non_primary_key_fields() ->
S = test_schema(),
_ = cquill@schema:non_primary_key_fields(S),
nil.
-file("src/bench/schema_bench.gleam", 278).
?DOC(" Benchmark getting nullable fields\n").
-spec bench_nullable_fields() -> nil.
bench_nullable_fields() ->
S = test_schema(),
_ = cquill@schema:nullable_fields(S),
nil.
-file("src/bench/schema_bench.gleam", 285).
?DOC(" Benchmark getting required fields\n").
-spec bench_required_fields() -> nil.
bench_required_fields() ->
S = test_schema(),
_ = cquill@schema:required_fields(S),
nil.
-file("src/bench/schema_bench.gleam", 292).
?DOC(" Benchmark getting foreign key fields\n").
-spec bench_foreign_key_fields() -> nil.
bench_foreign_key_fields() ->
S = begin
_pipe = cquill@schema:new(<<"orders"/utf8>>),
_pipe@2 = cquill@schema:field(
_pipe,
begin
_pipe@1 = cquill@schema@field:integer(<<"id"/utf8>>),
cquill@schema@field:primary_key(_pipe@1)
end
),
_pipe@4 = cquill@schema:field(
_pipe@2,
begin
_pipe@3 = cquill@schema@field:integer(<<"user_id"/utf8>>),
cquill@schema@field:references(
_pipe@3,
<<"users"/utf8>>,
<<"id"/utf8>>
)
end
),
_pipe@6 = cquill@schema:field(
_pipe@4,
begin
_pipe@5 = cquill@schema@field:integer(<<"product_id"/utf8>>),
cquill@schema@field:references(
_pipe@5,
<<"products"/utf8>>,
<<"id"/utf8>>
)
end
),
_pipe@7 = cquill@schema:field(
_pipe@6,
cquill@schema@field:integer(<<"quantity"/utf8>>)
),
cquill@schema:single_primary_key(_pipe@7, <<"id"/utf8>>)
end,
_ = cquill@schema:foreign_key_fields(S),
nil.
-file("src/bench/schema_bench.gleam", 311).
-spec main() -> nil.
main() ->
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(<<"cquill Schema Operation Benchmarks"/utf8>>),
gleam_stdlib:println(<<"==================================="/utf8>>),
gleam_stdlib:println(<<""/utf8>>),
Config = bench@bench:default_config(),
Construction_suite = bench@bench:run_suite(
<<"Schema Construction"/utf8>>,
[{<<"Simple schema (3 fields)"/utf8>>, fun bench_simple_schema/0},
{<<"Large schema (20 fields)"/utf8>>, fun bench_large_schema/0},
{<<"Schema with constraints"/utf8>>,
fun bench_schema_with_constraints/0},
{<<"Composite primary key"/utf8>>,
fun bench_composite_primary_key/0}],
Config
),
Lookup_suite = bench@bench:run_suite(
<<"Field Lookup"/utf8>>,
[{<<"Get field (first)"/utf8>>, fun bench_get_field_first/0},
{<<"Get field (middle)"/utf8>>, fun bench_get_field_middle/0},
{<<"Get field (last)"/utf8>>, fun bench_get_field_last/0},
{<<"Has field check"/utf8>>, fun bench_has_field/0},
{<<"Get all field names"/utf8>>, fun bench_get_field_names/0},
{<<"Get all fields"/utf8>>, fun bench_get_all_fields/0},
{<<"Field count"/utf8>>, fun bench_field_count/0}],
Config
),
Transform_suite = bench@bench:run_suite(
<<"Schema Transformations"/utf8>>,
[{<<"Select fields"/utf8>>, fun bench_select_fields/0},
{<<"Exclude fields"/utf8>>, fun bench_exclude_fields/0},
{<<"Insertable fields"/utf8>>, fun bench_insertable_fields/0},
{<<"Rename field"/utf8>>, fun bench_rename_field/0}],
Config
),
Validation_suite = bench@bench:run_suite(
<<"Schema Validation"/utf8>>,
[{<<"Validate (valid schema)"/utf8>>, fun bench_validate_valid/0},
{<<"Validate (invalid schema)"/utf8>>, fun bench_validate_invalid/0},
{<<"Is valid check"/utf8>>, fun bench_is_valid/0}],
Config
),
Comparison_suite = bench@bench:run_suite(
<<"Schema Comparison"/utf8>>,
[{<<"Schema diff"/utf8>>, fun bench_schema_diff/0}],
Config
),
Filtering_suite = bench@bench:run_suite(
<<"Field Filtering"/utf8>>,
[{<<"Primary key fields"/utf8>>, fun bench_primary_key_fields/0},
{<<"Non-primary key fields"/utf8>>,
fun bench_non_primary_key_fields/0},
{<<"Nullable fields"/utf8>>, fun bench_nullable_fields/0},
{<<"Required fields"/utf8>>, fun bench_required_fields/0},
{<<"Foreign key fields"/utf8>>, fun bench_foreign_key_fields/0}],
Config
),
bench@bench:print_suite_summary(Construction_suite),
bench@bench:print_suite_summary(Lookup_suite),
bench@bench:print_suite_summary(Transform_suite),
bench@bench:print_suite_summary(Validation_suite),
bench@bench:print_suite_summary(Comparison_suite),
bench@bench:print_suite_summary(Filtering_suite),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(<<"Markdown Output:"/utf8>>),
gleam_stdlib:println(
begin
_pipe = <<"-"/utf8>>,
gleam@string:repeat(_pipe, 60)
end
),
gleam_stdlib:println(bench@bench:to_markdown(Construction_suite)),
gleam_stdlib:println(bench@bench:to_markdown(Lookup_suite)),
gleam_stdlib:println(bench@bench:to_markdown(Transform_suite)),
gleam_stdlib:println(bench@bench:to_markdown(Validation_suite)),
gleam_stdlib:println(bench@bench:to_markdown(Filtering_suite)).