Skip to content

Commit 1e0665f

Browse files
adamzapasnikConnorRigby
authored andcommitted
Add cross join
1 parent e440662 commit 1e0665f

File tree

2 files changed

+8
-5
lines changed

2 files changed

+8
-5
lines changed

lib/sqlite_ecto/connection.ex

+5-1
Original file line numberDiff line numberDiff line change
@@ -276,12 +276,16 @@ if Code.ensure_loaded?(Sqlitex.Server) do
276276
[?\s | intersperse_map(joins, ?\s, fn
277277
%JoinExpr{on: %QueryExpr{expr: expr}, qual: qual, ix: ix, source: source} ->
278278
{join, name} = get_source(query, sources, ix, source)
279-
[join_qual(qual), join, " AS ", name, " ON " | expr(expr, sources, query)]
279+
[join_qual(qual), join, " AS ", name, join_on(qual, expr, sources, query)]
280280
end)]
281281
end
282282

283+
defp join_on(:cross, true, _sources, _query), do: []
284+
defp join_on(_qual, expr, sources, query), do: [" ON " | expr(expr, sources, query)]
285+
283286
defp join_qual(:inner), do: "INNER JOIN "
284287
defp join_qual(:left), do: "LEFT JOIN "
288+
defp join_qual(:cross), do: "CROSS JOIN "
285289
defp join_qual(mode), do: raise ArgumentError, "join `#{inspect mode}` not supported by SQLite"
286290

287291
defp where(%Query{wheres: wheres} = query, sources) do

test/sqlite_ecto_test.exs

+3-4
Original file line numberDiff line numberDiff line change
@@ -660,10 +660,9 @@ defmodule Sqlite.Ecto2.Test do
660660
end
661661

662662
test "cross join" do
663-
assert_raise ArgumentError, "join `:cross` not supported by SQLite", fn ->
664-
query = from(p in Schema, cross_join: c in Schema2, select: {p.id, c.id}) |> normalize()
665-
all(query)
666-
end
663+
query = from(p in Schema, cross_join: c in Schema2, select: {p.id, c.id}) |> normalize()
664+
assert all(query) ==
665+
"SELECT s0.\"id\", s1.\"id\" FROM \"schema\" AS s0 CROSS JOIN \"schema2\" AS s1"
667666
end
668667

669668
test "join produces correct bindings" do

0 commit comments

Comments
 (0)