Skip to content

Commit 1fe785c

Browse files
author
William Wilkinson
committed
Add support for postgres cross lateral joins.
1 parent 1f07e7b commit 1fe785c

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

lib/ecto/adapters/postgres/connection.ex

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,7 @@ if Code.ensure_loaded?(Postgrex) do
510510
end
511511

512512
defp join_on(:cross, true, _sources, _query), do: []
513+
defp join_on(:cross_lateral, true, _sources, _query), do: []
513514
defp join_on(_qual, expr, sources, query), do: [" ON " | expr(expr, sources, query)]
514515

515516
defp join_qual(:inner), do: "INNER JOIN "
@@ -519,6 +520,7 @@ if Code.ensure_loaded?(Postgrex) do
519520
defp join_qual(:right), do: "RIGHT OUTER JOIN "
520521
defp join_qual(:full), do: "FULL OUTER JOIN "
521522
defp join_qual(:cross), do: "CROSS JOIN "
523+
defp join_qual(:cross_lateral), do: "CROSS JOIN LATERAL "
522524

523525
defp where(%{wheres: wheres} = query, sources) do
524526
boolean(" WHERE ", wheres, sources, query)

test/ecto/adapters/postgres_test.exs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,6 +1168,12 @@ defmodule Ecto.Adapters.PostgresTest do
11681168
"SELECT s0.\"id\", s1.\"id\" FROM \"schema\" AS s0 CROSS JOIN \"schema2\" AS s1"
11691169
end
11701170

1171+
test "cross lateral join" do
1172+
query = from(p in Schema, cross_lateral_join: c in Schema2, select: {p.id, c.id}) |> plan()
1173+
assert all(query) ==
1174+
"SELECT s0.\"id\", s1.\"id\" FROM \"schema\" AS s0 CROSS JOIN LATERAL \"schema2\" AS s1"
1175+
end
1176+
11711177
test "cross join with fragment" do
11721178
query = from(p in Schema, cross_join: fragment("jsonb_each(?)", p.j), select: {p.id}) |> plan()
11731179
assert all(query) ==

0 commit comments

Comments
 (0)