Packages
ecto
3.3.2
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
integration_test/cases/interval.exs
defmodule Ecto.Integration.IntervalTest do
use Ecto.Integration.Case, async: Application.get_env(:ecto, :async_integration_tests, true)
alias Ecto.Integration.{Post, User, Usec}
alias Ecto.Integration.TestRepo
import Ecto.Query
@posted ~D[2014-01-01]
@inserted_at ~N[2014-01-01 02:00:00]
setup do
TestRepo.insert!(%Post{posted: @posted, inserted_at: @inserted_at})
:ok
end
test "date_add with year" do
dec = Decimal.new(1)
assert [~D[2015-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, 1, "year"))
assert [~D[2015-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, 1.0, "year"))
assert [~D[2015-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^1, "year"))
assert [~D[2015-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^1.0, "year"))
assert [~D[2015-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^dec, "year"))
end
test "date_add with month" do
dec = Decimal.new(3)
assert [~D[2014-04-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, 3, "month"))
assert [~D[2014-04-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, 3.0, "month"))
assert [~D[2014-04-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^3, "month"))
assert [~D[2014-04-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^3.0, "month"))
assert [~D[2014-04-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^dec, "month"))
end
test "date_add with week" do
dec = Decimal.new(3)
assert [~D[2014-01-22]] = TestRepo.all(from p in Post, select: date_add(p.posted, 3, "week"))
assert [~D[2014-01-22]] = TestRepo.all(from p in Post, select: date_add(p.posted, 3.0, "week"))
assert [~D[2014-01-22]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^3, "week"))
assert [~D[2014-01-22]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^3.0, "week"))
assert [~D[2014-01-22]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^dec, "week"))
end
test "date_add with day" do
dec = Decimal.new(5)
assert [~D[2014-01-06]] = TestRepo.all(from p in Post, select: date_add(p.posted, 5, "day"))
assert [~D[2014-01-06]] = TestRepo.all(from p in Post, select: date_add(p.posted, 5.0, "day"))
assert [~D[2014-01-06]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^5, "day"))
assert [~D[2014-01-06]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^5.0, "day"))
assert [~D[2014-01-06]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^dec, "day"))
end
test "date_add with hour" do
dec = Decimal.new(48)
assert [~D[2014-01-03]] = TestRepo.all(from p in Post, select: date_add(p.posted, 48, "hour"))
assert [~D[2014-01-03]] = TestRepo.all(from p in Post, select: date_add(p.posted, 48.0, "hour"))
assert [~D[2014-01-03]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^48, "hour"))
assert [~D[2014-01-03]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^48.0, "hour"))
assert [~D[2014-01-03]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^dec, "hour"))
end
test "date_add with dynamic" do
posted = @posted
assert [~D[2015-01-01]] = TestRepo.all(from p in Post, select: date_add(^posted, ^1, ^"year"))
assert [~D[2014-04-01]] = TestRepo.all(from p in Post, select: date_add(^posted, ^3, ^"month"))
assert [~D[2014-01-22]] = TestRepo.all(from p in Post, select: date_add(^posted, ^3, ^"week"))
assert [~D[2014-01-06]] = TestRepo.all(from p in Post, select: date_add(^posted, ^5, ^"day"))
assert [~D[2014-01-03]] = TestRepo.all(from p in Post, select: date_add(^posted, ^48, ^"hour"))
end
test "date_add with negative interval" do
dec = Decimal.new(-1)
assert [~D[2013-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, -1, "year"))
assert [~D[2013-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, -1.0, "year"))
assert [~D[2013-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^-1, "year"))
assert [~D[2013-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^-1.0, "year"))
assert [~D[2013-01-01]] = TestRepo.all(from p in Post, select: date_add(p.posted, ^dec, "year"))
end
test "datetime_add with year" do
dec = Decimal.new(1)
assert [~N[2015-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 1, "year"))
assert [~N[2015-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 1.0, "year"))
assert [~N[2015-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^1, "year"))
assert [~N[2015-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^1.0, "year"))
assert [~N[2015-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "year"))
end
test "datetime_add with month" do
dec = Decimal.new(3)
assert [~N[2014-04-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 3, "month"))
assert [~N[2014-04-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 3.0, "month"))
assert [~N[2014-04-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^3, "month"))
assert [~N[2014-04-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^3.0, "month"))
assert [~N[2014-04-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "month"))
end
test "datetime_add with week" do
dec = Decimal.new(3)
assert [~N[2014-01-22 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 3, "week"))
assert [~N[2014-01-22 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 3.0, "week"))
assert [~N[2014-01-22 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^3, "week"))
assert [~N[2014-01-22 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^3.0, "week"))
assert [~N[2014-01-22 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "week"))
end
test "datetime_add with day" do
dec = Decimal.new(5)
assert [~N[2014-01-06 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 5, "day"))
assert [~N[2014-01-06 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 5.0, "day"))
assert [~N[2014-01-06 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^5, "day"))
assert [~N[2014-01-06 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^5.0, "day"))
assert [~N[2014-01-06 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "day"))
end
test "datetime_add with hour" do
dec = Decimal.new(60)
assert [~N[2014-01-03 14:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 60, "hour"))
assert [~N[2014-01-03 14:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 60.0, "hour"))
assert [~N[2014-01-03 14:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^60, "hour"))
assert [~N[2014-01-03 14:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^60.0, "hour"))
assert [~N[2014-01-03 14:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "hour"))
end
test "datetime_add with minute" do
dec = Decimal.new(90)
assert [~N[2014-01-01 03:30:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 90, "minute"))
assert [~N[2014-01-01 03:30:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 90.0, "minute"))
assert [~N[2014-01-01 03:30:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^90, "minute"))
assert [~N[2014-01-01 03:30:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^90.0, "minute"))
assert [~N[2014-01-01 03:30:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "minute"))
end
test "datetime_add with second" do
dec = Decimal.new(90)
assert [~N[2014-01-01 02:01:30]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 90, "second"))
assert [~N[2014-01-01 02:01:30]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 90.0, "second"))
assert [~N[2014-01-01 02:01:30]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^90, "second"))
assert [~N[2014-01-01 02:01:30]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^90.0, "second"))
assert [~N[2014-01-01 02:01:30]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "second"))
end
@tag :uses_msec
test "datetime_add with millisecond" do
dec = Decimal.new(1500)
assert [~N[2014-01-01 02:00:01]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 1500, "millisecond"))
assert [~N[2014-01-01 02:00:01]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 1500.0, "millisecond"))
assert [~N[2014-01-01 02:00:01]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^1500, "millisecond"))
assert [~N[2014-01-01 02:00:01]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^1500.0, "millisecond"))
assert [~N[2014-01-01 02:00:01]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "millisecond"))
end
@tag :uses_usec
test "datetime_add with microsecond" do
dec = Decimal.new(1500)
assert [~N[2014-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 1500, "microsecond"))
assert [~N[2014-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, 1500.0, "microsecond"))
assert [~N[2014-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^1500, "microsecond"))
assert [~N[2014-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^1500.0, "microsecond"))
assert [~N[2014-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "microsecond"))
end
test "datetime_add with dynamic" do
inserted_at = @inserted_at
assert [~N[2015-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(^inserted_at, ^1, ^"year"))
assert [~N[2014-04-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(^inserted_at, ^3, ^"month"))
assert [~N[2014-01-22 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(^inserted_at, ^3, ^"week"))
assert [~N[2014-01-06 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(^inserted_at, ^5, ^"day"))
assert [~N[2014-01-03 14:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(^inserted_at, ^60, ^"hour"))
assert [~N[2014-01-01 03:30:00]] =
TestRepo.all(from p in Post, select: datetime_add(^inserted_at, ^90, ^"minute"))
assert [~N[2014-01-01 02:01:30]] =
TestRepo.all(from p in Post, select: datetime_add(^inserted_at, ^90, ^"second"))
end
test "datetime_add with dynamic in filters" do
inserted_at = @inserted_at
field = :inserted_at
assert [_] =
TestRepo.all(from p in Post, where: p.inserted_at > datetime_add(^inserted_at, ^-1, "year"))
assert [_] =
TestRepo.all(from p in Post, where: p.inserted_at > datetime_add(^inserted_at, -3, "month"))
assert [_] =
TestRepo.all(from p in Post, where: field(p, ^field) > datetime_add(^inserted_at, ^-3, ^"week"))
assert [_] =
TestRepo.all(from p in Post, where: field(p, ^field) > datetime_add(^inserted_at, -5, ^"day"))
end
test "datetime_add with negative interval" do
dec = Decimal.new(-1)
assert [~N[2013-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, -1, "year"))
assert [~N[2013-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, -1.0, "year"))
assert [~N[2013-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^-1, "year"))
assert [~N[2013-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^-1.0, "year"))
assert [~N[2013-01-01 02:00:00]] =
TestRepo.all(from p in Post, select: datetime_add(p.inserted_at, ^dec, "year"))
end
test "from_now" do
current = DateTime.utc_now().year
dec = Decimal.new(5)
assert [%{year: year}] = TestRepo.all(from p in Post, select: from_now(5, "year"))
assert year > current
assert [%{year: year}] = TestRepo.all(from p in Post, select: from_now(5.0, "year"))
assert year > current
assert [%{year: year}] = TestRepo.all(from p in Post, select: from_now(^5, "year"))
assert year > current
assert [%{year: year}] = TestRepo.all(from p in Post, select: from_now(^5.0, "year"))
assert year > current
assert [%{year: year}] = TestRepo.all(from p in Post, select: from_now(^dec, "year"))
assert year > current
end
test "ago" do
current = DateTime.utc_now().year
dec = Decimal.new(5)
assert [%{year: year}] = TestRepo.all(from p in Post, select: ago(5, "year"))
assert year < current
assert [%{year: year}] = TestRepo.all(from p in Post, select: ago(5.0, "year"))
assert year < current
assert [%{year: year}] = TestRepo.all(from p in Post, select: ago(^5, "year"))
assert year < current
assert [%{year: year}] = TestRepo.all(from p in Post, select: ago(^5.0, "year"))
assert year < current
assert [%{year: year}] = TestRepo.all(from p in Post, select: ago(^dec, "year"))
assert year < current
end
test "datetime_add with utc_datetime" do
{:ok, datetime} = DateTime.from_naive(@inserted_at, "Etc/UTC")
TestRepo.insert!(%User{inserted_at: datetime})
{:ok, datetime} = DateTime.from_naive(~N[2015-01-01 02:00:00], "Etc/UTC")
dec = Decimal.new(1)
assert [^datetime] =
TestRepo.all(from p in User, select: datetime_add(type(^datetime, :utc_datetime), 0, "year"))
assert [^datetime] =
TestRepo.all(from p in User, select: datetime_add(p.inserted_at, 1, "year"))
assert [^datetime] =
TestRepo.all(from p in User, select: datetime_add(p.inserted_at, 1.0, "year"))
assert [^datetime] =
TestRepo.all(from p in User, select: datetime_add(p.inserted_at, ^1, "year"))
assert [^datetime] =
TestRepo.all(from p in User, select: datetime_add(p.inserted_at, ^1.0, "year"))
assert [^datetime] =
TestRepo.all(from p in User, select: datetime_add(p.inserted_at, ^dec, "year"))
end
@tag :uses_usec
test "datetime_add with naive_datetime_usec" do
TestRepo.insert!(%Usec{naive_datetime_usec: ~N[2014-01-01 02:00:00.000001]})
dec = Decimal.new(1500)
datetime = ~N[2014-01-01 02:00:00.001501]
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(type(^datetime, :naive_datetime_usec), 0, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.naive_datetime_usec, 1500, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.naive_datetime_usec, 1500.0, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.naive_datetime_usec, ^1500, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.naive_datetime_usec, ^1500.0, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.naive_datetime_usec, ^dec, "microsecond"))
end
@tag :uses_usec
test "datetime_add with utc_datetime_usec" do
{:ok, datetime} = DateTime.from_naive(~N[2014-01-01 02:00:00.000001], "Etc/UTC")
TestRepo.insert!(%Usec{utc_datetime_usec: datetime})
{:ok, datetime} = DateTime.from_naive(~N[2014-01-01 02:00:00.001501], "Etc/UTC")
dec = Decimal.new(1500)
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(type(^datetime, :utc_datetime_usec), 0, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.utc_datetime_usec, 1500, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.utc_datetime_usec, 1500.0, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.utc_datetime_usec, ^1500, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.utc_datetime_usec, ^1500.0, "microsecond"))
assert [^datetime] =
TestRepo.all(from u in Usec, select: datetime_add(u.utc_datetime_usec, ^dec, "microsecond"))
end
end