File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -82,8 +82,7 @@ defmodule AshSql.Join do
8282 parent_query ,
8383 no_inner_join?
8484 ) do
85- no_inner_join? =
86- no_inner_join? || query . __ash_bindings__ . context [ :data_layer ] [ :no_inner_join? ]
85+ no_inner_join? = left_join_only? ( query , opts , no_inner_join? )
8786
8887 case join_parent_paths ( query , filter , relationship_paths ) do
8988 { :ok , query } ->
@@ -228,6 +227,12 @@ defmodule AshSql.Join do
228227 end
229228 end
230229
230+ @ doc false
231+ def left_join_only? ( query , opts , explicit? ) do
232+ explicit? || query . __ash_bindings__ . context [ :data_layer ] [ :no_inner_join? ] ||
233+ opts [ :left_only? ] || false
234+ end
235+
231236 @ doc false
232237 def parent_expr ( filter ) do
233238 filter
Original file line number Diff line number Diff line change 1+ # SPDX-FileCopyrightText: 2024 ash_sql contributors <https://github.com/ash-project/ash_sql/graphs/contributors>
2+ #
3+ # SPDX-License-Identifier: MIT
4+
5+ defmodule AshSql.JoinTest do
6+ use ExUnit.Case , async: true
7+
8+ alias AshSql.Join
9+
10+ defp query ( data_layer_context \\ % { } ) do
11+ % { __ash_bindings__: % { context: % { data_layer: data_layer_context } } }
12+ end
13+
14+ describe "left_join_only?/3" do
15+ test "a select-context join is never inner joined" do
16+ assert Join . left_join_only? ( query ( ) , [ left_only?: true ] , false )
17+ end
18+
19+ test "a filter-context join may still be inner joined" do
20+ refute Join . left_join_only? ( query ( ) , [ ] , false )
21+ end
22+
23+ test "the data layer context can force left joins" do
24+ assert Join . left_join_only? ( query ( % { no_inner_join?: true } ) , [ ] , false )
25+ end
26+
27+ test "an explicit no_inner_join? forces left joins" do
28+ assert Join . left_join_only? ( query ( ) , [ ] , true )
29+ end
30+
31+ test "returns a boolean rather than nil" do
32+ assert Join . left_join_only? ( query ( ) , [ ] , false ) == false
33+ end
34+ end
35+ end
You can’t perform that action at this time.
0 commit comments