Packages

Small Postgres + SQLite library for Gleam. Query builder for 80% of CRUD, typed raw SQL for the rest.

Current section

Files

Jump to
gloo src gloo@adapter@postgres.erl
Raw

src/gloo@adapter@postgres.erl

-module(gloo@adapter@postgres).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gloo/adapter/postgres.gleam").
-export([default_config/0, host/2, database/2, user/2, password/2, pool_size/2, start/1]).
-export_type([config/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(
" Postgres adapter. Wraps the `pog` connection pool.\n"
"\n"
" ```gleam\n"
" postgres.default_config()\n"
" |> postgres.database(\"myapp_dev\")\n"
" |> postgres.user(\"postgres\")\n"
" |> postgres.start()\n"
" // -> Result(Repo, actor.StartError)\n"
" ```\n"
).
-type config() :: {config,
binary(),
binary(),
binary(),
gleam@option:option(binary()),
integer()}.
-file("src/gloo/adapter/postgres.gleam", 29).
-spec default_config() -> config().
default_config() ->
{config,
<<"127.0.0.1"/utf8>>,
<<"postgres"/utf8>>,
<<"postgres"/utf8>>,
none,
10}.
-file("src/gloo/adapter/postgres.gleam", 39).
-spec host(config(), binary()) -> config().
host(Config, Host) ->
{config,
Host,
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config)}.
-file("src/gloo/adapter/postgres.gleam", 43).
-spec database(config(), binary()) -> config().
database(Config, Database) ->
{config,
erlang:element(2, Config),
Database,
erlang:element(4, Config),
erlang:element(5, Config),
erlang:element(6, Config)}.
-file("src/gloo/adapter/postgres.gleam", 47).
-spec user(config(), binary()) -> config().
user(Config, User) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
User,
erlang:element(5, Config),
erlang:element(6, Config)}.
-file("src/gloo/adapter/postgres.gleam", 51).
-spec password(config(), gleam@option:option(binary())) -> config().
password(Config, Password) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
Password,
erlang:element(6, Config)}.
-file("src/gloo/adapter/postgres.gleam", 55).
-spec pool_size(config(), integer()) -> config().
pool_size(Config, Pool_size) ->
{config,
erlang:element(2, Config),
erlang:element(3, Config),
erlang:element(4, Config),
erlang:element(5, Config),
Pool_size}.
-file("src/gloo/adapter/postgres.gleam", 59).
-spec start(config()) -> {ok, gloo@repo:repo()} |
{error, gleam@otp@actor:start_error()}.
start(Config) ->
Pool_name = gleam_erlang_ffi:new_name(<<"gloo_pg"/utf8>>),
Pog_config = begin
_pipe = pog:default_config(Pool_name),
_pipe@1 = pog:host(_pipe, erlang:element(2, Config)),
_pipe@2 = pog:database(_pipe@1, erlang:element(3, Config)),
_pipe@3 = pog:user(_pipe@2, erlang:element(4, Config)),
_pipe@4 = pog:password(_pipe@3, erlang:element(5, Config)),
pog:pool_size(_pipe@4, erlang:element(6, Config))
end,
case pog:start(Pog_config) of
{ok, {started, Pid, Conn}} ->
Pg_adapter = {adapter,
<<"postgres"/utf8>>,
{pg_connection, Conn, Pid},
fun gloo@adapter:postgres_quote/1,
fun gloo@adapter:postgres_placeholder/1,
0,
gloo@telemetry:disabled()},
{ok, gloo@repo:from_adapter(Pg_adapter)};
{error, E} ->
{error, E}
end.