# `Bylaw.Credo.Check.Ecto.PreferSelectOverRepoAllEnumMap`
[🔗](https://github.com/ryanzidago/bylaw/blob/v0.1.0-alpha.1/lib/bylaw/credo/check/ecto/prefer_select_over_repo_all_enum_map.ex#L1)

## Basics

> #### This check is disabled by default. {: .neutral}
>
> [Learn how to enable it](`e:credo:config_file.html#checks`) via `.credo.exs`.

This check has a base priority of `high` and works with any version of Elixir.

## Explanation

Prefer using `select` in the Ecto query over loading full rows with
`Repo.all` and then mapping them with `Enum.map` to extract fields.

## Examples

Avoid:

      query
      |> Repo.all()
      |> Enum.map(&%{role: &1.role, content: &1.content})
Prefer:

      query
      |> select([m], %{role: m.role, content: m.content})
      |> Repo.all()

This pushes the projection down to the database, reducing memory usage
and data transfer.

Cases where `Enum.map` references the full record (not just field
accesses) are allowed, since they cannot be expressed as a `select`:

      # OK - the full record is referenced
      Repo.all(query) |> Enum.map(&%{id: &1.id, record: &1})

## Notes

This check uses static AST analysis, so it favors clear source-level patterns over runtime behavior.

## Options

This check has no check-specific options. Configure it with an empty option list.

## Usage

Add this check to Credo's `checks:` list in `.credo.exs`:

```elixir
%{
  configs: [
    %{
      name: "default",
      checks: [
        {Bylaw.Credo.Check.Ecto.PreferSelectOverRepoAllEnumMap, []}
      ]
    }
  ]
}
```

## Check-Specific Parameters

*There are no specific parameters for this check.*

## General Parameters

Like with all checks, [general params](`e:credo:check_params.html`) can be applied.

Parameters can be configured via the [`.credo.exs` config file](`e:credo:config_file.html`).

---

*Consult [api-reference.md](api-reference.md) for complete listing*
