# `BroadwayPgQue.Pool`
[🔗](https://github.com/kuku/broadway_pgque/blob/v0.1.0/lib/broadway_pgque/pool.ex#L1)

Behaviour for PostgreSQL connection pooling and query execution.

Enables BroadwayPgQue to operate completely independently of Ecto, supporting:
* `BroadwayPgQue.Pool.Postgrex` - Pure Postgrex connection or dedicated pool (zero Ecto dependency).
* `BroadwayPgQue.Pool.Ecto` - Uses an existing `Ecto.Repo` pool.
* Custom pooling modules (e.g., custom DBConnection, PgBouncer pooler, or test mocks).

## Example Custom Pool

    defmodule MyCustomPool do
      @behaviour BroadwayPgQue.Pool

      @impl true
      def init(opts) do
        {:ok, opts[:conn_name]}
      end

      @impl true
      def query(conn_name, sql, params, opts) do
        Postgrex.query(conn_name, sql, params, opts)
      end
    end

# `params`

```elixir
@type params() :: [term()]
```

# `query_opts`

```elixir
@type query_opts() :: keyword()
```

# `sql`

```elixir
@type sql() :: String.t()
```

# `state`

```elixir
@type state() :: term()
```

# `init`
*optional* 

```elixir
@callback init(opts :: keyword()) :: {:ok, state()} | {:error, term()}
```

Initializes the connection pool or validates options.
Returns `{:ok, state}` or `{:error, reason}`.

# `query`

```elixir
@callback query(state(), sql(), params(), query_opts()) ::
  {:ok, Postgrex.Result.t()} | {:error, term()}
```

Executes a query using the connection pool.

---

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