@@ -759,7 +759,7 @@ defmodule AshPostgres.DataLayer do
759
759
query ,
760
760
AshSql . repo_opts ( repo , AshPostgres.SqlImplementation , nil , nil , resource )
761
761
)
762
- |> remap_mapped_fields ( query ) }
762
+ |> AshSql.Query . remap_mapped_fields ( query ) }
763
763
end )
764
764
end
765
765
rescue
@@ -942,7 +942,7 @@ defmodule AshPostgres.DataLayer do
942
942
path
943
943
) do
944
944
{ calculations_require_rewrite , aggregates_require_rewrite , query } =
945
- rewrite_nested_selects ( query )
945
+ AshSql.Query . rewrite_nested_selects ( query )
946
946
947
947
case lateral_join_query (
948
948
query ,
@@ -964,7 +964,11 @@ defmodule AshPostgres.DataLayer do
964
964
lateral_join_query ,
965
965
AshSql . repo_opts ( repo , AshPostgres.SqlImplementation , nil , nil , source_resource )
966
966
)
967
- |> remap_mapped_fields ( query , calculations_require_rewrite , aggregates_require_rewrite )
967
+ |> AshSql.Query . remap_mapped_fields (
968
+ query ,
969
+ calculations_require_rewrite ,
970
+ aggregates_require_rewrite
971
+ )
968
972
969
973
{ :ok , results }
970
974
@@ -973,100 +977,6 @@ defmodule AshPostgres.DataLayer do
973
977
end
974
978
end
975
979
976
- defp rewrite_nested_selects ( query ) do
977
- case query . select do
978
- % Ecto.Query.SelectExpr {
979
- expr:
980
- { :merge , [ ] ,
981
- [
982
- { :& , [ ] , [ 0 ] } ,
983
- { :%{} , [ ] , merging }
984
- ] }
985
- } = select ->
986
- { merging , aggregate_merges } = remap_sub_select ( merging , :aggregates )
987
-
988
- { new_sub_selects , calculation_merges } =
989
- remap_sub_select ( merging , :calculations )
990
-
991
- new_query =
992
- % {
993
- query
994
- | select: % { select | expr: { :merge , [ ] , [ { :& , [ ] , [ 0 ] } , { :%{} , [ ] , new_sub_selects } ] } }
995
- }
996
-
997
- { calculation_merges , aggregate_merges , new_query }
998
-
999
- _ ->
1000
- { % { } , % { } , query }
1001
- end
1002
- end
1003
-
1004
- # sobelow_skip ["DOS.StringToAtom"]
1005
- defp remap_sub_select ( merging , sub_key ) do
1006
- case Keyword . fetch ( merging , sub_key ) do
1007
- { :ok , { :%{} , [ ] , nested } } ->
1008
- Enum . reduce ( nested , { Keyword . delete ( merging , sub_key ) , % { } } , fn { name , expr } ,
1009
- { subselect , remapping } ->
1010
- new_name = String . to_atom ( "__#{ sub_key } __#{ name } " )
1011
- { Keyword . put ( subselect , new_name , expr ) , Map . put ( remapping , new_name , name ) }
1012
- end )
1013
-
1014
- :error ->
1015
- { merging , % { } }
1016
- end
1017
- end
1018
-
1019
- defp remap_mapped_fields (
1020
- results ,
1021
- query ,
1022
- calculations_require_rewrite \\ % { } ,
1023
- aggregates_require_rewrite \\ % { }
1024
- ) do
1025
- calculation_names = query . __ash_bindings__ . calculation_names
1026
- aggregate_names = query . __ash_bindings__ . aggregate_names
1027
-
1028
- if Enum . empty? ( calculation_names ) and Enum . empty? ( aggregate_names ) and
1029
- Enum . empty? ( calculations_require_rewrite ) and Enum . empty? ( aggregates_require_rewrite ) do
1030
- results
1031
- else
1032
- Enum . map ( results , fn result ->
1033
- result
1034
- |> remap_to_nested ( :calculations , calculations_require_rewrite )
1035
- |> remap_to_nested ( :aggregates , aggregates_require_rewrite )
1036
- |> remap ( :calculations , calculation_names )
1037
- |> remap ( :aggregates , aggregate_names )
1038
- end )
1039
- end
1040
- end
1041
-
1042
- defp remap_to_nested ( record , _subfield , mapping ) when mapping == % { } do
1043
- record
1044
- end
1045
-
1046
- defp remap_to_nested ( record , subfield , mapping ) do
1047
- Map . update! ( record , subfield , fn subfield_values ->
1048
- Enum . reduce ( mapping , subfield_values , fn { source , dest } , subfield_values ->
1049
- subfield_values
1050
- |> Map . put ( dest , Map . get ( record , source ) )
1051
- |> Map . delete ( source )
1052
- end )
1053
- end )
1054
- end
1055
-
1056
- defp remap ( record , _subfield , mapping ) when mapping == % { } do
1057
- record
1058
- end
1059
-
1060
- defp remap ( record , subfield , mapping ) do
1061
- Map . update! ( record , subfield , fn subfield_values ->
1062
- Enum . reduce ( mapping , subfield_values , fn { dest , source } , subfield_values ->
1063
- subfield_values
1064
- |> Map . put ( dest , Map . get ( subfield_values , source ) )
1065
- |> Map . delete ( source )
1066
- end )
1067
- end )
1068
- end
1069
-
1070
980
defp lateral_join_query (
1071
981
query ,
1072
982
root_data ,
@@ -1425,7 +1335,7 @@ defmodule AshPostgres.DataLayer do
1425
1335
end )
1426
1336
1427
1337
if options [ :return_records? ] do
1428
- { :ok , remap_mapped_fields ( results , query ) }
1338
+ { :ok , AshSql.Query . remap_mapped_fields ( results , query ) }
1429
1339
else
1430
1340
:ok
1431
1341
end
@@ -1691,7 +1601,7 @@ defmodule AshPostgres.DataLayer do
1691
1601
end )
1692
1602
1693
1603
if options [ :return_records? ] do
1694
- { :ok , remap_mapped_fields ( results , query ) }
1604
+ { :ok , AshSql.Query . remap_mapped_fields ( results , query ) }
1695
1605
else
1696
1606
:ok
1697
1607
end
0 commit comments