Skip to content

Commit de945a6

Browse files
author
Burak Serdar
committed
Fix #631: arrayElement.this should resolve to the array element, and thus should allow removing it in update
1 parent 3d62ee6 commit de945a6

File tree

3 files changed

+15
-0
lines changed

3 files changed

+15
-0
lines changed

crud/src/test/java/com/redhat/lightblue/eval/UpdaterTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,17 @@ public void array_foreach_removeone() throws Exception {
192192
Assert.assertEquals(3, jsonDoc.get(new Path("field7")).size());
193193
}
194194

195+
@Test
196+
public void array_foreach_removethis() throws Exception {
197+
UpdateExpression expr = EvalTestContext.updateExpressionFromJson("{ '$foreach' : { 'field6.nf5' : { 'field':'$this','op':'=','rvalue':10} , '$update' : '$remove' } }");
198+
Updater updater = Updater.getInstance(JSON_NODE_FACTORY, md, expr);
199+
Assert.assertEquals(4, jsonDoc.get(new Path("field6.nf5")).size());
200+
Assert.assertEquals(10, jsonDoc.get(new Path("field6.nf5.1")).asInt());
201+
updater.update(jsonDoc, md.getFieldTreeRoot(), new Path());
202+
Assert.assertEquals(3, jsonDoc.get(new Path("field6.nf5")).size());
203+
Assert.assertEquals(15, jsonDoc.get(new Path("field6.nf5.1")).asInt());
204+
}
205+
195206
@Test
196207
public void array_foreach_modone() throws Exception {
197208
UpdateExpression expr = EvalTestContext.updateExpressionFromJson("{ '$foreach' : { 'field7' : { 'field':'elemf1','op':'=','rvalue':'elvalue0_1'} , '$update' : {'$set': { 'elemf1':'test'}} } }");

metadata/src/main/java/com/redhat/lightblue/metadata/SimpleArrayElement.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public FieldTreeNode resolve(Path p, int level) {
6969
return this;
7070
} else if (p.head(level).equals(Path.PARENT)) {
7171
return this.getParent().getParent().resolve(p, level + 1);
72+
} else if (p.head(level).equals(Path.THIS)) {
73+
return this.resolve(p,level+1);
7274
} else {
7375
throw Error.get(MetadataConstants.ERR_INVALID_ARRAY_REFERENCE);
7476
}

metadata/src/main/java/com/redhat/lightblue/metadata/SimpleField.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,8 @@ public FieldTreeNode resolve(Path p, int level) {
6969
return this;
7070
} else if (Path.PARENT.equals(p.head(level))) {
7171
return this.getParent().resolve(p, level + 1);
72+
} if (p.head(level).equals(Path.THIS)) {
73+
return this.resolve(p,level+1);
7274
} else {
7375
throw Error.get(MetadataConstants.ERR_INVALID_FIELD_REFERENCE, p.head(level) + " in " + p.toString());
7476
}

0 commit comments

Comments
 (0)