Popularity
3.8
Stable
Activity
6.9
Stable
15
4
4

Monthly Downloads: 330
Programming language: Elixir
License: MIT License
Latest version: v0.13.0

pillar alternatives and similar packages

Based on the "ORM and Datamapping" category

Do you think we are missing an alternative of pillar or a related project?

Add another 'ORM and Datamapping' Package

README

Pillar

Clickhouse elixir driver via HTTP connection

Coverage Status build

Usage

Direct Usage with connection structure


conn = Pillar.Connection.new("http://user:password@localhost:8123/database")

# params are passed in brackets {} in sql query, and map strtucture does fill query by values
sql = "SELECT count(*) FROM users WHERE lastname = {lastname}"

params = %{lastname: "Smith"}

{:ok, result} = Pillar.query(conn, sql, params)

result 
#=> [%{"count(*)" => 347}]

Usage with workers supervisor tree

Recommended usage, because of limited connections and supervised workers

  defmodule ClickhouseMaster do
      use Pillar, 
        connection_strings: [
          "http://user:password@host-master-1:8123/database",
          "http://user:password@host-master-2:8123/database"
        ],
        name: __MODULE__,
        pool_size: 15
  end

  ClickhouseMaster.start_link()

  {:ok, result} = ClickhouseMaster.select(sql, %{param: value})

Migrations

Migrations can be generated with mix task mix pillar.gen.migration migration_name

mix pillar.gen.migration events_table

But for launching them we have to write own task, like this:


defmodule Mix.Tasks.MigrateClickhouse do
  use Mix.Task
  def run(_args) do
    connection_string = Application.get_env(:my_project, :clickhouse_url)  
    conn = Pillar.Connection.new(connection_string)
    Pillar.Migrations.migrate(conn)
  end
end

And launch this via command

mix migrate_clickhouse

Async requests feature

  connection = Pillar.Connection.new("http://user:password@host-master-1:8123/database")

  Pillar.async_insert(connection, "INSERT INTO events (user_id, event) SELECT {user_id}, {event}", %{
    user_id: user.id,
    event: "password_changed"
  }) # => :ok

Installation

def deps do
  [
    {:pillar, "~> 0.13.0"}
  ]
end