Add Support for deeper update using $set #12
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Signed-off-by: Romy romy2232@gmail.com
This PR handles an issue I observed when executing updates using $set op with more than 1 '.' .
For example:
When calling:
convertUpdate('data', { $set: { 'a.b.c': 2 } }
Actual Postgres query:
jsonb_set(jsonb_set(jsonb_set(data,'{a}',COALESCE(data->'a', '{}'::jsonb)),'{b}',COALESCE(data->'a'->'b', '{}'::jsonb)),'{a,b,c}','2'::jsonb)
This query indeed updates a.b.c as wanted but it also "hangs" the old value of a.b on a.
Expected Postgres query:
jsonb_set(jsonb_set(jsonb_set(data,'{a}',COALESCE(data->'a', '{}'::jsonb)),'{a,b}',COALESCE(data->'a'->'b', '{}'::jsonb)),'{a,b,c}','2'::jsonb)
Please review,
Thank you.