Squirrelix.Codegen (Squirrelix v0.4.0)

Copy Markdown View Source

Generates Elixir modules for typed SQL queries.

Produces per-query row @type definitions, @spec-annotated functions, and runtime encode/decode helpers. Each query gets a raising function and an additive soft companion (<name>_ok/arity) that returns {:ok, result} | {:error, Exception.t()}. Soft command companions return {:ok, num_rows}. See Writing Queries and Types for conventions and type mapping.

Summary

Functions

check_directories(root, directories, opts \\ [])

@spec check_directories(Path.t(), [Squirrelix.TypedQueryDirectory.t()], keyword()) ::
  [
    {Path.t(), :ok | {:error, :invalid_sql_directory | struct()},
     non_neg_integer()}
  ]

check_directory(root, sql_directory, queries, opts \\ [])

@spec check_directory(Path.t(), Path.t(), [Squirrelix.TypedQuery.t()], keyword()) ::
  :ok | {:error, :invalid_sql_directory | struct()}

generate_module(module, queries, opts \\ [])

@spec generate_module(module(), [Squirrelix.TypedQuery.t()], keyword()) :: String.t()

summarize_check_outcomes(outcomes)

@spec summarize_check_outcomes([
  {Path.t(), :ok | {:error, term()}, non_neg_integer()}
]) ::
  Squirrelix.CodegenCheckSummary.t()

summarize_write_outcomes(outcomes)

@spec summarize_write_outcomes([
  {Path.t(), :ok | {:error, term()}, non_neg_integer()}
]) ::
  Squirrelix.CodegenSummary.t()

write_directories(root, directories, opts \\ [])

@spec write_directories(Path.t(), [Squirrelix.TypedQueryDirectory.t()], keyword()) ::
  [
    {Path.t(), :ok | {:error, :invalid_sql_directory | struct()},
     non_neg_integer()}
  ]

write_directory(root, sql_directory, queries, opts \\ [])

@spec write_directory(Path.t(), Path.t(), [Squirrelix.TypedQuery.t()], keyword()) ::
  :ok | {:error, :invalid_sql_directory | struct()}