# Squirrelix v0.4.0 - Table of Contents

> Generates typed Elixir query modules from plain SQL files using Postgres inference or static metadata.

## Pages

- [🐿️ Squirrelix — type-safe SQL in Elixir](readme.md)
- [Changelog](changelog.md)
- [Squirrelix Roadmap](roadmap.md)

- Guides
  - [Getting Started](getting_started.md)
  - [Writing Queries](writing_queries.md)
  - [Types](types.md)
  - [Configuration](configuration.md)
  - [Phoenix + CI Cookbook](phoenix.md)

## Modules

- [Squirrelix.CodegenCheckSummary](Squirrelix.CodegenCheckSummary.md): Summary of a generated query-module check pass.

- [Squirrelix.CodegenSummary](Squirrelix.CodegenSummary.md): Summary of a generated query-module write pass.

- [Squirrelix.Column](Squirrelix.Column.md): A returned SQL column.

- [Squirrelix.Error](Squirrelix.Error.md): Formatting and normalization helpers for Squirrelix errors.
- [Squirrelix.Error.CannotConnectToPostgres](Squirrelix.Error.CannotConnectToPostgres.md): Error returned when Squirrelix cannot connect to Postgres for inference.
- [Squirrelix.Error.CannotOverwriteFile](Squirrelix.Error.CannotOverwriteFile.md): Error returned when a generated file would overwrite human-written code.

- [Squirrelix.Error.CannotReadFile](Squirrelix.Error.CannotReadFile.md): Error returned when a file cannot be read.

- [Squirrelix.Error.CannotWriteFile](Squirrelix.Error.CannotWriteFile.md): Error returned when generated content cannot be written.

- [Squirrelix.Error.DuplicateReturnColumns](Squirrelix.Error.DuplicateReturnColumns.md): Error returned when a query result contains duplicate column names.

- [Squirrelix.Error.InvalidQueryMetadataFile](Squirrelix.Error.InvalidQueryMetadataFile.md): Error returned when a query metadata file cannot be evaluated to a metadata map.

- [Squirrelix.Error.MissingPostgresColumn](Squirrelix.Error.MissingPostgresColumn.md): Error returned when query inference references a column Postgres cannot find.

- [Squirrelix.Error.MissingPostgresConstraint](Squirrelix.Error.MissingPostgresConstraint.md): Error returned when query inference references a constraint Postgres cannot find.

- [Squirrelix.Error.MissingPostgresTable](Squirrelix.Error.MissingPostgresTable.md): Error returned when query inference references a table Postgres cannot find.

- [Squirrelix.Error.MissingQueryMetadata](Squirrelix.Error.MissingQueryMetadata.md): Error returned when no parameter and return metadata is available for a query.

- [Squirrelix.Error.MissingQueryMetadataField](Squirrelix.Error.MissingQueryMetadataField.md): Error returned when query metadata is missing a required field.

- [Squirrelix.Error.OutdatedFile](Squirrelix.Error.OutdatedFile.md): Error returned when an existing generated file differs from expected output.

- [Squirrelix.Error.PostgresConnectionTimeout](Squirrelix.Error.PostgresConnectionTimeout.md): Error returned when establishing a Postgres connection times out during `--infer`.

- [Squirrelix.Error.PostgresInferenceError](Squirrelix.Error.PostgresInferenceError.md): Error returned when Postgres rejects query inference for an unclassified reason.

- [Squirrelix.Error.PostgresSyntaxError](Squirrelix.Error.PostgresSyntaxError.md): Error returned when Postgres rejects query syntax during inference.

- [Squirrelix.Error.QueryFileHasInvalidName](Squirrelix.Error.QueryFileHasInvalidName.md): Error returned when a SQL filename cannot become an Elixir function name.

- [Squirrelix.Error.QueryHasInvalidColumn](Squirrelix.Error.QueryHasInvalidColumn.md): Error returned when a query result column name cannot become an Elixir identifier.

- [Squirrelix.Error.QueryHasInvalidEnum](Squirrelix.Error.QueryHasInvalidEnum.md): Error returned when a Postgres enum has no variants.

- [Squirrelix.Error.UnsupportedPostgresType](Squirrelix.Error.UnsupportedPostgresType.md): Error returned when a Postgres type has no Elixir mapping.
- [Squirrelix.Inference.Inferrer](Squirrelix.Inference.Inferrer.md): Behaviour for modules that infer SQL query parameters and returned columns.
- [Squirrelix.Parameter](Squirrelix.Parameter.md): A typed SQL parameter in query order.

- Core API
  - [Squirrelix](Squirrelix.md): Elixir-native SQL query code generation for Mix projects.
  - [Squirrelix.CLI](Squirrelix.CLI.md): Project discovery and PostgreSQL connection helpers.
  - [Squirrelix.Project](Squirrelix.Project.md): Locates an Elixir Mix project and derives module names for generated SQL code.

- Query discovery
  - [Squirrelix.Query](Squirrelix.Query.md): Parses Squirrel SQL query files into Elixir structs.

  - [Squirrelix.QueryDirectory](Squirrelix.QueryDirectory.md): Parsed queries and query-file errors for one SQL directory.

  - [Squirrelix.SQL](Squirrelix.SQL.md): SQL helpers used by query analysis and code generation.

  - [Squirrelix.TypedQuery](Squirrelix.TypedQuery.md): A query annotated with parameter and return column metadata.

  - [Squirrelix.TypedQueryDirectory](Squirrelix.TypedQueryDirectory.md): Typed queries grouped by the SQL directory they came from.

- Inference
  - [Squirrelix.ConnectionOptions](Squirrelix.ConnectionOptions.md): PostgreSQL connection settings for Squirrelix.
  - [Squirrelix.Inference](Squirrelix.Inference.md): Converts parsed query directories into typed query directories using an inferrer callback.
  - [Squirrelix.Metadata](Squirrelix.Metadata.md): Loads and writes Elixir query metadata files for the current code generation pipeline.
  - [Squirrelix.Postgres](Squirrelix.Postgres.md): Postgrex-backed query inferrer for Squirrelix inference.

  - [Squirrelix.TypeMapper](Squirrelix.TypeMapper.md): Maps Postgres type names into Squirrelix's Elixir type metadata and typespecs.

- Codegen
  - [Squirrelix.Codegen](Squirrelix.Codegen.md): Generates Elixir modules for typed SQL queries.
  - [Squirrelix.Output](Squirrelix.Output.md): Safe output-file writing for generated code.

## Mix Tasks

- Mix tasks
  - [mix squirrelix.check](Mix.Tasks.Squirrelix.Check.md): Verifies generated query modules are up to date without writing files.
  - [mix squirrelix.gen](Mix.Tasks.Squirrelix.Gen.md): Generates Elixir query modules from SQL files in the current Mix project.

