From 4f0e63ee85a845b4b959bd70a9661b63cb590344 Mon Sep 17 00:00:00 2001 From: Jon Bratseth Date: Sun, 26 Sep 2021 19:39:35 +0000 Subject: Set statement output explicitly --- .../expressions/EncodeExpression.java | 5 +++++ .../indexinglanguage/expressions/Expression.java | 2 ++ .../expressions/ExpressionList.java | 6 ++++++ .../expressions/GuardExpression.java | 5 +++++ .../expressions/OutputExpression.java | 23 ++++++++++++++++++++++ 5 files changed, 41 insertions(+) (limited to 'indexinglanguage/src') 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 @@ -26,6 +26,11 @@ public class EncodeExpression extends Expression { this.encoder = encoder; } + @Override + public void setStatementOutputType(DataType type) { + targetType = ((TensorDataType)type).getTensorType(); + } + @Override protected void doExecute(ExecutionContext context) { StringFieldValue input = (StringFieldValue) context.getValue(); 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 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 @@ -26,6 +26,11 @@ public final class GuardExpression extends CompositeExpression { return exp; } + @Override + public void setStatementOutputType(DataType type) { + exp.setStatementOutputType(type); + } + @Override protected void doExecute(ExecutionContext context) { if (!shouldExecute && context.getAdapter() instanceof UpdateAdapter) { 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 outputFieldNames = new ArrayList<>(1); + + public List getOutputFieldNames() { return outputFieldNames; } + + @Override + public void execute(Object obj) { + outputFieldNames.add(((OutputExpression) obj).getFieldName()); + } + + @Override + public boolean check(Object obj) { + return obj instanceof OutputExpression; + } + + } + } -- cgit v1.2.3