diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-09-26 19:39:35 +0000 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-09-26 19:39:35 +0000 |
commit | 4f0e63ee85a845b4b959bd70a9661b63cb590344 (patch) | |
tree | 639fdd868bb851f1b65dd184f71702c5fcaac35f /indexinglanguage/src | |
parent | 1abb5adacbdbcfad7070243630164e4d31f68773 (diff) |
Set statement output explicitly
Diffstat (limited to 'indexinglanguage/src')
5 files changed, 41 insertions, 0 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java index 09034659ad0..f84da9ddef8 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EncodeExpression.java @@ -27,6 +27,11 @@ public class EncodeExpression extends Expression { } @Override + public void setStatementOutputType(DataType type) { + targetType = ((TensorDataType)type).getTensorType(); + } + + @Override protected void doExecute(ExecutionContext context) { StringFieldValue input = (StringFieldValue) context.getValue(); Tensor tensor = encoder.encode(input.getString(), context.getLanguage(), targetType); diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java index a121df8e5a8..67459c2b035 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java @@ -31,6 +31,8 @@ public abstract class Expression extends Selectable { this.inputType = inputType; } + public void setStatementOutputType(DataType type) {} + public final FieldValue execute(FieldValue val) { return execute(new ExecutionContext().setValue(val)); } diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java index 0ac195efb5d..0f7c2a411de 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java @@ -24,6 +24,12 @@ public abstract class ExpressionList<T extends Expression> extends CompositeExpr } } + @Override + public void setStatementOutputType(DataType type) { + for (Expression expression : expressions) + expression.setStatementOutputType(type); + } + public int size() { return expressions.size(); } diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java index 179f202788c..78c261caccb 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java @@ -27,6 +27,11 @@ public final class GuardExpression extends CompositeExpression { } @Override + public void setStatementOutputType(DataType type) { + exp.setStatementOutputType(type); + } + + @Override protected void doExecute(ExecutionContext context) { if (!shouldExecute && context.getAdapter() instanceof UpdateAdapter) { context.setValue(null); diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java index 398c2751bd8..267fb6fc51b 100644 --- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java +++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java @@ -2,6 +2,11 @@ package com.yahoo.vespa.indexinglanguage.expressions; import com.yahoo.document.DataType; +import com.yahoo.vespa.objects.ObjectOperation; +import com.yahoo.vespa.objects.ObjectPredicate; + +import java.util.ArrayList; +import java.util.List; /** * @author Simon Thoresen Hult @@ -58,4 +63,22 @@ public abstract class OutputExpression extends Expression { return getClass().hashCode() + (fieldName != null ? fieldName.hashCode() : 0); } + public static class OutputFieldNameExtractor implements ObjectOperation, ObjectPredicate { + + private final List<String> outputFieldNames = new ArrayList<>(1); + + public List<String> getOutputFieldNames() { return outputFieldNames; } + + @Override + public void execute(Object obj) { + outputFieldNames.add(((OutputExpression) obj).getFieldName()); + } + + @Override + public boolean check(Object obj) { + return obj instanceof OutputExpression; + } + + } + } |