Skip to content

Commit 23a9cae

Browse files
committed
Merge pull request #653 from bserdar/simple-array-element-projection
Make sure simple array elements are included in projections
2 parents 48ed318 + 2d494f9 commit 23a9cae

File tree

4 files changed

+23
-1
lines changed

4 files changed

+23
-1
lines changed

crud/src/main/java/com/redhat/lightblue/assoc/ep/ExecutionPlan.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.redhat.lightblue.metadata.ArrayField;
4444
import com.redhat.lightblue.metadata.ArrayElement;
4545
import com.redhat.lightblue.metadata.ObjectArrayElement;
46+
import com.redhat.lightblue.metadata.SimpleArrayElement;
4647
import com.redhat.lightblue.metadata.ReferenceField;
4748
import com.redhat.lightblue.metadata.FieldTreeNode;
4849
import com.redhat.lightblue.metadata.FieldCursor;
@@ -404,6 +405,8 @@ public static Set<Path> getIncludedFieldsOfEntityForProjection(ExecutionBlock bl
404405
|| (node instanceof ArrayField && ((ArrayField) node).getElement() instanceof ObjectArrayElement)
405406
|| (node instanceof ArrayElement)) {
406407
// include its member fields
408+
} else if(node instanceof ArrayField && ((ArrayField) node).getElement() instanceof SimpleArrayElement) {
409+
fields.add(new Path(localField,Path.ANYPATH));
407410
} else {
408411
if (localProjection != null && localProjection.isFieldRequiredToEvaluateProjection(localField)) {
409412
LOGGER.debug("{}: required", localField);

crud/src/test/java/com/redhat/lightblue/mediator/CompositeFinderTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -534,6 +534,19 @@ public void elemMatchTopLevelArr() throws Exception {
534534
Assert.assertEquals("l1", JsonDoc.get(response.getEntityData().get(0), new Path("legalEntities.0.legalEntity.0.name")).asText());
535535
}
536536

537+
@Test
538+
public void projectSimpleArrayElements() throws Exception {
539+
FindRequest fr = new FindRequest();
540+
fr.setQuery(query("{'field':'_id','op':'=','rvalue':'1'}"));
541+
fr.setProjection(projection("[{'field':'*','recursive':1},{'field':'legalEntities.*.legalEntity' }]"));
542+
fr.setEntityVersion(new EntityVersion("U", "0.0.1"));
543+
544+
Response response = mediator.find(fr);
545+
Assert.assertEquals(1, response.getEntityData().size());
546+
Assert.assertEquals("l1", JsonDoc.get(response.getEntityData().get(0), new Path("legalEntities.0.legalEntity.0.name")).asText());
547+
Assert.assertEquals("arr0", JsonDoc.get(response.getEntityData().get(0), new Path("legalEntities.0.legalEntity.0.arr.0")).asText());
548+
}
549+
537550
@Test
538551
public void updateWithAssocq() throws Exception {
539552
UpdateRequest urq = new UpdateRequest();

crud/src/test/resources/composite/L.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,12 @@
5050
"name": {
5151
"type": "string"
5252
},
53+
"arr": {
54+
"type":"array",
55+
"items": {
56+
"type":"string"
57+
}
58+
},
5359
"us": {
5460
"type":"reference",
5561
"entity":"U",
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
[ { "_id":1, "status":"active","name":"l1","objectType":"L"},
1+
[ { "_id":1, "status":"active","name":"l1","objectType":"L","arr":["arr0","arr1"]},
22
{ "_id":2, "status":"active","name":"l2","objectType":"L"} ]
33

0 commit comments

Comments
 (0)