defmodule Ecto.DateTimeRange.Operators do # @related [test](/test/ecto/date_time_range/operators_test.exs) @moduledoc """ Provides operators for querying against ranges in PostgreSQL. ## Usage ``` import Ecto.Query import Ecto.DateTimeRange.Operators now = DateTime.utc_now() from(thing in Thing, where: contains(thing.during, ^now)) ``` """ @doc """ Filter by rows where the given datetime falls within the range. ## Examples ``` from(thing in Thing, where: contains(thing.during_utc, ^DateTime.utc_now())) ``` """ defmacro contains(field, datetime) do quote do: fragment( "cast(? as timestamp with time zone) <@ ?", unquote(datetime), unquote(field) ) end end