Trying to wrap existing Date
to support infinity
special value
Ecto: 2.2.9
Implemented this
defmodule Utils.Ecto.Types.Date do
@behaviour Ecto.Type
@doc false
def type, do: :date
@doc false
def cast("infinity"), do: {:ok, :"infinity"}
def cast("-infinity"), do: {:ok, :"-infinity"}
def cast(value), do: Ecto.Type.cast(:date, value)
@doc false
def load("infinity"), do: {:ok, :infinity}
def load("-infinity"), do: {:ok, :"-infinity"}
def load(value), do: Ecto.Type.load(:date, value, nil)
@doc false
def dump(:infinity), do: {:ok, "infinity"}
def dump(:"-infinity"), do: {:ok, "-infinity"}
def dump(value), do: Ecto.Type.dump(:date, value, nil)
end
When trying to insert a record getting
1) test support infinite values (FooBar.Hello)
test/foo_bar/hello_test.exs:63
** (CaseClauseError) no case clause matching: {"-infinity"}
stacktrace:
(foo_bar) lib/ecto/types/date.ex:715: FooBar.PostgresTypes.encode_params/3
(postgrex) lib/postgrex/query.ex:45: DBConnection.Query.Postgrex.Query.encode/3
(db_connection) lib/db_connection.ex:1079: DBConnection.describe_run/5
(db_connection) lib/db_connection.ex:1150: anonymous fn/4 in DBConnection.run_meter/5
(db_connection) lib/db_connection.ex:592: DBConnection.prepare_execute/4
(ecto) lib/ecto/adapters/postgres/connection.ex:86: Ecto.Adapters.Postgres.Connection.execute/4
(ecto) lib/ecto/adapters/sql.ex:256: Ecto.Adapters.SQL.sql_call/6
(ecto) lib/ecto/adapters/sql.ex:542: Ecto.Adapters.SQL.struct/8
(ecto) lib/ecto/repo/schema.ex:547: Ecto.Repo.Schema.apply/4
(ecto) lib/ecto/repo/schema.ex:213: anonymous fn/14 in Ecto.Repo.Schema.do_insert/4
(ecto) lib/ecto/association.ex:556: Ecto.Association.Has.on_repo_change/4
(ecto) lib/ecto/association.ex:338: anonymous fn/7 in Ecto.Association.on_repo_change/6
(elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
(ecto) lib/ecto/association.ex:335: Ecto.Association.on_repo_change/6
(elixir) lib/enum.ex:1899: Enum."-reduce/3-lists^foldl/2-0-"/3
(ecto) lib/ecto/association.ex:301: Ecto.Association.on_repo_change/3
(ecto) lib/ecto/repo/schema.ex:708: Ecto.Repo.Schema.process_children/4
(ecto) lib/ecto/repo/schema.ex:774: anonymous fn/3 in Ecto.Repo.Schema.wrap_in_transaction/6
(db_connection) lib/db_connection.ex:1374: DBConnection.transaction_nested/2
(db_connection) lib/db_connection.ex:1234: DBConnection.transaction_meter/3
Tried to read the source but it is too much metacode inside which I can’t understand.