Squirrelix.CLI (Squirrelix v0.4.0)

Copy Markdown View Source

Project discovery and PostgreSQL connection helpers.

This module mirrors upstream Squirrel CLI behaviour using Elixir data structures: maps for discovered files, structs for connection options, and {:ok, _} / {:error, reason} tuples for fallible operations.

Connection resolution precedence (highest first):

  1. Explicit CLI flag overrides (--hostname, --database, …)
  2. --url
  3. DATABASE_URL
  4. PG* / PGSSLMODE environment variables
  5. Built-in defaults

Summary

Types

discovered_sql_files()

@type discovered_sql_files() :: %{required(Path.t()) => [Path.t()]}

Functions

connection_options_from_variables(env, project_name)

@spec connection_options_from_variables(map(), String.t() | nil) ::
  Squirrelix.ConnectionOptions.t()

directory_to_output_file(directory)

@spec directory_to_output_file(String.t()) :: String.t()

discover_sql_directories(path)

@spec discover_sql_directories(Path.t()) :: discovered_sql_files()

Recursively finds sql/ directories and their .sql files under path.

Returns a map of directory paths to sorted SQL file paths.

parse_connection_url(raw)

@spec parse_connection_url(String.t()) ::
  {:ok, Squirrelix.ConnectionOptions.t()} | {:error, :invalid_url}

query_directories(root)

@spec query_directories(Path.t()) :: [Squirrelix.QueryDirectory.t()]

query_files(root)

@spec query_files(Path.t()) :: discovered_sql_files()

resolve_connection_options(env, opts \\ [])

@spec resolve_connection_options(
  map(),
  keyword()
) :: {:ok, Squirrelix.ConnectionOptions.t()} | {:error, :invalid_url}

Resolves connection options from environment and Mix/CLI opts.

Precedence (highest first): flag overrides → :urlDATABASE_URLPG* → defaults.