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):
- Explicit CLI flag overrides (
--hostname,--database, …) --urlDATABASE_URLPG*/PGSSLMODEenvironment variables- Built-in defaults
Summary
Functions
Recursively finds sql/ directories and their .sql files under path.
Resolves connection options from environment and Mix/CLI opts.
Types
Functions
@spec connection_options_from_variables(map(), String.t() | nil) :: Squirrelix.ConnectionOptions.t()
@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.
@spec parse_connection_url(String.t()) :: {:ok, Squirrelix.ConnectionOptions.t()} | {:error, :invalid_url}
@spec query_directories(Path.t()) :: [Squirrelix.QueryDirectory.t()]
@spec query_files(Path.t()) :: discovered_sql_files()
@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 → :url → DATABASE_URL → PG* →
defaults.