50 lines
1.3 KiB
Elixir
50 lines
1.3 KiB
Elixir
defmodule Plausible.MigrationUtils do
|
|
@moduledoc """
|
|
Base module for to use in Clickhouse migrations
|
|
"""
|
|
|
|
use Plausible
|
|
|
|
alias Plausible.IngestRepo
|
|
|
|
def on_cluster_statement(table) do
|
|
if(IngestRepo.clustered_table?(table), do: "ON CLUSTER '{cluster}'", else: "")
|
|
end
|
|
|
|
# See https://clickhouse.com/docs/en/sql-reference/dictionaries#clickhouse for context
|
|
def dictionary_connection_params() do
|
|
IngestRepo.config()
|
|
|> Enum.map(fn
|
|
{:database, database} -> "DB '#{database}'"
|
|
{:username, username} -> "USER '#{username}'"
|
|
{:password, password} -> "PASSWORD '#{password}'"
|
|
_ -> nil
|
|
end)
|
|
|> Enum.reject(&is_nil/1)
|
|
|> Enum.join(" ")
|
|
end
|
|
|
|
def table_settings() do
|
|
IngestRepo.config()
|
|
|> Keyword.get(:table_settings)
|
|
|> Enum.reject(fn {_, v} -> is_nil(v) end)
|
|
end
|
|
|
|
def table_settings_expr(type \\ :prefix) do
|
|
expr = Enum.map_join(table_settings(), ", ", fn {k, v} -> "#{k} = #{encode(v)}" end)
|
|
|
|
case {table_settings(), type} do
|
|
{[], _} -> ""
|
|
{_, :prefix} -> "SETTINGS #{expr}"
|
|
{_, :suffix} -> ", #{expr}"
|
|
end
|
|
end
|
|
|
|
def enterprise_edition?(), do: ee?()
|
|
|
|
def community_edition?(), do: ce?()
|
|
|
|
defp encode(value) when is_number(value), do: value
|
|
defp encode(value) when is_binary(value), do: "'#{value}'"
|
|
end
|