summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-03-19 16:27:00 +0100
committerGitHub <noreply@github.com>2024-03-19 16:27:00 +0100
commitf48096c672bc54ae962a642353d34fdb3067ddff (patch)
tree4e665d573dad96bd1f73f3f6e669f6756ad1c0a1
parent0acc1391f49e274c55134abcf4a5e64920376fad (diff)
parent1096f6970d3b4c4951988228b0a40fe845ce5ae6 (diff)
Merge pull request #30680 from vespa-engine/arnej/fill-verification-context
Arnej/fill verification context
-rw-r--r--config-model/src/test/derived/arrays/arrays.sd10
-rw-r--r--config-model/src/test/derived/arrays/documentmanager.cfg3
-rw-r--r--config-model/src/test/derived/arrays/ilscripts.cfg1
-rw-r--r--config-model/src/test/derived/arrays/index-info.cfg8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java1
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java1
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();
}