diff --git a/lib/ecto/adapters/sqlite3/codec.ex b/lib/ecto/adapters/sqlite3/codec.ex index fae10a4..f110a6f 100644 --- a/lib/ecto/adapters/sqlite3/codec.ex +++ b/lib/ecto/adapters/sqlite3/codec.ex @@ -68,6 +68,15 @@ defmodule Ecto.Adapters.SQLite3.Codec do end end + def date_encode(val), do: date_encode(val, :iso8601) + + def date_encode(%Date{} = val, :iso8601) do + case Date.to_iso8601(val) do + date when is_bitstring(date) -> {:ok, date} + _ -> :error + end + end + def time_decode(nil), do: {:ok, nil} def time_decode(value) do diff --git a/lib/ecto/adapters/sqlite3/data_type.ex b/lib/ecto/adapters/sqlite3/data_type.ex index f4f5cc8..f15958b 100644 --- a/lib/ecto/adapters/sqlite3/data_type.ex +++ b/lib/ecto/adapters/sqlite3/data_type.ex @@ -20,6 +20,7 @@ defmodule Ecto.Adapters.SQLite3.DataType do def column_type(:array, _opts), do: "TEXT" def column_type({:map, _}, _opts), do: "TEXT" def column_type({:array, _}, _opts), do: "TEXT" + def column_type(:date, _opts), do: "TEXT" def column_type(:utc_datetime, _opts), do: "TEXT" def column_type(:utc_datetime_usec, _opts), do: "TEXT" def column_type(:naive_datetime, _opts), do: "TEXT" diff --git a/test/ecto/adapters/sqlite3/codec_test.exs b/test/ecto/adapters/sqlite3/codec_test.exs index 922ddf0..f7bfa9e 100644 --- a/test/ecto/adapters/sqlite3/codec_test.exs +++ b/test/ecto/adapters/sqlite3/codec_test.exs @@ -176,4 +176,17 @@ defmodule Ecto.Adapters.SQLite3.CodecTest do end end end + + describe ".date_encode/2" do + setup do + [ + date: ~D[2011-01-09], + datetime: ~U[2011-01-09 08:46:08.00Z] + ] + end + + test "on %Date{} structs", %{date: date} do + {:ok, "2011-01-09"} = Codec.date_encode(date, :iso8601) + end + end end