View Source PgRanges behaviour (PgRanges v1.1.1)

PgRanges provides a simple wrapper around Postgrex.Range so that you can create schemas with range type fields and use the native range type in migrations.

defmodule MyApp.Employee do
  use Ecto.Schema
  alias PgRanges.DateRange

  schema "employees" do
    field :name, :string
    field :employed_dates, DateRange
  end
end

defmodule MyApp.Repo.Migrations.CreateEmployees do
  use Ecto.Migration

  def change do
    create table(:employees) do
      add :name, :string
      add :employed_dates, :daterange
    end
  end
end

When used in composing queries, you must cast to the PgRange type.

import Ecto.Query
alias PgRanges.DateRange
alias MyApp.Repo

range = DateRange.new(~D[2018-11-01], ~D[2019-01-01])

Repo.all(
  from e in Employee,
  where: fragment("? @> ?", e.employed_dates, type(^range, DateRange))
)

Summary

Callbacks

Link to this callback

from_postgrex(any)

View Source (optional)
@callback from_postgrex(any()) :: any()
Link to this callback

new(lower, upper)

View Source (optional)
@callback new(lower :: any(), upper :: any()) :: any()
Link to this callback

new(any, any, any)

View Source (optional)
@callback new(any(), any(), any()) :: any()
Link to this callback

to_postgrex(any)

View Source (optional)
@callback to_postgrex(any()) :: any()