summaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2023-01-23 15:25:03 +0100
committerJon Bratseth <bratseth@gmail.com>2023-01-23 15:25:03 +0100
commitcce300207e8ff854debcdd0a9920d8e71bacc6a1 (patch)
tree05fe21f16127c44d5e1b036ad5ae5351fed0f1ac /indexinglanguage
parentfaa31b4d439026b5e6e81639ac3f57bbd572a53f (diff)
Skip statements on partial updates only
Diffstat (limited to 'indexinglanguage')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java12
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java4
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java5
6 files changed, 26 insertions, 4 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java
index db0c470797e..4c64809c546 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/DocumentAdapter.java
@@ -13,4 +13,7 @@ public interface DocumentAdapter extends FieldValueAdapter {
Document getUpdatableOutput();
+ @Override
+ default boolean isComplete() { return true; }
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java
index c6c0b6d9226..d4de467b25d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/UpdateAdapter.java
@@ -13,4 +13,7 @@ public interface UpdateAdapter extends FieldValueAdapter {
DocumentUpdate getOutput();
Expression getExpression(Expression expression);
+ @Override
+ default boolean isComplete() { return false; }
+
}
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 d463bee647e..f01f2fcc9fb 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
@@ -30,12 +30,18 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl
this.language = Language.UNKNOWN;
}
- public ExecutionContext execute(Expression exp) {
- if (exp != null)
- exp.execute(this);
+ public ExecutionContext execute(Expression expression) {
+ if (expression != null)
+ expression.execute(this);
return this;
}
+ /**
+ * Returns whether this is for a complete execution of all statements of a script,
+ * or a partial execution of only the statements accessing the available data.
+ */
+ public boolean isComplete() { return adapter == null ? false : adapter.isComplete(); }
+
@Override
public DataType getInputType(Expression exp, String fieldName) {
return adapter.getInputType(exp, fieldName);
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java
index 6f6074db2fd..e8ec1d33446 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FieldValueAdapter.java
@@ -14,4 +14,7 @@ public interface FieldValueAdapter extends FieldTypeAdapter {
FieldValueAdapter setOutputValue(Expression exp, String fieldName, FieldValue fieldValue);
+ /** Returns true if this has values for all possibly existing inputs, or represents a partial set of values. */
+ boolean isComplete();
+
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
index 8287252b268..f0c37960a99 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java
@@ -39,8 +39,10 @@ public final class ScriptExpression extends ExpressionList<StatementExpression>
protected void doExecute(ExecutionContext context) {
FieldValue input = context.getValue();
for (StatementExpression statement : this) {
- if (statement.getInputFields().isEmpty() || containsAtLeastOneInputFrom(statement.getInputFields(), context))
+ if (context.isComplete() ||
+ (statement.getInputFields().isEmpty() || containsAtLeastOneInputFrom(statement.getInputFields(), context))) {
context.setValue(input).execute(statement);
+ }
}
context.setValue(input);
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java
index cfb82034545..000d4aaecdd 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/SimpleTestAdapter.java
@@ -69,4 +69,9 @@ public class SimpleTestAdapter implements FieldValueAdapter {
return this;
}
+ @Override
+ public boolean isComplete() {
+ return false;
+ }
+
}