Skip to content

Commit 282643b

Browse files
authored
Merge pull request #679 from bserdar/678
Fix #678: explain plan descends using toJson, not explain
2 parents 9efe4e8 + 4ba76dc commit 282643b

File tree

15 files changed

+151
-15
lines changed

15 files changed

+151
-15
lines changed

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

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,24 +187,34 @@ public void commit() {
187187
queries = new ArrayList<>();
188188
}
189189
}
190-
191-
@Override
192-
public JsonNode toJson() {
190+
191+
private JsonNode toJson(Step.ToJsonCb<Step> scb,Step.ToJsonCb<ExecutionBlock> bcb) {
193192
ObjectNode o = JsonNodeFactory.instance.objectNode();
194193
ObjectNode a = JsonNodeFactory.instance.objectNode();
195194
o.set("assemble", a);
196195
a.set("entity", JsonNodeFactory.instance.textNode(block.getMetadata().getName()));
197-
a.set("left", source.getStep().toJson());
196+
a.set("left", scb.toJson(source.getStep()));
198197
ArrayNode array = JsonNodeFactory.instance.arrayNode();
199198
a.set("right", array);
200199
for (ExecutionBlock b : destinationBlocks) {
201200
ObjectNode detail=JsonNodeFactory.instance.objectNode();
202201
AssociationQuery aq = b.getAssociationQueryForEdge(block);
203202
detail.set("associationQuery",aq.getQuery().toJson());
204-
detail.set("source",b.toJson());
203+
detail.set("source",bcb.toJson(b));
205204
array.add(detail);
206205
}
207206
return o;
208207
}
209208

209+
@Override
210+
public JsonNode toJson() {
211+
return toJson(Step::toJson,ExecutionBlock::toJson);
212+
}
213+
214+
@Override
215+
public JsonNode explain(ExecutionContext ctx) {
216+
return toJson(s->{return s.explain(ctx);},
217+
t->{return t.explain(ctx);});
218+
}
219+
210220
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,4 +65,11 @@ public JsonNode toJson() {
6565
node.set("copy", source.getStep().toJson());
6666
return node;
6767
}
68+
69+
@Override
70+
public JsonNode explain(ExecutionContext ctx) {
71+
ObjectNode node = JsonNodeFactory.instance.objectNode();
72+
node.set("copy", source.getStep().explain(ctx));
73+
return node;
74+
}
6875
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,4 +235,8 @@ public String toString() {
235235
public JsonNode toJson() {
236236
return resultStep.toJson();
237237
}
238+
239+
public JsonNode explain(ExecutionContext ctx) {
240+
return resultStep.explain(ctx);
241+
}
238242
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,12 @@ public JsonNode toJson() {
6060
o.set("source", source.getStep().toJson());
6161
return o;
6262
}
63+
64+
@Override
65+
public JsonNode explain(ExecutionContext ctx) {
66+
ObjectNode o = JsonNodeFactory.instance.objectNode();
67+
o.set("filter", q.toJson());
68+
o.set("source", source.getStep().explain(ctx));
69+
return o;
70+
}
6371
}

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

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,14 +226,23 @@ private void computeJoinTuples() {
226226
}
227227
}
228228

229-
@Override
230-
public JsonNode toJson() {
229+
private JsonNode toJson(ToJsonCb<Step> cb) {
231230
ObjectNode o = JsonNodeFactory.instance.objectNode();
232231
ArrayNode arr = JsonNodeFactory.instance.arrayNode();
233232
for (Source<ResultDocument> s : sources) {
234-
arr.add(s.getStep().toJson());
233+
arr.add(cb.toJson(s.getStep()));
235234
}
236235
o.set("join", arr);
237236
return o;
238237
}
238+
239+
@Override
240+
public JsonNode toJson() {
241+
return toJson(Step::toJson);
242+
}
243+
244+
@Override
245+
public JsonNode explain(ExecutionContext ctx) {
246+
return toJson(s->{return s.explain(ctx);});
247+
}
239248
}

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,26 @@ public JsonNode toJson() {
124124
}
125125
return o;
126126
}
127+
128+
@Override
129+
public JsonNode explain(ExecutionContext ctx) {
130+
ObjectNode o = JsonNodeFactory.instance.objectNode();
131+
o.set("join-search", source.getStep().explain(ctx));
132+
if (query != null) {
133+
o.set("query", query.toJson());
134+
}
135+
if (projection != null) {
136+
o.set("projection", projection.toJson());
137+
}
138+
if (sort != null) {
139+
o.set("sort", sort.toJson());
140+
}
141+
if (from != null) {
142+
o.set("from", JsonNodeFactory.instance.numberNode(from));
143+
}
144+
if (to != null) {
145+
o.set("to", JsonNodeFactory.instance.numberNode(to));
146+
}
147+
return o;
148+
}
127149
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,4 +55,12 @@ public JsonNode toJson() {
5555
o.set("source", source.getStep().toJson());
5656
return o;
5757
}
58+
59+
@Override
60+
public JsonNode explain(ExecutionContext ctx) {
61+
ObjectNode o = JsonNodeFactory.instance.objectNode();
62+
o.set("limit", JsonNodeFactory.instance.numberNode(limit));
63+
o.set("source", source.getStep().explain(ctx));
64+
return o;
65+
}
5866
}

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,4 +60,13 @@ public JsonNode toJson() {
6060
o.set("source", source.getStep().toJson());
6161
return o;
6262
}
63+
64+
@Override
65+
public JsonNode explain(ExecutionContext ctx) {
66+
ObjectNode o = JsonNodeFactory.instance.objectNode();
67+
o.set("project", projection.toJson());
68+
o.set("source", source.getStep().explain(ctx));
69+
return o;
70+
}
71+
6372
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,12 @@ public JsonNode toJson() {
5858
o.set("source", source.getStep().toJson());
5959
return o;
6060
}
61+
62+
@Override
63+
public JsonNode explain(ExecutionContext ctx) {
64+
ObjectNode o = JsonNodeFactory.instance.objectNode();
65+
o.set("skip", JsonNodeFactory.instance.numberNode(skip));
66+
o.set("source", source.getStep().explain(ctx));
67+
return o;
68+
}
6169
}

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,12 @@ public JsonNode toJson() {
7878
o.set("source", source.getStep().toJson());
7979
return o;
8080
}
81+
82+
@Override
83+
public JsonNode explain(ExecutionContext ctx) {
84+
ObjectNode o = JsonNodeFactory.instance.objectNode();
85+
o.set("sort", sort.toJson());
86+
o.set("source", source.getStep().explain(ctx));
87+
return o;
88+
}
8189
}

0 commit comments

Comments
 (0)