summaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2023-03-31 14:31:37 +0100
committerJon Bratseth <bratseth@gmail.com>2023-03-31 14:31:37 +0100
commit1a360b51809d892d6b348f78db7ebd1590d77335 (patch)
tree0867de0b7804c22d1ea566882d01546154c696b9 /indexinglanguage
parentd65d548169183b47b931b3c5e39ad5a8fae06ce5 (diff)
More understandable errors, and implement inner convert
Diffstat (limited to 'indexinglanguage')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java5
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java4
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceTestCase.java26
3 files changed, 34 insertions, 1 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
index 45d8637aa3e..ccad9d6d08b 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionConverter.java
@@ -55,6 +55,11 @@ public abstract class ExpressionConverter implements Cloneable {
return new CatExpression(lst);
}
+ public Expression innerConvert(ChoiceExpression exp) {
+ var convertedInnerExpressions = exp.asList().stream().map(inner -> convert(inner)).toList();
+ return new ChoiceExpression(convertedInnerExpressions);
+ }
+
public Expression innerConvert(ForEachExpression exp) {
return new ForEachExpression(convert(exp.getInnerExpression()));
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
index 30c824d410d..bba1b09cda2 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
@@ -21,7 +21,9 @@ public final class InputExpression extends Expression {
public InputExpression(String fieldName) {
super(null);
- this.fieldName = Objects.requireNonNull(fieldName);
+ if (fieldName == null)
+ throw new IllegalArgumentException("'input' must be given a field name as argument");
+ this.fieldName = fieldName;
}
public String getFieldName() {
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceTestCase.java
index 351c925ed56..7ece841e9b7 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceTestCase.java
@@ -4,7 +4,13 @@ package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
import com.yahoo.document.Field;
import com.yahoo.document.datatypes.StringFieldValue;
+import com.yahoo.language.Linguistics;
+import com.yahoo.language.process.Embedder;
+import com.yahoo.language.simple.SimpleLinguistics;
+import com.yahoo.vespa.indexinglanguage.ExpressionSearcher;
import com.yahoo.vespa.indexinglanguage.SimpleTestAdapter;
+import com.yahoo.vespa.indexinglanguage.parser.ParseException;
+import com.yahoo.yolean.Exceptions;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
@@ -44,4 +50,24 @@ public class ChoiceTestCase {
}
}
+ @Test
+ public void testIllegalChoiceExpression() throws ParseException {
+ try {
+ parse("input (foo || 99999999) | attribute");
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("'input' must be given a field name as argument", Exceptions.toMessageString(e));
+ }
+ }
+
+ @Test
+ public void testInnerConvert() throws ParseException {
+ var expression = parse("(input foo || 99999999) | attribute");
+ new ExpressionSearcher<>(AttributeExpression.class).searchIn(expression); // trigger innerConvert
+ }
+
+ private static Expression parse(String s) throws ParseException {
+ return Expression.fromString(s, new SimpleLinguistics(), Embedder.throwsOnUse.asMap());
+ }
+
}