# Squirrelix v0.5.1 - 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.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.

- Core API
  - [Squirrelix](Squirrelix.md): Elixir-native SQL query code generation for Mix projects.
  - [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.

- Inference
  - [Squirrelix.Inference.Inferrer](Squirrelix.Inference.Inferrer.md): Behaviour for modules that infer SQL query parameters and returned columns.
  - [Squirrelix.Postgres](Squirrelix.Postgres.md): Postgrex-backed query inferrer.
  - [Squirrelix.Query](Squirrelix.Query.md): A parsed SQL query file.

- Errors
  - [Squirrelix.Error](Squirrelix.Error.md): Formatting helpers for structured Squirrelix errors.

## 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.

