Skip to content

Commit 823e5b8

Browse files
authored
Merge pull request #683 from bserdar/599
Fix #599: allow default versions in references
2 parents 705ed11 + 0f19e1d commit 823e5b8

File tree

7 files changed

+171
-3
lines changed

7 files changed

+171
-3
lines changed

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,21 @@ public void retrieveAandBonly() throws Exception {
244244
Assert.assertEquals("A", qplan.getSources()[0].getMetadata().getName());
245245
}
246246

247+
@Test
248+
public void retrieveAandBonly_defaultVersion() throws Exception {
249+
FindRequest fr = new FindRequest();
250+
fr.setQuery(query("{'field':'_id','op':'=','rvalue':'A01'}"));
251+
fr.setProjection(projection("[{'field':'*','recursive':1},{'field':'b'}]"));
252+
fr.setEntityVersion(new EntityVersion("A_def", "1.0.0"));
253+
Response response = mediator.find(fr);
254+
Assert.assertEquals(1, response.getEntityData().size());
255+
Assert.assertEquals("A01", response.getEntityData().get(0).get("_id").asText());
256+
QueryPlan qplan = (QueryPlan) getLastContext(mediator).getProperty(Mediator.CTX_QPLAN);
257+
// This one must have A -> B
258+
Assert.assertEquals(1, qplan.getSources().length);
259+
Assert.assertEquals("A_def", qplan.getSources()[0].getMetadata().getName());
260+
}
261+
247262
@Test
248263
public void retrieveAandBonly_manyA() throws Exception {
249264
FindRequest fr = new FindRequest();
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
{
2+
"entityInfo" : {
3+
"name": "A_def",
4+
"datastore": {
5+
"backend":"mongo",
6+
"datasource": "mongodata",
7+
"collection": "user"
8+
}
9+
},
10+
"schema" : {
11+
"name" : "A_def",
12+
"version": {
13+
"value": "1.0.0",
14+
"changelog": "Test"
15+
},
16+
"status": {
17+
"value": "active"
18+
},
19+
"access" : {
20+
"insert": ["anyone"],
21+
"find":["anyone"],
22+
"update":["anyone"],
23+
"delete":["anyone"]
24+
},
25+
"fields": {
26+
"_id": {"type": "string", "constraints":{ "identity":1 } },
27+
"objectType": {"type": "string"},
28+
"field1": { "type": "string" },
29+
"obj1": {
30+
"type":"object",
31+
"fields": {
32+
"field1": { "type":"string" },
33+
"c_ref":{"type":"string"},
34+
"c": {
35+
"type":"reference",
36+
"entity":"C",
37+
"versionValue":"1.0.0",
38+
"query":{"field":"_id","op":"$eq","rfield":"$parent.c_ref"}
39+
}
40+
}
41+
},
42+
"b_ref": { "type": "string" },
43+
"b" : {
44+
"type":"reference",
45+
"entity":"B",
46+
"query":{ "field":"_id","op":"$eq","rfield":"$parent.b_ref"}
47+
},
48+
"nonid_b_ref":{"type":"string"},
49+
"nonid_b" : {
50+
"type":"reference",
51+
"entity":"B",
52+
"query":{"field":"field1","op":"$eq","rfield":"$parent.nonid_b_ref"}
53+
},
54+
"level1": {
55+
"type":"object",
56+
"fields": {
57+
"arr1": {
58+
"type":"array",
59+
"items": {
60+
"type":"object",
61+
"fields": {
62+
"b_ref":{"type":"string"},
63+
"ref": {
64+
"type":"reference",
65+
"entity":"B",
66+
"query":{"field":"_id","op":"=","rfield":"$parent.b_ref"}
67+
}
68+
}
69+
}
70+
}
71+
}
72+
}
73+
}
74+
}
75+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
[{
2+
"_id":"A01",
3+
"objectType":"A_def",
4+
"field1":"8nH0wBwk7C",
5+
"obj1":{
6+
"field1":"WImgCng",
7+
"c_ref":"C01"
8+
},
9+
"b_ref":"B01"
10+
},{
11+
"_id":"A02",
12+
"objectType":"A_def",
13+
"field1":"PvbBP",
14+
"obj1":{
15+
"field1":"7f-ADUF1A",
16+
"c_ref":"C02"
17+
},
18+
"b_ref":"B02"
19+
}]

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"backend":"mongo",
66
"datasource": "mongodata",
77
"collection": "user"
8-
}
8+
},
9+
"defaultVersion":"1.0.0"
910
},
1011
"schema" : {
1112
"name" : "B",

metadata/src/main/java/com/redhat/lightblue/metadata/parser/MetadataParser.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -873,7 +873,7 @@ private ReferenceField parseReferenceField(String name,
873873
T object) {
874874
ReferenceField field = new ReferenceField(name);
875875
field.setEntityName(getRequiredStringProperty(object, STR_ENTITY));
876-
field.setVersionValue(getRequiredStringProperty(object, STR_VERSION_VALUE));
876+
field.setVersionValue(getStringProperty(object, STR_VERSION_VALUE));
877877
field.setProjection(getProjection(object, STR_PROJECTION));
878878
field.setQuery(getQuery(object, STR_QUERY));
879879
field.setSort(getSort(object, STR_SORT));
@@ -1493,7 +1493,8 @@ private void convertArrayField(ArrayField field, T fieldObject) {
14931493

14941494
private void convertReferenceField(ReferenceField field, T fieldObject) {
14951495
putString(fieldObject, STR_ENTITY, field.getEntityName());
1496-
putString(fieldObject, STR_VERSION_VALUE, field.getVersionValue());
1496+
if(field.getVersionValue()!=null)
1497+
putString(fieldObject, STR_VERSION_VALUE, field.getVersionValue());
14971498
if (field.getProjection() != null) {
14981499
putProjection(fieldObject, STR_PROJECTION, field.getProjection());
14991500
}

metadata/src/test/java/com/redhat/lightblue/metadata/CompositeMetadataTest.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,4 +291,12 @@ public void fieldResolutionTest() throws Exception {
291291
Assert.assertTrue(field == a.resolve(new Path("obj1.c.*._id")));
292292
Assert.assertEquals("obj1.c.*._id", field.getFullPath().toString());
293293
}
294+
295+
@Test
296+
public void defaultVersionInRefTest() throws Exception {
297+
EntityMetadata md=getMd("composite/A_def.json");
298+
CompositeMetadata a = CompositeMetadata.buildCompositeMetadata(md, new SimpleGMD());
299+
ResolvedReferenceField ref = (ResolvedReferenceField) a.resolve(new Path("obj1.c"));
300+
Assert.assertNotNull(ref);
301+
}
294302
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
{
2+
"entityInfo" : {
3+
"name": "A_def",
4+
"datastore": {
5+
"backend":"mongo",
6+
"datasource": "mongodata",
7+
"collection": "user"
8+
}
9+
},
10+
"schema" : {
11+
"name" : "A_def",
12+
"version": {
13+
"value": "1.0.0",
14+
"changelog": "Test"
15+
},
16+
"status": {
17+
"value": "active"
18+
},
19+
"access" : {
20+
"insert": ["anyone"],
21+
"find":["anyone"],
22+
"update":["anyone"],
23+
"delete":["anyone"]
24+
},
25+
"fields": {
26+
"_id": {"type": "string" },
27+
"objectType": {"type": "string"},
28+
"field1": { "type": "string" },
29+
"obj1": {
30+
"type":"object",
31+
"fields": {
32+
"field1": { "type":"string" },
33+
"c_ref":{"type":"string"},
34+
"c": {
35+
"type":"reference",
36+
"entity":"C",
37+
"query":{"field":"_id","op":"$eq","rfield":"$parent.c_ref"}
38+
}
39+
}
40+
},
41+
"b_ref": { "type": "string" },
42+
"b" : {
43+
"type":"reference",
44+
"entity":"B",
45+
"query":{ "field":"_id","op":"$eq","rfield":"$parent.b_ref"}
46+
}
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)