diff options
author | Jon Bratseth <bratseth@gmail.com> | 2023-01-23 15:25:03 +0100 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2023-01-23 15:25:03 +0100 |
commit | cce300207e8ff854debcdd0a9920d8e71bacc6a1 (patch) | |
tree | 05fe21f16127c44d5e1b036ad5ae5351fed0f1ac /indexinglanguage | |
parent | faa31b4d439026b5e6e81639ac3f57bbd572a53f (diff) |
Skip statements on partial updates only
Diffstat (limited to 'indexinglanguage')
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; + } + } |