diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-03-19 16:27:00 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-19 16:27:00 +0100 |
commit | f48096c672bc54ae962a642353d34fdb3067ddff (patch) | |
tree | 4e665d573dad96bd1f73f3f6e669f6756ad1c0a1 | |
parent | 0acc1391f49e274c55134abcf4a5e64920376fad (diff) | |
parent | 1096f6970d3b4c4951988228b0a40fe845ce5ae6 (diff) |
Merge pull request #30680 from vespa-engine/arnej/fill-verification-context
Arnej/fill verification context
8 files changed, 31 insertions, 1 deletions
diff --git a/config-model/src/test/derived/arrays/arrays.sd b/config-model/src/test/derived/arrays/arrays.sd index 928896fade6..e895896b980 100644 --- a/config-model/src/test/derived/arrays/arrays.sd +++ b/config-model/src/test/derived/arrays/arrays.sd @@ -25,6 +25,16 @@ schema arrays { } + field mycnt type int { + indexing { + 0 | set_var chunk_cnt; + input b | for_each { + get_var chunk_cnt + 1 | set_var chunk_cnt + }; + get_var chunk_cnt | attribute; + } + } + fieldset default { fields: a, b, c } diff --git a/config-model/src/test/derived/arrays/documentmanager.cfg b/config-model/src/test/derived/arrays/documentmanager.cfg index ef3841f180b..820ac13888e 100644 --- a/config-model/src/test/derived/arrays/documentmanager.cfg +++ b/config-model/src/test/derived/arrays/documentmanager.cfg @@ -76,3 +76,6 @@ doctype[].structtype[].field[].type 10017 doctype[].structtype[].field[].name "c" doctype[].structtype[].field[].internalid 2069269023 doctype[].structtype[].field[].type 10019 +doctype[].structtype[].field[].name "mycnt" +doctype[].structtype[].field[].internalid 1977567496 +doctype[].structtype[].field[].type 10007 diff --git a/config-model/src/test/derived/arrays/ilscripts.cfg b/config-model/src/test/derived/arrays/ilscripts.cfg index e170c044d9b..98cff642d9e 100644 --- a/config-model/src/test/derived/arrays/ilscripts.cfg +++ b/config-model/src/test/derived/arrays/ilscripts.cfg @@ -6,6 +6,7 @@ ilscript[].docfield[] "ratings" ilscript[].docfield[] "a" ilscript[].docfield[] "b" ilscript[].docfield[] "c" +ilscript[].content[] "clear_state | guard { 0 | set_var chunk_cnt; input b | for_each { get_var chunk_cnt + 1 | set_var chunk_cnt }; get_var chunk_cnt | attribute mycnt; }" ilscript[].content[] "clear_state | guard { input tags | for_each { tokenize normalize stem:\"BEST\" } | summary tags | index tags; }" ilscript[].content[] "clear_state | guard { input ratings | summary ratings | attribute ratings; }" ilscript[].content[] "clear_state | guard { input a | tokenize normalize stem:\"BEST\" | index a; }" diff --git a/config-model/src/test/derived/arrays/index-info.cfg b/config-model/src/test/derived/arrays/index-info.cfg index e227afccb36..fe4f72c75ab 100644 --- a/config-model/src/test/derived/arrays/index-info.cfg +++ b/config-model/src/test/derived/arrays/index-info.cfg @@ -67,6 +67,14 @@ indexinfo[].command[].indexname "c" indexinfo[].command[].command "string" indexinfo[].command[].indexname "c" indexinfo[].command[].command "type WeightedSet<string>" +indexinfo[].command[].indexname "mycnt" +indexinfo[].command[].command "attribute" +indexinfo[].command[].indexname "mycnt" +indexinfo[].command[].command "numerical" +indexinfo[].command[].indexname "mycnt" +indexinfo[].command[].command "integer" +indexinfo[].command[].indexname "mycnt" +indexinfo[].command[].command "type int" indexinfo[].command[].indexname "default" indexinfo[].command[].command "lowercase" indexinfo[].command[].indexname "default" diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java index 9cdcdf001d7..bad8b94d074 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java @@ -59,7 +59,7 @@ public class ExpressionOptimizer extends ExpressionConverter { } static boolean ignoresInput(Expression exp) { - if (exp instanceof SwitchExpression || exp instanceof ScriptExpression) { + if (exp instanceof SwitchExpression || exp instanceof ScriptExpression || exp instanceof ForEachExpression ) { return false; // Switch and script never ignores input. } if (exp instanceof CompositeExpression) { diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java index 8ecd9fa8ef5..6e90142d8a1 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java @@ -36,6 +36,7 @@ public final class CatExpression extends ExpressionList<Expression> { FieldValue input = context.getValue(); DataType inputType = input != null ? input.getDataType() : null; VerificationContext ver = new VerificationContext(context); + context.fillVariableTypes(ver); List<FieldValue> values = new LinkedList<>(); List<DataType> types = new LinkedList<>(); for (Expression exp : this) { diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java index ae8af9da778..b0478f8001c 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java @@ -132,4 +132,10 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl return this; } + void fillVariableTypes(VerificationContext vctx) { + for (var entry : variables.entrySet()) { + vctx.setVariable(entry.getKey(), entry.getValue().getDataType()); + } + } + } diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java index 25ac948c435..256ae68ba65 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java @@ -47,6 +47,7 @@ public final class ForEachExpression extends CompositeExpression { FieldValue next = new MyConverter(context, exp).convert(input); if (next == null) { VerificationContext vctx = new VerificationContext(context); + context.fillVariableTypes(vctx); vctx.setValueType(input.getDataType()).execute(this); next = vctx.getValueType().createFieldValue(); } |