Skip to content

Commit f489c96

Browse files
Plan sources before creating plan_subquery closure (#4548)
1 parent 8054c22 commit f489c96

2 files changed

Lines changed: 7 additions & 1 deletion

File tree

lib/ecto/query/planner.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,10 +221,10 @@ defmodule Ecto.Query.Planner do
221221
{planned_query :: Ecto.Query.t(), parameters :: list(), cache_key :: any()}
222222
def plan(query, operation, adapter, cte_names \\ %{}) do
223223
{query, cte_names} = plan_ctes(query, adapter, cte_names)
224+
query = plan_sources(query, adapter, cte_names)
224225
plan_subquery = &plan_subquery(&1, query, nil, adapter, false, cte_names)
225226

226227
query
227-
|> plan_sources(adapter, cte_names)
228228
|> plan_assocs()
229229
|> plan_combinations(adapter, cte_names)
230230
|> plan_expr_subqueries(:wheres, plan_subquery)

test/ecto/query/subquery_test.exs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,12 @@ defmodule Ecto.Query.SubqueryTest do
481481
assert dump_params == ["foo"]
482482
end
483483

484+
test "in query with exists" do
485+
c = from(c in "comments", where: ^"title" == parent_as(:p).title, select: 1)
486+
s = from(p in "posts", as: :p, where: exists(c), select: count())
487+
normalize(s)
488+
end
489+
484490
test "in dynamic" do
485491
c = from(c in Comment, where: c.text == ^"foo", select: c.post_id)
486492
d = dynamic([p], p.id in subquery(c))

0 commit comments

Comments
 (0)