From 7104fe97c4b507c705886833cefd0225307c0c54 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Fri, 10 Nov 2017 13:33:16 -0800 Subject: [PATCH] Revert "Reject conflicting updates (#2582)" (#2612) This reverts commit 7c93395874187c4502e078679e04eb15402bde0e. --- .../com/google/cloud/firestore/BasePath.java | 9 ----- .../com/google/cloud/firestore/FieldPath.java | 7 +--- .../google/cloud/firestore/UpdateBuilder.java | 19 ++------- .../firestore/DocumentReferenceTest.java | 39 ------------------- 4 files changed, 4 insertions(+), 70 deletions(-) diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BasePath.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BasePath.java index 704a9f5efe28..77292471140a 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BasePath.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BasePath.java @@ -96,13 +96,4 @@ boolean isPrefixOf(B path) { abstract String[] splitChildPath(String path); abstract B createPathWithSegments(ImmutableList segments); - - boolean isPrefixOf(BasePath field) { - if (field.getSegments().size() < this.getSegments().size()) { - return false; - } - - return this.equals( - createPathWithSegments(field.getSegments().subList(0, this.getSegments().size()))); - } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java index 73accb250603..cc13f34ff1dc 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java @@ -28,7 +28,7 @@ * field in the document). */ @AutoValue -public abstract class FieldPath extends BasePath implements Comparable { +public abstract class FieldPath extends BasePath { /** * A special sentinel FieldPath to refer to the ID of a document. It can be used in queries to @@ -152,9 +152,4 @@ FieldPath createPathWithSegments(ImmutableList segments) { public String toString() { return getEncodedPath(); } - - @Override - public int compareTo(@Nonnull FieldPath other) { - return getEncodedPath().compareTo(other.getEncodedPath()); - } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java index 361d0e98b824..d1ad61a5607c 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java @@ -32,8 +32,6 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.SortedSet; -import java.util.TreeSet; import javax.annotation.Nonnull; import javax.annotation.Nullable; @@ -58,18 +56,10 @@ abstract class UpdateBuilder { private static Map expandObject(Map data) { Map result = new HashMap<>(); - SortedSet sortedFields = new TreeSet<>(data.keySet()); + for (Map.Entry entrySet : data.entrySet()) { + List segments = entrySet.getKey().getSegments(); + Object value = entrySet.getValue(); - FieldPath lastField = null; - - for (FieldPath field : sortedFields) { - if (lastField != null && lastField.isPrefixOf(field)) { - throw new IllegalArgumentException( - String.format("Detected ambiguous definition for field '%s'.", lastField)); - } - - List segments = field.getSegments(); - Object value = data.get(field); Map currentMap = result; for (int i = 0; i < segments.size(); ++i) { @@ -79,12 +69,9 @@ private static Map expandObject(Map data) { if (!currentMap.containsKey(segments.get(i))) { currentMap.put(segments.get(i), new HashMap<>()); } - currentMap = (Map) currentMap.get(segments.get(i)); } } - - lastField = field; } return result; diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java index 723e01102410..ab602fff7578 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java @@ -584,45 +584,6 @@ public void updateWithDotsInFieldName() throws Exception { assertCommitEquals(expectedCommit, commitCapture.getValue()); } - @Test - public void updateConflictingFields() throws Exception { - try { - documentReference - .update("a.b", "foo", "a", "foo") - .get(); - fail(); - } catch (IllegalArgumentException e) { - assertEquals(e.getMessage(), "Detected ambiguous definition for field 'a'."); - } - - try { - documentReference - .update("a.b", "foo", "a.b.c", "foo") - .get(); - fail(); - } catch (IllegalArgumentException e) { - assertEquals(e.getMessage(), "Detected ambiguous definition for field 'a.b'."); - } - - try { - documentReference - .update("a.b", SINGLE_FIELD_MAP, "a", SINGLE_FIELD_MAP) - .get(); - fail(); - } catch (IllegalArgumentException e) { - assertEquals(e.getMessage(), "Detected ambiguous definition for field 'a'."); - } - - try { - documentReference - .update("a.b", SINGLE_FIELD_MAP, "a.b.c", SINGLE_FIELD_MAP) - .get(); - fail(); - } catch (IllegalArgumentException e) { - assertEquals(e.getMessage(), "Detected ambiguous definition for field 'a.b'."); - } - } - @Test public void deleteField() throws Exception { doReturn(SINGLE_WRITE_COMMIT_RESPONSE)