summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2023-04-14 17:37:17 +0200
committerGitHub <noreply@github.com>2023-04-14 17:37:17 +0200
commita214f60664de35f527e54fc253b2f6ba6cd5b8c3 (patch)
treedb9dbd8cfc16ed8bae92319cca493e3503cdd0e4
parent0d7e4a262ed8f1dbbba19f44d0c312c3bc461123 (diff)
parent057fa96d6776e275efbb4c5ed0d758277985338a (diff)
Merge pull request #26741 from vespa-engine/bratseth/choice-resolve-order
Resolve parent before children
-rw-r--r--docprocs/src/test/cfg/ilscripts.cfg1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java2
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceTestCase.java25
4 files changed, 28 insertions, 2 deletions
diff --git a/docprocs/src/test/cfg/ilscripts.cfg b/docprocs/src/test/cfg/ilscripts.cfg
index c58028f1056..6e4c75f46a7 100644
--- a/docprocs/src/test/cfg/ilscripts.cfg
+++ b/docprocs/src/test/cfg/ilscripts.cfg
@@ -11,3 +11,4 @@ ilscript[0].content[2] "input song | attribute song"
ilscript[0].content[4] "input artist . " ". input title | index combined"
ilscript[0].content[5] "(input artist || "") . " " . (input title || "") | index combinedWithFallback"
+
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java
index 86826770828..5dbb9292a9d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java
@@ -50,9 +50,9 @@ public class ChoiceExpression extends ExpressionList<Expression> {
@Override
protected void doVerify(VerificationContext context) {
DataType input = context.getValueType();
+ context.setValueType(input);
for (Expression exp : this)
context.setValueType(input).execute(exp);
- context.setValueType(input);
}
private static DataType resolveInputType(Collection<? extends Expression> list) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java
index c667a0019c2..fb1338b8b65 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/VerificationContext.java
@@ -11,7 +11,7 @@ import java.util.Map;
*/
public class VerificationContext implements FieldTypeAdapter, Cloneable {
- private final Map<String, DataType> variables = new HashMap<String, DataType>();
+ private final Map<String, DataType> variables = new HashMap<>();
private final FieldTypeAdapter adapter;
private DataType value;
private String outputField;
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 7ece841e9b7..e6d5c550e93 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
@@ -2,7 +2,9 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
+import com.yahoo.document.Document;
import com.yahoo.document.Field;
+import com.yahoo.document.datatypes.LongFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.language.Linguistics;
import com.yahoo.language.process.Embedder;
@@ -44,6 +46,7 @@ public class ChoiceTestCase {
var adapter = new SimpleTestAdapter(new Field("foo", DataType.STRING), new Field("bar", DataType.STRING));
adapter.setValue("foo", new StringFieldValue("foo1"));
adapter.setValue("bar", new StringFieldValue("bar1"));
+ choice.verify(adapter);
ExecutionContext context = new ExecutionContext(adapter);
choice.execute(context);
assertEquals("foo1", context.getValue().getWrappedValue());
@@ -51,6 +54,28 @@ public class ChoiceTestCase {
}
@Test
+ public void testChoiceWithConstant() throws ParseException {
+ var choice = parse("input timestamp || 99999999L | attribute timestamp");
+
+ { // value is set
+ var adapter = new SimpleTestAdapter(new Field("timestamp", DataType.LONG));
+ choice.verify(adapter);
+ adapter.setValue("timestamp", new LongFieldValue(34));
+ ExecutionContext context = new ExecutionContext(adapter);
+ choice.execute(context);
+ assertEquals(34L, context.getValue().getWrappedValue());
+ }
+
+ { // fallback to default
+ var adapter = new SimpleTestAdapter(new Field("timestamp", DataType.LONG));
+ choice.verify(adapter);
+ ExecutionContext context = new ExecutionContext(adapter);
+ choice.execute(context);
+ assertEquals(99999999L, context.getValue().getWrappedValue());
+ }
+ }
+
+ @Test
public void testIllegalChoiceExpression() throws ParseException {
try {
parse("input (foo || 99999999) | attribute");