Skip to content

Commit af1d7f7

Browse files
committed
Remove calls to BSON.DateTime
* These current dumpers and loaders are not complete. I just wanted to be able to run the tests
1 parent 59df220 commit af1d7f7

2 files changed

Lines changed: 43 additions & 26 deletions

File tree

lib/mongo_ecto.ex

Lines changed: 42 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -437,22 +437,22 @@ defmodule Mongo.Ecto do
437437
def loaders(:binary, type), do: [&load_binary/1, type]
438438
def loaders(_base, type), do: [type]
439439

440-
defp load_time(%BSON.DateTime{} = time) do
441-
{{_,_,_}, time} = BSON.DateTime.to_datetime(time)
442-
{:ok, time}
443-
end
440+
defp load_time(time),
441+
do: Time.to_erl(time)
444442
defp load_time(_),
445443
do: :error
446444

447-
defp load_date(%BSON.DateTime{} = date) do
448-
{date, {_, _, _, _}} = BSON.DateTime.to_datetime(date)
449-
{:ok, date}
450-
end
445+
defp load_date(date),
446+
do: Date.from_erl(date)
451447
defp load_date(_),
452448
do: :error
453449

454-
defp load_datetime(%BSON.DateTime{} = datetime),
455-
do: {:ok, BSON.DateTime.to_datetime(datetime)}
450+
defp load_datetime(datetime) do
451+
naive = DateTime.to_naive(datetime)
452+
{date, {h, m, s}} = NaiveDateTime.to_erl(naive)
453+
{x, _} = naive.microsecond
454+
{:ok, {date, {h, m, s, x}}}
455+
end
456456
defp load_datetime(_),
457457
do: :error
458458

@@ -472,28 +472,45 @@ defmodule Mongo.Ecto do
472472
defp load_objectid(_), do: :error
473473

474474
@doc false
475-
def dumpers(:time, type), do: [type, &dump_time/1]
476-
def dumpers(:date, type), do: [type, &dump_date/1]
477-
def dumpers(:utc_datetime, type), do: [type, &dump_datetime/1]
478-
def dumpers(:naive_datetime, type), do: [type, &dump_datetime/1]
479-
def dumpers(:binary_id, type), do: [type, &dump_objectid/1]
480-
def dumpers(:uuid, type), do: [type, &dump_binary(&1, :uuid)]
481-
def dumpers(:binary, type), do: [type, &dump_binary(&1, :generic)]
482-
def dumpers(_base, type), do: [type]
483-
484-
defp dump_time({_, _, _, _} = time),
485-
do: {:ok, BSON.DateTime.from_datetime({{0, 0, 0}, time})}
475+
def dumpers(:time, type), do: [type, &dump_time/1]
476+
def dumpers(:date, type), do: [type, &dump_date/1]
477+
def dumpers(:utc_datetime, type), do: [type, &dump_utc_datetime/1]
478+
def dumpers(:naive_datetime, type), do: [type, &dump_naive_datetime/1]
479+
def dumpers(:binary_id, type), do: [type, &dump_objectid/1]
480+
def dumpers(:uuid, type), do: [type, &dump_binary(&1, :uuid)]
481+
def dumpers(:binary, type), do: [type, &dump_binary(&1, :generic)]
482+
def dumpers(_base, type), do: [type]
483+
484+
defp dump_time({h, m, s, _} = time),
485+
do: Time.from_erl({h, m, s})
486486
defp dump_time(_),
487487
do: :error
488488

489489
defp dump_date({_, _, _} = date),
490-
do: {:ok, BSON.DateTime.from_datetime({date, {0, 0, 0, 0}})}
490+
do: Date.from_erl!(date)
491491
defp dump_date(_),
492492
do: :error
493493

494-
defp dump_datetime({{_, _, _}, {_, _, _, _}} = datetime),
495-
do: {:ok, BSON.DateTime.from_datetime(datetime)}
496-
defp dump_datetime(_),
494+
defp dump_utc_datetime({{_, _, _} = date, {h, m, s, ms}} = v) do
495+
datetime =
496+
{date, {h, m, s}}
497+
|> NaiveDateTime.from_erl!({ms, 6})
498+
|> DateTime.from_naive!("Etc/UTC")
499+
500+
{:ok, datetime}
501+
end
502+
defp dump_utc_datetime(_),
503+
do: :error
504+
505+
defp dump_naive_datetime({{_, _, _} = date, {h, m, s, ms}} = v) do
506+
datetime =
507+
{date, {h, m, s}}
508+
|> NaiveDateTime.from_erl!({ms, 6})
509+
|> DateTime.from_naive!("Etc/UTC")
510+
511+
{:ok, datetime}
512+
end
513+
defp dump_naive_datetime(_),
497514
do: :error
498515

499516
defp dump_binary(binary, subtype) when is_binary(binary),

lib/mongo_ecto/conversions.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ defmodule Mongo.Ecto.Conversions do
6262
def from_ecto_pk(value, _pk) when is_literal(value),
6363
do: {:ok, value}
6464
def from_ecto_pk({{_,_,_},{_,_,_,_}} = value, _pk),
65-
do: Ecto.Type.adapter_dump(Mongo.Ecto, :datetime, value)
65+
do: Ecto.Type.adapter_dump(Mongo.Ecto, :naive_datetime, value)
6666
def from_ecto_pk({_,_,_} = value, _pk),
6767
do: Ecto.Type.adapter_dump(Mongo.Ecto, :date, value)
6868
def from_ecto_pk({_,_,_,_} = value, _pk),

0 commit comments

Comments
 (0)