Packages
pillar
0.5.1
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.1
0.34.0
0.33.1
0.33.0
0.32.0
0.31.0
0.30.0
0.29.1
0.29.0
0.28.0
0.27.0
0.26.1
0.26.0
0.25.1
0.25.0
0.24.0
0.23.3
0.23.2
0.23.1
0.23.0
0.22.0
0.21.0
0.20.0
0.19.0
0.18.2
0.18.1
0.18.0
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.0
0.14.0
0.13.1
0.13.0
0.12.0
0.11.0
0.10.0
0.9.1
0.9.0
0.8.1
0.8.0
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.0
Elixir client for ClickHouse, a fast open-source Online Analytical Processing (OLAP) database management system.
Current section
Files
Jump to
Current section
Files
lib/pillar.ex
defmodule Pillar do
@moduledoc """
"""
alias Pillar.Connection
alias Pillar.HttpClient
alias Pillar.QueryBuilder
alias Pillar.ResponseParser
def query(%Connection{} = connection, query, params \\ %{}) do
final_sql = QueryBuilder.build(query, params) <> "\n FORMAT JSON"
connection
|> Connection.url_from_connection()
|> HttpClient.post(final_sql)
|> ResponseParser.parse()
end
defmacro __using__(connection_string: connection_string, name: name) do
quote do
use GenServer
def start_link(_opts \\ nil) do
GenServer.start_link(__MODULE__, unquote(connection_string), name: unquote(name))
end
def query(sql, params \\ %{}) do
GenServer.call(unquote(name), {sql, params})
end
def async_query(sql, params \\ %{}) do
GenServer.cast(unquote(name), {sql, params})
end
def init(connection_string) do
{:ok, Connection.new(connection_string)}
end
def handle_call({query, params}, _from, state) do
{:ok, result} = Pillar.query(state, query, params)
{:reply, {:ok, result}, state}
end
def handle_cast({query, params}, state) do
{:ok, _result} = Pillar.query(state, query, params)
{:noreply, state}
end
end
end
end