diff options
author | Jon Bratseth <bratseth@gmail.com> | 2023-04-14 17:37:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-14 17:37:17 +0200 |
commit | a214f60664de35f527e54fc253b2f6ba6cd5b8c3 (patch) | |
tree | db9dbd8cfc16ed8bae92319cca493e3503cdd0e4 | |
parent | 0d7e4a262ed8f1dbbba19f44d0c312c3bc461123 (diff) | |
parent | 057fa96d6776e275efbb4c5ed0d758277985338a (diff) |
Merge pull request #26741 from vespa-engine/bratseth/choice-resolve-order
Resolve parent before children
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"); |