Packages
ecto_ch
0.2.2
0.10.0
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.9
0.8.8
0.8.7
0.8.6
0.8.5
retired
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
retired
0.6.1
retired
0.6.0
retired
0.5.1
0.5.0
retired
0.4.1
0.4.0
retired
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.2
0.2.1
0.2.0
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
ClickHouse adapter for Ecto
Current section
Files
Jump to
Current section
Files
lib/ecto/adapters/clickhouse/storage.ex
defmodule Ecto.Adapters.ClickHouse.Storage do
@moduledoc false
alias Ch.{Query, Error}
alias Ch.Connection, as: Conn
@conn Ecto.Adapters.ClickHouse.Connection
def storage_up(opts) do
{database, opts} = Keyword.pop!(opts, :database)
statement = "CREATE DATABASE #{@conn.quote_name(database)}"
with {:ok, conn} <- Conn.connect(opts),
{:ok, _result, _conn} <- exec(conn, statement),
do: :ok
end
def storage_down(opts) do
{database, opts} = Keyword.pop!(opts, :database)
statement = "DROP DATABASE #{@conn.quote_name(database)}"
with {:ok, conn} <- Conn.connect(opts),
{:ok, _result, _conn} <- exec(conn, statement),
do: :ok
end
def storage_status(opts) do
{database, opts} = Keyword.pop!(opts, :database)
statement = "SELECT 1 FROM system.databases WHERE name = {database:String}"
params = %{"database" => database}
with {:ok, conn} <- Conn.connect(opts),
{:ok, %{num_rows: num_rows}, _conn} <- exec(conn, statement, params) do
case num_rows do
1 -> :up
0 -> :down
end
end
end
defp exec(conn, sql, params \\ []) do
query = Query.build(sql)
params = DBConnection.Query.encode(query, params, [])
case Conn.handle_execute(query, params, [], conn) do
{:ok, query, result, conn} -> {:ok, DBConnection.Query.decode(query, result, []), conn}
{:disconnect, reason, _conn} -> {:error, reason}
{:error, %Error{code: 82}, _conn} -> {:error, :already_up}
{:error, %Error{code: 81}, _conn} -> {:error, :already_down}
{:error, reason, _conn} -> {:error, reason}
end
end
end