@@ -2216,7 +2216,9 @@ defmodule Ash.Query do
2216
2216
end
2217
2217
2218
2218
{ field , { args , load_through } } , query ->
2219
- if resource_calculation = Ash.Resource.Info . calculation ( query . resource , field ) do
2219
+ resource_calculation = Ash.Resource.Info . calculation ( query . resource , field )
2220
+
2221
+ if Ash.Resource.Calculation . can_load? ( resource_calculation ) do
2220
2222
load_resource_calculation ( query , resource_calculation , args , load_through )
2221
2223
else
2222
2224
add_error (
@@ -2232,7 +2234,15 @@ defmodule Ash.Query do
2232
2234
load_relationship ( query , rel , rest , opts )
2233
2235
2234
2236
resource_calculation = Ash.Resource.Info . calculation ( query . resource , field ) ->
2235
- load_resource_calculation ( query , resource_calculation , rest )
2237
+ if Ash.Resource.Calculation . can_load? ( resource_calculation ) do
2238
+ load_resource_calculation ( query , resource_calculation , rest )
2239
+ else
2240
+ add_error (
2241
+ query ,
2242
+ :load ,
2243
+ Ash.Error.Query.InvalidLoad . exception ( load: [ { field , rest } ] )
2244
+ )
2245
+ end
2236
2246
2237
2247
attribute = Ash.Resource.Info . attribute ( query . resource , field ) ->
2238
2248
if Ash.Type . can_load? ( attribute . type , attribute . constraints ) do
@@ -2360,11 +2370,12 @@ defmodule Ash.Query do
2360
2370
end
2361
2371
end
2362
2372
2373
+ # TODO: Remove this dead function - resource_calc_to_calc/4
2363
2374
@ doc false
2364
- def resource_calc_to_calc ( query , name , resource_calculation , args \\ % { } ) do
2375
+ def resource_calc_to_calc ( query , _name , resource_calculation , args \\ % { } ) do
2365
2376
{ name , load } =
2366
2377
case fetch_key ( args , :as ) do
2367
- :error -> { name , name }
2378
+ :error -> Ash.Resource.Calculation . query_name_and_load ( resource_calculation )
2368
2379
{ :ok , key } -> { key , nil }
2369
2380
end
2370
2381
@@ -2475,7 +2486,15 @@ defmodule Ash.Query do
2475
2486
end
2476
2487
2477
2488
resource_calculation = Ash.Resource.Info . calculation ( query . resource , field ) ->
2478
- load_resource_calculation ( query , resource_calculation , % { } )
2489
+ if Ash.Resource.Calculation . can_load? ( resource_calculation ) do
2490
+ load_resource_calculation ( query , resource_calculation , % { } )
2491
+ else
2492
+ add_error (
2493
+ query ,
2494
+ :load ,
2495
+ Ash.Error.Query.InvalidLoad . exception ( load: field )
2496
+ )
2497
+ end
2479
2498
2480
2499
true ->
2481
2500
add_error ( query , :load , Ash.Error.Query.InvalidLoad . exception ( load: field ) )
@@ -3635,14 +3654,17 @@ defmodule Ash.Query do
3635
3654
3636
3655
args = Map . put ( args , :as , as_name )
3637
3656
3638
- if resource_calculation = Ash.Resource.Info . calculation ( query . resource , calc_name ) do
3657
+ with % Ash.Resource.Calculation { } = resource_calculation <-
3658
+ Ash.Resource.Info . calculation ( query . resource , calc_name ) ,
3659
+ true <- Ash.Resource.Calculation . can_load? ( resource_calculation ) do
3639
3660
if opts [ :load_through ] do
3640
3661
load_resource_calculation ( query , resource_calculation , args )
3641
3662
else
3642
3663
load_resource_calculation ( query , resource_calculation , args , opts [ :load_through ] )
3643
3664
end
3644
3665
else
3645
- add_error ( query , "No such calculation: #{ inspect ( calc_name ) } " )
3666
+ nil -> add_error ( query , "No such calculation: #{ inspect ( calc_name ) } " )
3667
+ false -> add_error ( query , :load , Ash.Error.Query.InvalidLoad . exception ( load: calc_name ) )
3646
3668
end
3647
3669
end
3648
3670
0 commit comments