Packages
ecto
2.2.6
3.14.1
3.14.0
3.13.6
3.13.5
3.13.4
3.13.3
3.13.2
3.13.1
3.13.0
3.12.6
3.12.5
3.12.4
3.12.3
3.12.2
3.12.1
3.12.0
3.11.2
3.11.1
3.11.0
3.10.3
3.10.2
3.10.1
3.10.0
3.9.6
3.9.5
3.9.4
3.9.3
3.9.2
3.9.1
3.9.0
3.8.4
3.8.3
3.8.2
3.8.1
3.8.0
3.7.2
3.7.1
3.7.0
3.6.2
3.6.1
3.6.0
3.5.8
3.5.7
3.5.6
3.5.5
3.5.4
3.5.3
3.5.2
3.5.1
3.5.0
3.5.0-rc.1
3.5.0-rc.0
3.4.6
3.4.5
3.4.4
3.4.3
3.4.2
3.4.1
3.4.0
3.3.4
3.3.3
3.3.2
3.3.1
3.3.0
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
3.1.7
3.1.6
3.1.5
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.1
3.0.0-rc.0
2.2.12
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.2.0-rc.1
2.2.0-rc.0
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.1.0-rc.5
2.1.0-rc.4
2.1.0-rc.3
2.1.0-rc.2
2.1.0-rc.1
2.1.0-rc.0
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
2.0.1
2.0.0
2.0.0-rc.6
2.0.0-rc.5
2.0.0-rc.4
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
2.0.0-beta.2
2.0.0-beta.1
2.0.0-beta.0
1.1.9
1.1.8
1.1.7
1.1.6
1.1.5
1.1.4
1.1.3
1.1.2
1.1.1
1.1.0
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.16.0
0.15.0
0.14.3
0.14.2
0.14.1
0.14.0
0.13.1
0.13.0
0.12.1
0.12.0
0.12.0-rc
0.11.3
0.11.2
0.11.1
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.0
A toolkit for data mapping and language integrated query for Elixir
Current section
Files
Jump to
Current section
Files
lib/ecto/data_type.ex
defprotocol Ecto.DataType do
@moduledoc """
Casts and dumps a given struct into an Ecto type.
While `Ecto.Type` allows developers to cast/load/dump
any value from the storage into the struct based on the
schema, `Ecto.DataType` allows developers to convert
existing data types into primitive Ecto types without
the schema information.
For example, Elixir's native `Date` struct implements
the Ecto.DataType protocol so it is properly converted
to a tuple when directly passed to adapters:
defimpl Ecto.DataType, for: Date do
def dump(%Date{day: day, month: month, year: year}) do
{:ok, {year, month, day}}
end
end
"""
@fallback_to_any true
@doc """
Invoked when the data structure has not been dumped along
the way and must fallback to its database representation.
"""
@spec dump(term) :: {:ok, term} | :error
def dump(value)
end
defimpl Ecto.DataType, for: Any do
# The default representation is itself, which
# means we are delegating to the database. If
# the database does not support, it will raise.
def dump(value) do
{:ok, value}
end
end
defimpl Ecto.DataType, for: List do
def dump(list), do: dump(list, [])
defp dump([h|t], acc) do
case Ecto.DataType.dump(h) do
{:ok, h} -> dump(t, [h|acc])
:error -> :error
end
end
defp dump([], acc) do
{:ok, Enum.reverse(acc)}
end
end
defimpl Ecto.DataType, for: NaiveDateTime do
def dump(%NaiveDateTime{year: year, month: month, day: day,
hour: hour, minute: minute, second: second, microsecond: {usec, _}}) do
{:ok, {{year, month, day}, {hour, minute, second, usec}}}
end
end
defimpl Ecto.DataType, for: DateTime do
def dump(%DateTime{year: year, month: month, day: day, time_zone: "Etc/UTC",
hour: hour, minute: minute, second: second, microsecond: {usec, _}}) do
{:ok, {{year, month, day}, {hour, minute, second, usec}}}
end
end
defimpl Ecto.DataType, for: Date do
def dump(%Date{year: year, month: month, day: day}) do
{:ok, {year, month, day}}
end
end
defimpl Ecto.DataType, for: Time do
def dump(%Time{hour: hour, minute: minute, second: second, microsecond: {usec, _}}) do
{:ok, {hour, minute, second, usec}}
end
end