-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)).