From 842478eca170b3cc04408d80acafb252d7c19c26 Mon Sep 17 00:00:00 2001
From: Jon Bratseth
Date: Thu, 3 Sep 2020 14:43:55 +0200
Subject: Continuation references
---
.../main/antlr4/com/yahoo/search/yql/yqlplus.g4 | 1 +
.../com/yahoo/search/grouping/Continuation.java | 6 ++---
.../search/grouping/vespa/IntegerDecoder.java | 5 +++-
.../com/yahoo/search/yql/MinimalQueryInserter.java | 1 +
.../java/com/yahoo/search/yql/ProgramParser.java | 24 ++++++++++--------
.../main/java/com/yahoo/search/yql/YqlParser.java | 29 +++++++++++++++++++---
.../com/yahoo/search/yql/UserInputTestCase.java | 27 ++++++++++++++++----
7 files changed, 69 insertions(+), 24 deletions(-)
diff --git a/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4 b/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4
index dfa9f2e93e1..d680ea1b91e 100644
--- a/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4
+++ b/container-search/src/main/antlr4/com/yahoo/search/yql/yqlplus.g4
@@ -646,6 +646,7 @@ constantExpression
: scalar_literal
| constantMapExpression
| constantArray
+ | parameter
;
constantArray
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java b/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java
index d7ee3fedfc9..b74101fb83d 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/Continuation.java
@@ -8,7 +8,7 @@ import com.yahoo.search.grouping.vespa.ContinuationDecoder;
* subsequently be sent back along with the original request to navigate across a large result set. It is an opaque
* data object that is not intended to be human readable.
*
- * To render a Cookie within a result set, you simply need to call {@link #toString()}.
+ * To render a continuation within a result set, you simply need to call {@link #toString()}.
*
* @author Simon Thoresen Hult
*/
@@ -18,8 +18,8 @@ public abstract class Continuation {
public static final String PREV_PAGE = "prev";
public static final String THIS_PAGE = "this";
- public static Continuation fromString(String str) {
- return ContinuationDecoder.decode(str);
+ public static Continuation fromString(String string) {
+ return ContinuationDecoder.decode(string);
}
/** Returns a deep copy of this */
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/IntegerDecoder.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/IntegerDecoder.java
index e1a222d6bc0..15781060d7f 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/IntegerDecoder.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/IntegerDecoder.java
@@ -1,6 +1,8 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.grouping.vespa;
+import java.util.Arrays;
+
/**
* @author Simon Thoresen Hult
*/
@@ -33,7 +35,8 @@ class IntegerDecoder {
if (c >= CHAR_MIN && c <= CHAR_MAX) {
return (0xF & (c - CHAR_MIN));
} else {
- throw new NumberFormatException(String.valueOf(c));
+ throw new NumberFormatException("Expected a char in " + Arrays.toString(IntegerEncoder.CHARS) +
+ " but was '" + c + "'");
}
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java b/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java
index 209340e0a99..29490c9ae58 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/MinimalQueryInserter.java
@@ -93,6 +93,7 @@ public class MinimalQueryInserter extends Searcher {
Parsable parsable = Parsable.fromQueryModel(query.getModel()).setQuery(query.properties().getString(YQL));
newTree = parser.parse(parsable);
} catch (RuntimeException e) {
+ e.printStackTrace();
return new Result(query, ErrorMessage.createInvalidQueryParameter("Could not instantiate query from YQL", e));
}
if (parser.getOffset() != null) {
diff --git a/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java b/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java
index 234558f5fd2..bcd5822a6f6 100644
--- a/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java
+++ b/container-search/src/main/java/com/yahoo/search/yql/ProgramParser.java
@@ -987,7 +987,7 @@ final class ProgramParser {
for (Field_defContext rulenode : fieldDefs) {
// FIELD
// expression alias_def?
- OperatorNode expr = convertExpr((ExpressionContext)rulenode.getChild(0), scope);
+ OperatorNode expr = convertExpr(rulenode.getChild(0), scope);
String aliasName = null;
if (rulenode.getChildCount() > 1) {
@@ -1018,9 +1018,8 @@ final class ProgramParser {
.constantMapExpression(), scope);
OperatorNode expr = OperatorNode.create(toLocation(scope, secondChild),
ExpressionOperator.VESPA_GROUPING, secondChild.getText());
- List names = (List) annotation.getArgument(0);
- List> annotates = (List>) annotation
- .getArgument(1);
+ List names = annotation.getArgument(0);
+ List> annotates = annotation.getArgument(1);
for (int i = 0; i < names.size(); ++i) {
expr.putAnnotation(names.get(i), readConstantExpression(annotates.get(i)));
}
@@ -1147,8 +1146,8 @@ final class ProgramParser {
AnnotationContext annotateExpressionContext = ((AnnotateExpressionContext)parseTree).annotation();
OperatorNode annotation = convertExpr(annotateExpressionContext.constantMapExpression(), scope);
OperatorNode expr = convertExpr(parseTree.getChild(1), scope);
- List names = (List) annotation.getArgument(0);
- List> annotates = (List>) annotation.getArgument(1);
+ List names = annotation.getArgument(0);
+ List> annotates = annotation.getArgument(1);
for (int i = 0; i < names.size(); ++i) {
expr.putAnnotation(names.get(i), readConstantExpression(annotates.get(i)));
}
@@ -1375,9 +1374,9 @@ final class ProgramParser {
case yqlplusParser.STRING:
return StringUnescaper.unquote(text);
case yqlplusParser.TRUE:
- return Boolean.valueOf(true);
+ return true;
case yqlplusParser.FALSE:
- return Boolean.valueOf(false);
+ return false;
case yqlplusParser.LONG_INT:
return Long.parseLong(text.substring(0, text.length()-1));
default:
@@ -1391,21 +1390,24 @@ final class ProgramParser {
return node.getArgument(0);
case MAP: {
ImmutableMap.Builder map = ImmutableMap.builder();
- List names = (List) node.getArgument(0);
- List> exprs = (List>) node.getArgument(1);
+ List names = node.getArgument(0);
+ List> exprs = node.getArgument(1);
for (int i = 0; i < names.size(); ++i) {
map.put(names.get(i), readConstantExpression(exprs.get(i)));
}
return map.build();
}
case ARRAY: {
- List> exprs = (List>) node.getArgument(0);
+ List> exprs = node.getArgument(0);
ImmutableList.Builder