bitwalker / bitwalker/timex_ecto

timestamptz: entity updates despite identical time

Open
#79 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Elixir
Stars
162
Forks
68
PR merge metrics
No merged PRs in 30d

Description

I expect there to be no database UPDATE when I add a date to the changeset that is identical to the one in the database, just like with native dates. However it looks like there is always an update happening. Is this a bug or am I using it wrong?

```elixir
iex|34 ▶ {:ok, some_date} = "2018-05-15T13:05:00.000+0000"|> Timex.parse!("{ISO:Extended}")|> Timex.Timezone.convert("Europe/Berlin") |> Timex.Ecto.TimestampWithTimezone.cast()
{:ok, #DateTime<2018-05-15 15:05:00.000+02:00 CEST Europe/Berlin>}
iex|35 ▶ episode = Directory.get_episode! 1
SELECT ... [1]
%Directory.Episode{
...
publication_date: #DateTime<2018-05-15 15:05:00+02:00 CEST Europe/Berlin>,
updated_at: #DateTime<2018-05-15 15:20:50Z>
}
iex|36 ▶ Directory.update_episode(episode, %{publication_date: some_date})
begin []
UPDATE "episodes" SET "publication_date" = $1, "updated_at" = $2 WHERE "id" = $3 [{{2018, 5, 15}, {13, 5, 0, 0}}, {{2018, 5, 15}, {15, 22, 4, 0}}, 1]
SELECT ...
{:ok,
%Directory.Episode{
publication_date: #DateTime<2018-05-15 15:05:00.000+02:00 CEST Europe/Berlin>,
updated_at: #DateTime<2018-05-15 15:22:04Z>
}}
```
Context (shortened):

```elixir
def update_episode(%Episode{} = episode, attrs) do
result =
episode
|> Episode.changeset(attrs)
|> Repo.update()
end
```

```elixir
defmodule Directory.Episode do
use Ecto.Schema

import Ecto.Changeset
import Ecto.Query

@timestamps_opts [
type: Timex.Ecto.DateTime,
autogenerate: {Timex.Ecto.DateTime, :autogenerate, []}
]

schema "episodes" do
field(:publication_date, Timex.Ecto.TimestampWithTimezone)

timestamps()
end

@doc false
def changeset(%Episode{} = episode, attrs) do
episode
|> cast(attrs, [
:publication_date,
])
end
end
```

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.