Clean update mask paths that are missing from the saved data - #424
Open
pierre-su wants to merge 2 commits into
Open
Clean update mask paths that are missing from the saved data#424pierre-su wants to merge 2 commits into
pierre-su wants to merge 2 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
A map-valued field that is set and then cleared to
nullin the same save leaves stale nested leaf paths (e.g.brickValues.X.selectedId) in the update mask while the data atbrickValues.Xis nownull. Firestore Web rejects such a mask withso
saveDocthrows and the document is not saved. The REST path (Dart backend) would instead silently delete the field — also wrong.Changes
cleanUpdateMaskinyust_database_service_shared.dart:null); otherwise collapse it to the nearest existing ancestor (so the parent'snullstill gets written), or drop it entirely.saveDocimplementations (FlutterSetOptions(mergeFields:)and Dart RESTpatch) and incommitTransaction(same masked REST write, same silent-delete risk).The rule only removes invalid mask paths, so it is behaviour-neutral for already-consistent masks.
Tests
cleanUpdateMaskcovering map→null stale paths, ancestor collapsing, overlap/dedup, valid map masks, scalar fields, missing paths, and backtick-quoted segments.dart analyzeandflutter testpass (via fvm, Flutter 3.38.3).🤖 Generated with Claude Code