Skip to content

Commit 522191c

Browse files
committed
refactor: do a simple check for upsert? instead
1 parent d2a5d68 commit 522191c

File tree

1 file changed

+22
-37
lines changed

1 file changed

+22
-37
lines changed

lib/data_layer.ex

Lines changed: 22 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2123,32 +2123,8 @@ defmodule AshPostgres.DataLayer do
21232123
{Map.take(r, keys), r}
21242124
end)
21252125

2126-
cant_map_results_to_changesets =
2127-
any_generated_keys_missing?(keys, resource, changesets)
2128-
21292126
results =
2130-
if cant_map_results_to_changesets do
2131-
results
2132-
|> Enum.zip(changesets)
2133-
|> Enum.map(fn {result, changeset} ->
2134-
if !opts[:upsert?] do
2135-
maybe_create_tenant!(resource, result)
2136-
end
2137-
2138-
case get_bulk_operation_metadata(changeset) do
2139-
{index, metadata_key} ->
2140-
Ash.Resource.put_metadata(result, metadata_key, index)
2141-
2142-
nil ->
2143-
# Compatibility fallback
2144-
Ash.Resource.put_metadata(
2145-
result,
2146-
:bulk_create_index,
2147-
changeset.context[:bulk_create][:index]
2148-
)
2149-
end
2150-
end)
2151-
else
2127+
if opts[:upsert?] do
21522128
changesets
21532129
|> Enum.map(fn changeset ->
21542130
identity =
@@ -2176,9 +2152,28 @@ defmodule AshPostgres.DataLayer do
21762152
end
21772153
end
21782154
end)
2179-
|> Enum.concat(results)
21802155
|> Enum.filter(& &1)
2181-
|> Enum.uniq_by(&Map.take(&1, keys))
2156+
else
2157+
results
2158+
|> Enum.zip(changesets)
2159+
|> Enum.map(fn {result, changeset} ->
2160+
if !opts[:upsert?] do
2161+
maybe_create_tenant!(resource, result)
2162+
end
2163+
2164+
case get_bulk_operation_metadata(changeset) do
2165+
{index, metadata_key} ->
2166+
Ash.Resource.put_metadata(result, metadata_key, index)
2167+
2168+
nil ->
2169+
# Compatibility fallback
2170+
Ash.Resource.put_metadata(
2171+
result,
2172+
:bulk_create_index,
2173+
changeset.context[:bulk_create][:index]
2174+
)
2175+
end
2176+
end)
21822177
end
21832178

21842179
{:ok, results}
@@ -3765,16 +3760,6 @@ defmodule AshPostgres.DataLayer do
37653760
end
37663761
end
37673762

3768-
# checks if any of the attributes in the list of keys are generated and missing from any of the changesets
3769-
# if so, we can't match the created record to the changeset by the identity and just need to zip the return
3770-
# values with the changesets
3771-
defp any_generated_keys_missing?(keys, resource, changesets) do
3772-
Enum.any?(keys, fn key ->
3773-
Ash.Resource.Info.attribute(resource, key).generated? &&
3774-
Enum.any?(changesets, fn changeset -> is_nil(changeset.attributes[key]) end)
3775-
end)
3776-
end
3777-
37783763
defp get_bulk_operation_metadata(changeset) do
37793764
changeset.context
37803765
|> Enum.find_value(fn

0 commit comments

Comments
 (0)