Current section
Files
Jump to
Current section
Files
src/sql_bridge_epgsql_worker.erl
%% This is largely lifted directly from the poolboy readme.
-module(sql_bridge_epgsql_worker).
-behaviour(poolboy_worker).
-behaviour(gen_server).
-export([start_link/1]).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2,
code_change/3]).
-record(state, {conn}).
start_link(Args) ->
gen_server:start_link(?MODULE, Args, []).
init(Args) ->
process_flag(trap_exit, true),
Hostname = proplists:get_value(hostname, Args),
Database = proplists:get_value(database, Args),
Username = proplists:get_value(username, Args),
Password = proplists:get_value(password, Args),
Port = proplists:get_value(port, Args, 5432),
Options = #{
host => Hostname,
username => Username,
password => Password,
database => Database,
port => Port,
codecs => [
{sql_bridge_epgsql_codec_integer, []},
{sql_bridge_epgsql_codec_datetime, []},
{sql_bridge_epgsql_codec_numeric, []}
]
},
{ok, Conn} = epgsql:connect(Options),
{ok, #state{conn=Conn}}.
handle_call({squery, Sql}, _From, #state{conn=Conn}=State) ->
{reply, epgsql:squery(Conn, Sql), State};
handle_call({equery, Stmt, Params}, _From, #state{conn=Conn}=State) ->
{reply, epgsql:equery(Conn, Stmt, Params), State};
handle_call(_Request, _From, State) ->
{reply, ok, State}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, #state{conn=Conn}) ->
ok = epgsql:close(Conn),
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.