aboutsummaryrefslogtreecommitdiffstats
path: root/indexinglanguage
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-09-17 11:32:25 +0200
committerJon Bratseth <bratseth@gmail.com>2021-09-17 11:32:25 +0200
commit60d7fde70f70961f2d0aa90ccc372dce2338bbe9 (patch)
tree9870da956f50dfa2e1e23ecba58e6d318ae20f90 /indexinglanguage
parent938cae4d9818d713f2897ed3d3eed4c8772a0771 (diff)
Set output type
Diffstat (limited to 'indexinglanguage')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java24
2 files changed, 24 insertions, 9 deletions
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 a4f1e3a5ca4..6be1f78d376 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
@@ -20,6 +20,7 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl
private final FieldValueAdapter adapter;
private FieldValue value;
private Language language;
+ private DataType outputType = null;
public ExecutionContext() {
this(null);
@@ -63,6 +64,14 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl
adapter.tryOutputType(exp, fieldName, valueType);
}
+ /** Sets the output type created by this execution */
+ public void setOutputType(DataType type) {
+ this.outputType = type;
+ }
+
+ /** Returns the output type created by this execution, or null if none */
+ public DataType getOutputType() { return outputType; }
+
@Override
public ExecutionContext setOutputValue(Expression exp, String fieldName, FieldValue fieldValue) {
if (adapter == null) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java
index 599ab6cb755..b640c43f3b2 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java
@@ -20,6 +20,9 @@ import java.util.List;
*/
public final class StatementExpression extends ExpressionList<Expression> {
+ /** The type of the output created by this statement, or null if no output */
+ private final DataType outputType;
+
public StatementExpression(Expression... lst) {
this(Arrays.asList(lst));
}
@@ -30,10 +33,12 @@ public final class StatementExpression extends ExpressionList<Expression> {
private StatementExpression(Iterable<Expression> list, Object unused) {
super(list, resolveInputType(list));
+ outputType = resolveOutputType(list);
}
@Override
protected void doExecute(ExecutionContext context) {
+ context.setOutputType(createdOutputType());
for (Expression exp : this) {
context.execute(exp);
}
@@ -61,18 +66,20 @@ public final class StatementExpression extends ExpressionList<Expression> {
return null;
}
- @Override
- public DataType createdOutputType() {
- for (int i = size(); --i >= 0; ) {
- DataType type = get(i).createdOutputType();
- if (type != null) {
- return type;
- }
+ private static DataType resolveOutputType(Iterable<Expression> expressions) {
+ DataType lastOutput = null;
+ for (var expression : expressions) {
+ DataType output = expression.createdOutputType();
+ if (output != null)
+ lastOutput = output;
}
- return null;
+ return lastOutput;
}
@Override
+ public DataType createdOutputType() { return outputType; }
+
+ @Override
public String toString() {
StringBuilder ret = new StringBuilder();
for (Iterator<Expression> it = iterator(); it.hasNext();) {
@@ -90,7 +97,6 @@ public final class StatementExpression extends ExpressionList<Expression> {
}
/** Creates an expression with simple lingustics for testing */
- @SuppressWarnings("deprecation")
public static StatementExpression fromString(String expression) throws ParseException {
return fromString(expression, new SimpleLinguistics());
}