Current section
Files
Jump to
Current section
Files
lib/mix/tasks/ash_clickhouse.setup.ex
defmodule Mix.Tasks.AshClickhouse.Setup do
@moduledoc """
Creates the ClickHouse database for the configured repo.
mix ash_clickhouse.setup
"""
use Mix.Task
@impl Mix.Task
def run(_args) do
Mix.Task.run("compile")
repos = find_repos()
if repos == [] do
Mix.shell().info("No AshClickhouse.Repo modules found.")
:ok
else
Enum.each(repos, fn repo ->
case repo.create_database() do
{:ok, _} -> Mix.shell().info("Created database for #{inspect(repo)}.")
{:error, reason} -> Mix.shell().error("Failed: #{inspect(reason)}")
end
end)
end
end
defp find_repos do
modules = Mix.Project.config()[:app] && Application.spec(Mix.Project.config()[:app], :modules)
modules = modules || []
Enum.filter(modules, fn mod -> function_exported?(mod, :__ash_clickhouse_repo__, 0) end)
rescue
_ -> []
end
end