We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent e440662 commit 1e0665fCopy full SHA for 1e0665f
lib/sqlite_ecto/connection.ex
@@ -276,12 +276,16 @@ if Code.ensure_loaded?(Sqlitex.Server) do
276
[?\s | intersperse_map(joins, ?\s, fn
277
%JoinExpr{on: %QueryExpr{expr: expr}, qual: qual, ix: ix, source: source} ->
278
{join, name} = get_source(query, sources, ix, source)
279
- [join_qual(qual), join, " AS ", name, " ON " | expr(expr, sources, query)]
+ [join_qual(qual), join, " AS ", name, join_on(qual, expr, sources, query)]
280
end)]
281
end
282
283
+ defp join_on(:cross, true, _sources, _query), do: []
284
+ defp join_on(_qual, expr, sources, query), do: [" ON " | expr(expr, sources, query)]
285
+
286
defp join_qual(:inner), do: "INNER JOIN "
287
defp join_qual(:left), do: "LEFT JOIN "
288
+ defp join_qual(:cross), do: "CROSS JOIN "
289
defp join_qual(mode), do: raise ArgumentError, "join `#{inspect mode}` not supported by SQLite"
290
291
defp where(%Query{wheres: wheres} = query, sources) do
test/sqlite_ecto_test.exs
@@ -660,10 +660,9 @@ defmodule Sqlite.Ecto2.Test do
660
661
662
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
+ query = from(p in Schema, cross_join: c in Schema2, select: {p.id, c.id}) |> normalize()
+ assert all(query) ==
+ "SELECT s0.\"id\", s1.\"id\" FROM \"schema\" AS s0 CROSS JOIN \"schema2\" AS s1"
667
668
669
test "join produces correct bindings" do
0 commit comments