Packages
ecto_ch
0.8.5
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
Retired package: Deprecated - This version had broken nested array param types. Please use v0.8.6 or later
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