Packages
ecto
2.0.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/sql/subquery.exs
Code.require_file "../support/types.exs", __DIR__
defmodule Ecto.Integration.SubQueryTest do
use Ecto.Integration.Case, async: true
alias Ecto.Integration.TestRepo
import Ecto.Query
alias Ecto.Integration.Post
alias Ecto.Integration.Comment
test "from: subqueries with select source" do
TestRepo.insert!(%Post{text: "hello", public: true})
query = from p in Post, select: p
assert ["hello"] =
TestRepo.all(from p in subquery(query), select: p.text)
assert [%Post{inserted_at: %Ecto.DateTime{}}] =
TestRepo.all(from p in subquery(query), select: p)
end
test "from: subqueries with select expression" do
TestRepo.insert!(%Post{text: "hello", public: true})
query = from p in Post, select: {p.text, p.public}
assert ["hello"] =
TestRepo.all(from p in subquery(query), select: p.text)
assert [{"hello", true}] =
TestRepo.all(from p in subquery(query), select: p)
assert [{"hello", {"hello", true}}] =
TestRepo.all(from p in subquery(query), select: {p.text, p})
assert [{{"hello", true}, true}] =
TestRepo.all(from p in subquery(query), select: {p, p.public})
end
test "from: subqueries with aggregates" do
TestRepo.insert!(%Post{visits: 10})
TestRepo.insert!(%Post{visits: 11})
TestRepo.insert!(%Post{visits: 13})
query = from p in Post, select: [:visits], order_by: [asc: :visits]
assert [13] = TestRepo.all(from p in subquery(query), select: max(p.visits))
query = from p in Post, select: [:visits], order_by: [asc: :visits], limit: 2
assert [11] = TestRepo.all(from p in subquery(query), select: max(p.visits))
query = from p in Post, order_by: [asc: :visits]
assert [13] = TestRepo.all(from p in subquery(query), select: max(p.visits))
query = from p in Post, order_by: [asc: :visits], limit: 2
assert [11] = TestRepo.all(from p in subquery(query), select: max(p.visits))
end
test "from: subqueries with parameters" do
TestRepo.insert!(%Post{visits: 10, text: "hello"})
TestRepo.insert!(%Post{visits: 11, text: "hello"})
TestRepo.insert!(%Post{visits: 13, text: "world"})
query = from p in Post, where: p.visits >= ^11 and p.visits <= ^13
query = from p in subquery(query), where: p.text == ^"hello", select: fragment("? + ?", p.visits, ^1)
assert [12] = TestRepo.all(query)
end
test "join: subqueries with select source" do
%{id: id} = TestRepo.insert!(%Post{text: "hello", public: true})
TestRepo.insert!(%Comment{post_id: id})
query = from p in Post, select: p
assert ["hello"] =
TestRepo.all(from c in Comment, join: p in subquery(query), on: c.post_id == p.id, select: p.text)
assert [%Post{inserted_at: %Ecto.DateTime{}}] =
TestRepo.all(from c in Comment, join: p in subquery(query), on: c.post_id == p.id, select: p)
end
test "join: subqueries with parameters" do
TestRepo.insert!(%Post{visits: 10, text: "hello"})
TestRepo.insert!(%Post{visits: 11, text: "hello"})
TestRepo.insert!(%Post{visits: 13, text: "world"})
TestRepo.insert!(%Comment{})
TestRepo.insert!(%Comment{})
query = from p in Post, where: p.visits >= ^11 and p.visits <= ^13
query = from c in Comment,
join: p in subquery(query),
where: p.text == ^"hello",
select: fragment("? + ?", p.visits, ^1)
assert [12, 12] = TestRepo.all(query)
end
end