summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
diff options
context:
space:
mode:
authorHenrik <henrik.hoiness@online.no>2018-08-02 17:55:41 +0200
committerHenrik <henrik.hoiness@online.no>2018-08-02 17:55:41 +0200
commitb91884508dce92a35415de9c5bb85f1b691c69a7 (patch)
tree6367cf19cdfb1c9795e7dccb61295f6c3a5294fb /container-search/src/main/java/com/yahoo/search/query/SelectParser.java
parent6f49b45153e0ff1d49928d063314cca2859750fc (diff)
Added parsing of Grouping from JSON to String. Now parsing grouping-parameter and setting the query's groupingrequest when parameter is present
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search/query/SelectParser.java')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/SelectParser.java25
1 files changed, 21 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
index df4d3fb98e3..66beda53804 100644
--- a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
+++ b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
@@ -37,9 +37,11 @@ import com.yahoo.prelude.query.WeakAndItem;
import com.yahoo.prelude.query.WeightedSetItem;
import com.yahoo.prelude.query.WordAlternativesItem;
import com.yahoo.prelude.query.WordItem;
+import com.yahoo.search.grouping.request.GroupingOperation;
import com.yahoo.search.query.parser.Parsable;
import com.yahoo.search.query.parser.Parser;
import com.yahoo.search.query.parser.ParserEnvironment;
+import com.yahoo.search.yql.VespaGroupingStep;
import com.yahoo.slime.ArrayTraverser;
import com.yahoo.slime.Inspector;
import com.yahoo.slime.ObjectTraverser;
@@ -148,12 +150,12 @@ public class SelectParser implements Parser {
this.query = query;
return buildTree();
-
}
- public QueryTree buildTree() {
- Inspector inspector = SlimeUtils.jsonToSlime(this.query.getSelect().getBytes()).get();
+
+ private QueryTree buildTree() {
+ Inspector inspector = SlimeUtils.jsonToSlime(this.query.getSelect().getWhere().getBytes()).get();
if (inspector.field("error_message").valid()){
throw new QueryException("Illegal query: "+inspector.field("error_message").asString() + ", at: "+ new String(inspector.field("offending_input").asData(), StandardCharsets.UTF_8));
}
@@ -166,12 +168,13 @@ public class SelectParser implements Parser {
}
- public Item walkJson(Inspector inspector){
+ private Item walkJson(Inspector inspector){
final Item[] item = {null};
inspector.traverse((ObjectTraverser) (key, value) -> {
String type = (FUNCTION_CALLS.contains(key)) ? CALL : key;
switch (type) {
+
case AND:
item[0] = buildAnd(key, value);
break;
@@ -204,6 +207,20 @@ public class SelectParser implements Parser {
}
+ public List<VespaGroupingStep> getGroupingSteps(String grouping){
+ List<VespaGroupingStep> groupingSteps = new ArrayList<>();
+ GroupingOperation groupingOperation = GroupingOperation.fromString(transformGrouping(grouping));
+ VespaGroupingStep groupingStep = new VespaGroupingStep(groupingOperation);
+ groupingSteps.add(groupingStep);
+ return groupingSteps;
+ }
+
+ private String transformGrouping(String grouping){
+ String groupingString = grouping.replace(" ", "").replace("\"", "").replace("\'", "").replace(":{", "(").replace(":", "(").replace("}", ")").replace(",", ")");
+ return groupingString.substring(2, groupingString.length()-1);
+ }
+
+
@NonNull
private Item buildFunctionCall(String key, Inspector value) {
switch (key) {