Their usage of upsert appears different than I was used to:
Me: Upsert = Update or Insert
Them: Upsert = Get or Insert
Their usage of upsert appears different than I was used to:
Me: Upsert = Update or Insert
Them: Upsert = Get or Insert
I agree that their choice of labeling the proposal as "upsert" is less than ideal. However, this functionality is reminiscent of a very useful Perl capability known as autovivification[0] as described in the motivation section:
A common problem when using a Map or WeakMap is how to
handle doing an update when you're not sure if the key
already exists in the map.
0 - https://en.wikipedia.org/wiki/AutovivificationIf you use that operator and the value doesn't exist, it'll default create one and return a reference to that.
And as I'm writing this I realize why... references cannot be `null`.
`getOrInsert` here seems to be the Python "set_default" method on dicts, which is very useful at avoiding tedium in some basic data munging
Example:
update(store, (draft) => {
if (!draft.alertConfigurations.has(req.params.clusterId))
draft.alertConfigurations.set(req.params.clusterId, new Map());
const clusterAlerts = draft.alertConfigurations.get(req.params.clusterId);
req.body.forEach((alert) => clusterAlerts.set(alert.id, { ...alert, predefined: false }));
});It gives a caller the option of alternate logic based on the existence, or lack thereof, of a value.
> is that not just set?
No. The semantics of a "set" operation would overwrite an existing entry (if one exists).