diff options
author | Jon Bratseth <bratseth@gmail.com> | 2023-03-31 14:31:37 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2023-03-31 14:31:37 +0100 |
commit | 1a360b51809d892d6b348f78db7ebd1590d77335 (patch) | |
tree | 0867de0b7804c22d1ea566882d01546154c696b9 /indexinglanguage | |
parent | d65d548169183b47b931b3c5e39ad5a8fae06ce5 (diff) |
More understandable errors, and implement inner convert
Diffstat (limited to 'indexinglanguage')
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()); + } + } |