aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo/search/query/SelectParser.java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@verizonmedia.com>2019-03-07 14:30:55 +0100
committerJon Bratseth <bratseth@verizonmedia.com>2019-03-07 14:30:55 +0100
commit9507be19fd111c9331a8f500236c1b01b99f6388 (patch)
tree06597cd1928667f034a9bf68258b0b8c2ec17236 /container-search/src/main/java/com/yahoo/search/query/SelectParser.java
parent78a9d7de1f7d67be6cef8967d2dd7fbc884b4299 (diff)
Fix parsing of array query properties in JSON payload
These were translated to request properties by calling asString on the payload, which returns an empty value for arrays. toString returns the correct value. This also improves error messages for Slime JSON parsing of queries, and in general.
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.java20
1 files changed, 12 insertions, 8 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 e4e44985b53..46c8a8af41f 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
@@ -150,15 +150,14 @@ public class SelectParser implements Parser {
private QueryTree buildTree() {
Inspector inspector = SlimeUtils.jsonToSlime(this.query.getSelect().getWhereString().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));
+ 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) + "'");
}
Item root = walkJson(inspector);
connectItems();
- QueryTree newTree = new QueryTree(root);
-
- return newTree;
+ return new QueryTree(root);
}
private Item walkJson(Inspector inspector){
@@ -213,7 +212,8 @@ public class SelectParser implements Parser {
List<String> operations = new ArrayList<>();
Inspector inspector = SlimeUtils.jsonToSlime(grouping.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));
+ throw new QueryException("Illegal query: "+inspector.field("error_message").asString() +
+ " at: '" + new String(inspector.field("offending_input").asData(), StandardCharsets.UTF_8) + "'");
}
inspector.traverse( (ArrayTraverser) (key, value) -> {
@@ -786,7 +786,7 @@ public class SelectParser implements Parser {
String possibleLeafFunctionName = (possibleLeafFunction.size() > 1) ? getInspectorKey(possibleLeafFunction.get(1)) : "";
if (FUNCTION_CALLS.contains(key)) {
return instantiateCompositeLeaf(field, key, value);
- } else if(!possibleLeafFunctionName.equals("")){
+ } else if ( ! possibleLeafFunctionName.equals("")){
return instantiateCompositeLeaf(field, possibleLeafFunctionName, valueListFromInspector(value).get(1).field(possibleLeafFunctionName));
} else {
return instantiateWordItem(field, key, value);
@@ -815,7 +815,11 @@ public class SelectParser implements Parser {
@NonNull
private Item instantiateWordItem(String field, String key, Inspector value) {
- String wordData = getChildrenMap(value).get(1).asString();
+ var children = getChildrenMap(value);
+ if (children.size() < 2)
+ throw new IllegalArgumentException("Expected at least 2 children of '" + key + "', but got " + children.size());
+
+ String wordData = children.get(1).asString();
return instantiateWordItem(field, wordData, key, value, false, decideParsingLanguage(value, wordData));
}