aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2018-10-17 00:13:54 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2018-10-17 00:13:54 +0200
commit6a87e097ffd13579ae1af6b1b3c5376381229cb9 (patch)
treeb824ada6a2cb8068ffef4a2b0ff42cfd7cb1e27e
parenta957297facc0f6ed9e613245ffe2d216168039b2 (diff)
Move all input type verification to expression construction time.
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java7
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/AttributeExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java5
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java19
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java3
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java23
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GuardExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java7
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IndexExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java16
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java15
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OutputExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/PassthroughExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java22
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java7
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SummaryExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TokenizeExpression.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java10
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java11
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java10
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java18
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java24
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenTestCase.java11
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptTestCase.java2
-rw-r--r--indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java18
61 files changed, 239 insertions, 361 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
index 71a2c276091..02c68bdf967 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java
@@ -13,7 +13,7 @@ import java.math.MathContext;
/**
* @author Simon Thoresen Hult
*/
-public class ArithmeticExpression extends CompositeExpression {
+public final class ArithmeticExpression extends CompositeExpression {
public enum Operator {
@@ -46,6 +46,8 @@ public class ArithmeticExpression extends CompositeExpression {
private final Expression rhs;
public ArithmeticExpression(Expression lhs, Operator op, Expression rhs) {
+ super(null);
+ setInputType(requiredInputType(lhs, rhs));
lhs.getClass(); // throws NullPointerException
op.getClass();
rhs.getClass();
@@ -80,8 +82,7 @@ public class ArithmeticExpression extends CompositeExpression {
context.setValue(input).execute(rhs).getValue()));
}
- @Override
- public DataType requiredInputType() {
+ private DataType requiredInputType(Expression lhs, Expression rhs) {
DataType lhsType = lhs.requiredInputType();
DataType rhsType = rhs.requiredInputType();
if (lhsType == null) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/AttributeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/AttributeExpression.java
index 9ce38a9d56c..c1b3242bb19 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/AttributeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/AttributeExpression.java
@@ -4,7 +4,7 @@ package com.yahoo.vespa.indexinglanguage.expressions;
/**
* @author Simon Thoresen Hult
*/
-public class AttributeExpression extends OutputExpression {
+public final class AttributeExpression extends OutputExpression {
public AttributeExpression(String fieldName) {
super("attribute", fieldName);
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java
index c63f2c89bc6..764029f18e0 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java
@@ -2,15 +2,17 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.LongFieldValue;
import org.apache.commons.codec.binary.Base64;
/**
* @author Simon Thoresen Hult
*/
-public class Base64DecodeExpression extends Expression {
+public final class Base64DecodeExpression extends Expression {
+ public Base64DecodeExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
String input = String.valueOf(ctx.getValue());
@@ -38,11 +40,6 @@ public class Base64DecodeExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.LONG;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java
index 008aacba59d..ff698bf2dd7 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64EncodeExpression.java
@@ -10,8 +10,11 @@ import org.apache.commons.codec.binary.Base64;
/**
* @author Simon Thoresen Hult
*/
-public class Base64EncodeExpression extends Expression {
+public final class Base64EncodeExpression extends Expression {
+ public Base64EncodeExpression() {
+ super(DataType.LONG);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
long input = ((LongFieldValue)ctx.getValue()).getLong();
@@ -30,11 +33,6 @@ public class Base64EncodeExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.LONG;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java
index d2d558ab8d5..be6b6db6a9a 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java
@@ -15,10 +15,11 @@ import java.util.*;
/**
* @author Simon Thoresen Hult
*/
-public class CatExpression extends ExpressionList<Expression> {
+public final class CatExpression extends ExpressionList<Expression> {
public CatExpression(Expression... lst) {
super(Arrays.asList(lst));
+ setInputType(resolveInputType());
}
public CatExpression(Collection<? extends Expression> lst) {
@@ -62,8 +63,7 @@ public class CatExpression extends ExpressionList<Expression> {
context.setValue(resolveOutputType(types));
}
- @Override
- public DataType requiredInputType() {
+ private DataType resolveInputType() {
DataType prev = null;
for (Expression exp : this) {
DataType next = exp.requiredInputType();
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java
index 0b90922a874..68aff396c54 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ClearStateExpression.java
@@ -7,8 +7,11 @@ import com.yahoo.document.DocumentType;
/**
* @author Simon Thoresen Hult
*/
-public class ClearStateExpression extends Expression {
+public final class ClearStateExpression extends Expression {
+ public ClearStateExpression() {
+ super(null);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.clear();
@@ -20,11 +23,6 @@ public class ClearStateExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java
index 656569766dd..4da12bd0361 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CompositeExpression.java
@@ -1,11 +1,16 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.vespa.indexinglanguage.expressions;
+import com.yahoo.document.DataType;
+
/**
* @author Simon Thoresen Hult
*/
public abstract class CompositeExpression extends Expression {
+ protected CompositeExpression(DataType inputType) {
+ super(inputType);
+ }
protected static String toScriptBlock(Expression exp) {
if (exp instanceof ScriptExpression) {
return exp.toString();
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java
index 6e47b7d9a57..8d5504b2b1c 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EchoExpression.java
@@ -2,14 +2,13 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import java.io.PrintStream;
/**
* @author Simon Thoresen Hult
*/
-public class EchoExpression extends Expression {
+public final class EchoExpression extends Expression {
private final PrintStream out;
@@ -18,6 +17,7 @@ public class EchoExpression extends Expression {
}
public EchoExpression(PrintStream out) {
+ super(UnresolvedDataType.INSTANCE);
this.out = out;
}
@@ -36,11 +36,6 @@ public class EchoExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java
index 187ad14f41d..6056a9b0ca5 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExactExpression.java
@@ -2,8 +2,13 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
-import com.yahoo.document.annotation.*;
+import com.yahoo.document.annotation.Annotation;
+import com.yahoo.document.annotation.AnnotationTypes;
+import com.yahoo.document.annotation.Span;
+import com.yahoo.document.annotation.SpanList;
+import com.yahoo.document.annotation.SpanNode;
+import com.yahoo.document.annotation.SpanTree;
+import com.yahoo.document.annotation.SpanTrees;
import com.yahoo.document.datatypes.IntegerFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.language.process.TokenType;
@@ -13,8 +18,11 @@ import static com.yahoo.language.LinguisticsCase.toLowerCase;
/**
* @author Simon Thoresen Hult
*/
-public class ExactExpression extends Expression {
+public final class ExactExpression extends Expression {
+ public ExactExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
StringFieldValue input = (StringFieldValue)ctx.getValue();
@@ -44,11 +52,6 @@ public class ExactExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
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 be680abb52d..3d8da1a8b77 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
@@ -17,6 +17,14 @@ import com.yahoo.vespa.objects.Selectable;
*/
public abstract class Expression extends Selectable {
+ private DataType inputType;
+
+ protected Expression(DataType inputType) {
+ this.inputType = inputType;
+ }
+ protected void setInputType(DataType inputType) {
+ this.inputType = inputType;
+ }
public final FieldValue execute(FieldValue val) {
return execute(new ExecutionContext().setValue(val));
}
@@ -133,7 +141,6 @@ public abstract class Expression extends Selectable {
}
public final DataType verify(VerificationContext context) {
- DataType inputType = requiredInputType();
if (inputType != null) {
DataType input = context.getValue();
if (input == null) {
@@ -167,7 +174,7 @@ public abstract class Expression extends Selectable {
protected abstract void doVerify(VerificationContext context);
- public abstract DataType requiredInputType();
+ public final DataType requiredInputType() { return inputType; }
public abstract DataType createdOutputType();
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 59cf0f08cac..6c83835559c 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
@@ -18,10 +18,11 @@ public abstract class ExpressionList<T extends Expression> extends CompositeExpr
private final List<T> expressions = new LinkedList<T>();
protected ExpressionList() {
- // empty
+ super(null);
}
protected ExpressionList(Iterable<? extends T> lst) {
+ super(null);
for (T exp : lst) {
this.expressions.add(exp);
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java
index a207769d7cf..e43744420f8 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/FlattenExpression.java
@@ -2,18 +2,28 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
-import com.yahoo.document.annotation.*;
+import com.yahoo.document.annotation.Annotation;
+import com.yahoo.document.annotation.AnnotationTypes;
+import com.yahoo.document.annotation.SpanNode;
+import com.yahoo.document.annotation.SpanTree;
+import com.yahoo.document.annotation.SpanTrees;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
-import java.util.*;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
/**
* @author Simon Thoresen Hult
*/
-public class FlattenExpression extends Expression {
+public final class FlattenExpression extends Expression {
+ public FlattenExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
StringFieldValue input = (StringFieldValue)ctx.getValue();
@@ -63,11 +73,6 @@ public class FlattenExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java
index 15721db3b61..4dc2fdd0343 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java
@@ -13,11 +13,12 @@ import com.yahoo.vespa.objects.ObjectPredicate;
/**
* @author Simon Thoresen Hult
*/
-public class ForEachExpression extends CompositeExpression {
+public final class ForEachExpression extends CompositeExpression {
private final Expression exp;
public ForEachExpression(Expression exp) {
+ super(UnresolvedDataType.INSTANCE);
this.exp = exp;
}
@@ -72,11 +73,6 @@ public class ForEachExpression extends CompositeExpression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
if (exp.createdOutputType() == null) {
return null;
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
index 30d4ff37587..35bdbce1fd2 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.Field;
import com.yahoo.document.StructuredDataType;
import com.yahoo.document.datatypes.FieldValue;
@@ -11,11 +10,12 @@ import com.yahoo.document.datatypes.StructuredFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class GetFieldExpression extends Expression {
+public final class GetFieldExpression extends Expression {
private final String fieldName;
public GetFieldExpression(String fieldName) {
+ super(UnresolvedDataType.INSTANCE);
this.fieldName = fieldName;
}
@@ -53,11 +53,6 @@ public class GetFieldExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return UnresolvedDataType.INSTANCE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
index 6079652174d..50b502049dc 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java
@@ -2,16 +2,16 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
/**
* @author Simon Thoresen Hult
*/
-public class GetVarExpression extends Expression {
+public final class GetVarExpression extends Expression {
private final String varName;
public GetVarExpression(String varName) {
+ super(null);
this.varName = varName;
}
@@ -34,11 +34,6 @@ public class GetVarExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return UnresolvedDataType.INSTANCE;
}
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 474764248d8..3973dd8b317 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
@@ -11,12 +11,13 @@ import com.yahoo.vespa.objects.ObjectPredicate;
/**
* @author Simon Thoresen Hult
*/
-public class GuardExpression extends CompositeExpression {
+public final class GuardExpression extends CompositeExpression {
private final Expression exp;
private final boolean shouldExecute;
public GuardExpression(Expression exp) {
+ super(exp.requiredInputType());
this.exp = exp;
shouldExecute = shouldExecute(exp);
}
@@ -40,11 +41,6 @@ public class GuardExpression extends CompositeExpression {
}
@Override
- public DataType requiredInputType() {
- return exp.requiredInputType();
- }
-
- @Override
public DataType createdOutputType() {
return exp.createdOutputType();
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java
index fcaa2c623c0..c97771943b7 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.LongFieldValue;
import java.math.BigInteger;
@@ -10,10 +9,13 @@ import java.math.BigInteger;
/**
* @author Simon Thoresen Hult
*/
-public class HexDecodeExpression extends Expression {
+public final class HexDecodeExpression extends Expression {
private static final BigInteger ULONG_MAX = new BigInteger("18446744073709551616");
+ public HexDecodeExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
String input = String.valueOf(ctx.getValue());
@@ -42,11 +44,6 @@ public class HexDecodeExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.LONG;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java
index 81c1b0f5e8e..cf91115caad 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexEncodeExpression.java
@@ -2,15 +2,17 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.LongFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class HexEncodeExpression extends Expression {
+public final class HexEncodeExpression extends Expression {
+ public HexEncodeExpression() {
+ super(DataType.LONG);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
long input = ((LongFieldValue)ctx.getValue()).getLong();
@@ -23,11 +25,6 @@ public class HexEncodeExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.LONG;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java
index daf7dee6652..0c614c7368d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HostNameExpression.java
@@ -9,7 +9,11 @@ import static com.yahoo.vespa.defaults.Defaults.getDefaults;
/**
* @author Simon Thoresen Hult
*/
-public class HostNameExpression extends Expression {
+public final class HostNameExpression extends Expression {
+
+ public HostNameExpression() {
+ super(null);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
@@ -22,11 +26,6 @@ public class HostNameExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java
index 9940e54b6c5..16365e1264b 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java
@@ -13,7 +13,7 @@ import java.math.BigDecimal;
/**
* @author Simon Thoresen Hult
*/
-public class IfThenExpression extends CompositeExpression {
+public final class IfThenExpression extends CompositeExpression {
public static enum Comparator {
EQ("=="),
@@ -46,11 +46,13 @@ public class IfThenExpression extends CompositeExpression {
}
public IfThenExpression(Expression lhs, Comparator cmp, Expression rhs, Expression ifTrue, Expression ifFalse) {
+ super(null);
this.lhs = lhs;
this.cmp = cmp;
this.rhs = rhs;
this.ifTrue = ifTrue;
this.ifFalse = ifFalse;
+ setInputType(resolveInputType());
}
public Expression getLeftHandSide() {
@@ -112,8 +114,7 @@ public class IfThenExpression extends CompositeExpression {
select(ifFalse, predicate, operation);
}
- @Override
- public DataType requiredInputType() {
+ private DataType resolveInputType() {
DataType input = null;
input = resolveRequiredInputType(input, lhs.requiredInputType());
input = resolveRequiredInputType(input, rhs.requiredInputType());
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IndexExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IndexExpression.java
index af5e4d3a2c3..e5a046d8aa6 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IndexExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IndexExpression.java
@@ -4,7 +4,7 @@ package com.yahoo.vespa.indexinglanguage.expressions;
/**
* @author Simon Thoresen Hult
*/
-public class IndexExpression extends OutputExpression {
+public final class IndexExpression extends OutputExpression {
public IndexExpression(String fieldName) {
super("index", fieldName);
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
index e94b5df1d24..f6196cfa158 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java
@@ -14,12 +14,13 @@ import java.util.concurrent.atomic.AtomicReference;
/**
* @author Simon Thoresen Hult
*/
-public class InputExpression extends Expression {
+public final class InputExpression extends Expression {
private final String fieldName;
private FieldPath fieldPath;
public InputExpression(String fieldName) {
+ super(null);
this.fieldName = fieldName;
}
@@ -46,11 +47,6 @@ public class InputExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return UnresolvedDataType.INSTANCE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java
index 08a0cf38126..5cff622f033 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java
@@ -3,7 +3,6 @@ package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.ArrayDataType;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.Array;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
@@ -14,11 +13,12 @@ import java.util.Iterator;
/**
* @author Simon Thoresen Hult
*/
-public class JoinExpression extends Expression {
+public final class JoinExpression extends Expression {
private final String delimiter;
public JoinExpression(String delimiter) {
+ super(UnresolvedDataType.INSTANCE);
this.delimiter = delimiter;
}
@@ -53,11 +53,6 @@ public class JoinExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java
index 2843a4e0676..106045591e2 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/LowerCaseExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.StringFieldValue;
import static com.yahoo.language.LinguisticsCase.toLowerCase;
@@ -10,8 +9,11 @@ import static com.yahoo.language.LinguisticsCase.toLowerCase;
/**
* @author Simon Thoresen Hult
*/
-public class LowerCaseExpression extends Expression {
+public final class LowerCaseExpression extends Expression {
+ public LowerCaseExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(new StringFieldValue(toLowerCase(String.valueOf(ctx.getValue()))));
@@ -23,11 +25,6 @@ public class LowerCaseExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
@@ -39,10 +36,7 @@ public class LowerCaseExpression extends Expression {
@Override
public boolean equals(Object obj) {
- if (!(obj instanceof LowerCaseExpression)) {
- return false;
- }
- return true;
+ return (obj instanceof LowerCaseExpression);
}
@Override
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java
index 4d821b14230..816d6a62fd0 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NGramExpression.java
@@ -2,8 +2,11 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
-import com.yahoo.document.annotation.*;
+import com.yahoo.document.annotation.AnnotationTypes;
+import com.yahoo.document.annotation.Span;
+import com.yahoo.document.annotation.SpanList;
+import com.yahoo.document.annotation.SpanTree;
+import com.yahoo.document.annotation.SpanTrees;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.language.Linguistics;
import com.yahoo.language.process.GramSplitter;
@@ -17,7 +20,7 @@ import java.util.Iterator;
*
* @author bratseth
*/
-public class NGramExpression extends Expression {
+public final class NGramExpression extends Expression {
private final Linguistics linguistics;
private final int gramSize;
@@ -29,6 +32,7 @@ public class NGramExpression extends Expression {
* @param gramSize the gram size
*/
public NGramExpression(Linguistics linguistics, int gramSize) {
+ super(DataType.STRING);
this.linguistics = linguistics;
this.gramSize = gramSize;
}
@@ -78,11 +82,6 @@ public class NGramExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java
index cfd85dcb625..896799d4492 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NormalizeExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.language.Linguistics;
import com.yahoo.language.process.Transformer;
@@ -10,11 +9,12 @@ import com.yahoo.language.process.Transformer;
/**
* @author Simon Thoresen Hult
*/
-public class NormalizeExpression extends Expression {
+public final class NormalizeExpression extends Expression {
private final Linguistics linguistics;
public NormalizeExpression(Linguistics linguistics) {
+ super(DataType.STRING);
this.linguistics = linguistics;
}
@@ -35,11 +35,6 @@ public class NormalizeExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java
index f0dfd5a33f3..6a155d30814 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/NowExpression.java
@@ -2,13 +2,12 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.LongFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class NowExpression extends Expression {
+public final class NowExpression extends Expression {
private final Timer timer;
@@ -17,6 +16,7 @@ public class NowExpression extends Expression {
}
public NowExpression(Timer timer) {
+ super(null);
this.timer = timer;
}
@@ -35,11 +35,6 @@ public class NowExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.LONG;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java
index 06f90795bc6..8ba129b92c1 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java
@@ -16,7 +16,7 @@ import com.yahoo.search.predicate.optimization.PredicateProcessor;
/**
* @author Simon Thoresen Hult
*/
-public class OptimizePredicateExpression extends Expression {
+public final class OptimizePredicateExpression extends Expression {
private final PredicateProcessor optimizer;
@@ -25,6 +25,7 @@ public class OptimizePredicateExpression extends Expression {
}
OptimizePredicateExpression(PredicateProcessor optimizer) {
+ super(DataType.PREDICATE);
this.optimizer = optimizer;
}
@@ -61,11 +62,6 @@ public class OptimizePredicateExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.PREDICATE;
- }
-
- @Override
public DataType createdOutputType() {
return 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 41cdc8d6ccf..2e39c45203d 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
@@ -13,6 +13,7 @@ public abstract class OutputExpression extends Expression {
private final String fieldName;
public OutputExpression(String image, String fieldName) {
+ super(UnresolvedDataType.INSTANCE);
this.image = image;
this.fieldName = fieldName;
}
@@ -32,11 +33,6 @@ public abstract class OutputExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java
index 0f4bf717fa4..70c9463eb85 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ParenthesisExpression.java
@@ -14,6 +14,7 @@ public class ParenthesisExpression extends CompositeExpression {
private final Expression innerExp;
public ParenthesisExpression(Expression innerExp) {
+ super(innerExp.requiredInputType());
this.innerExp = innerExp;
}
@@ -32,11 +33,6 @@ public class ParenthesisExpression extends CompositeExpression {
}
@Override
- public DataType requiredInputType() {
- return innerExp.requiredInputType();
- }
-
- @Override
public DataType createdOutputType() {
return innerExp.createdOutputType();
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/PassthroughExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/PassthroughExpression.java
index 7c95fd5b5a9..9c87883c35d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/PassthroughExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/PassthroughExpression.java
@@ -6,7 +6,7 @@ package com.yahoo.vespa.indexinglanguage.expressions;
*
* @author steinar
*/
-public class PassthroughExpression extends OutputExpression {
+public final class PassthroughExpression extends OutputExpression {
private static final String PASSTHROUGH = "passthrough";
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java
index 54911b7c617..a00714798cf 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/RandomExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.IntegerFieldValue;
import java.util.concurrent.ThreadLocalRandom;
@@ -10,7 +9,7 @@ import java.util.concurrent.ThreadLocalRandom;
/**
* @author Simon Thoresen Hult
*/
-public class RandomExpression extends Expression {
+public final class RandomExpression extends Expression {
private final Integer max;
@@ -19,6 +18,7 @@ public class RandomExpression extends Expression {
}
public RandomExpression(Integer max) {
+ super(null);
this.max = max;
}
@@ -43,11 +43,6 @@ public class RandomExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.INT;
}
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 4843caaccf7..275ca58d4db 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
@@ -17,23 +17,21 @@ import java.util.Iterator;
/**
* @author Simon Thoresen Hult
*/
-public class ScriptExpression extends ExpressionList<StatementExpression> {
-
- private final DataType inputType;
+public final class ScriptExpression extends ExpressionList<StatementExpression> {
public ScriptExpression() {
super();
- inputType = resolveInputTypeAndcatch();
+ setInputType(resolveInputType());
}
public ScriptExpression(StatementExpression... lst) {
super(Arrays.asList(lst));
- inputType = resolveInputTypeAndcatch();
+ setInputType(resolveInputType());
}
public ScriptExpression(Collection<? extends StatementExpression> lst) {
super(lst);
- inputType = resolveInputTypeAndcatch();
+ setInputType(resolveInputType());
}
@Override
@@ -54,18 +52,6 @@ public class ScriptExpression extends ExpressionList<StatementExpression> {
context.setValue(input);
}
- @Override
- public DataType requiredInputType() {
- return inputType != null ? inputType : resolveInputType();
- }
-
- private DataType resolveInputTypeAndcatch() {
- try {
- return resolveInputType();
- } catch (VerificationException e) {
- return null;
- }
- }
private DataType resolveInputType() {
DataType prev = null;
for (Expression exp : this) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java
index 35d33e39bdd..b511410dd10 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java
@@ -15,7 +15,7 @@ import java.util.List;
/**
* @author Simon Thoresen Hult
*/
-public class SelectInputExpression extends CompositeExpression {
+public final class SelectInputExpression extends CompositeExpression {
private final List<Pair<String, Expression>> cases;
@@ -25,6 +25,7 @@ public class SelectInputExpression extends CompositeExpression {
}
public SelectInputExpression(List<Pair<String, Expression>> cases) {
+ super(null);
this.cases = cases;
}
@@ -62,11 +63,6 @@ public class SelectInputExpression extends CompositeExpression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java
index 049f08aef4a..8ec766cd1e1 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetLanguageExpression.java
@@ -9,8 +9,11 @@ import com.yahoo.language.Language;
*
* @author Simon Thoresen Hult
*/
-public class SetLanguageExpression extends Expression {
+public final class SetLanguageExpression extends Expression {
+ public SetLanguageExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setLanguage(Language.fromLanguageTag(String.valueOf(ctx.getValue())));
@@ -22,11 +25,6 @@ public class SetLanguageExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java
index 9605956e8f0..f013e22ebc3 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.LongFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
@@ -11,11 +10,12 @@ import com.yahoo.text.StringUtilities;
/**
* @author Simon Thoresen Hult
*/
-public class SetValueExpression extends Expression {
+public final class SetValueExpression extends Expression {
private final FieldValue value;
public SetValueExpression(FieldValue value) {
+ super(null);
value.getClass(); // throws NullPointerException
this.value = value;
}
@@ -35,11 +35,6 @@ public class SetValueExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return value.getDataType();
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java
index 3b23179554c..f15982796ce 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java
@@ -2,16 +2,16 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
/**
* @author Simon Thoresen Hult
*/
-public class SetVarExpression extends Expression {
+public final class SetVarExpression extends Expression {
private final String varName;
public SetVarExpression(String varName) {
+ super(UnresolvedDataType.INSTANCE);
this.varName = varName;
}
@@ -36,11 +36,6 @@ public class SetVarExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java
index 1004fc74704..1ed862f4798 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SplitExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.Array;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.text.StringUtilities;
@@ -12,11 +11,12 @@ import java.util.regex.Pattern;
/**
* @author Simon Thoresen Hult
*/
-public class SplitExpression extends Expression {
+public final class SplitExpression extends Expression {
private final Pattern splitPattern;
public SplitExpression(String splitString) {
+ super(DataType.STRING);
this.splitPattern = Pattern.compile(splitString);
}
@@ -43,11 +43,6 @@ public class SplitExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.getArray(DataType.STRING);
}
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 ecd0be8b2fa..eb6b5563584 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
@@ -17,14 +17,16 @@ import java.util.List;
/**
* @author Simon Thoresen Hult
*/
-public class StatementExpression extends ExpressionList<Expression> {
+public final class StatementExpression extends ExpressionList<Expression> {
public StatementExpression(Expression... lst) {
this(Arrays.asList(lst));
+ setInputType(resolveInputType());
}
public StatementExpression(Iterable<Expression> lst) {
super(filterList(lst));
+ setInputType(resolveInputType());
}
@Override
@@ -41,8 +43,7 @@ public class StatementExpression extends ExpressionList<Expression> {
}
}
- @Override
- public DataType requiredInputType() {
+ private DataType resolveInputType() {
for (Expression exp : this) {
DataType type = exp.requiredInputType();
if (type != null) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java
index 79b6f7ec81f..4b30d646d53 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SubstringExpression.java
@@ -2,18 +2,18 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.StringFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class SubstringExpression extends Expression {
+public final class SubstringExpression extends Expression {
private final int from;
private final int to;
public SubstringExpression(int from, int to) {
+ super(DataType.STRING);
if (from < 0 || to < 0 || to < from) {
throw new IndexOutOfBoundsException();
}
@@ -49,11 +49,6 @@ public class SubstringExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SummaryExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SummaryExpression.java
index bf1a121d7c4..ae9a817a77d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SummaryExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SummaryExpression.java
@@ -4,7 +4,7 @@ package com.yahoo.vespa.indexinglanguage.expressions;
/**
* @author Simon Thoresen Hult
*/
-public class SummaryExpression extends OutputExpression {
+public final class SummaryExpression extends OutputExpression {
public SummaryExpression(String fieldName) {
super("summary", fieldName);
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java
index 41d68057891..72dec19ef4e 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java
@@ -16,7 +16,7 @@ import java.util.Map;
/**
* @author Simon Thoresen Hult
*/
-public class SwitchExpression extends CompositeExpression {
+public final class SwitchExpression extends CompositeExpression {
private final Map<String, Expression> cases = new LinkedHashMap<>();
private final Expression defaultExp;
@@ -26,6 +26,7 @@ public class SwitchExpression extends CompositeExpression {
}
public <T extends Expression> SwitchExpression(Map<String, T> cases, Expression defaultExp) {
+ super(null);
this.defaultExp = defaultExp;
for (Map.Entry<String, T> entry : cases.entrySet()) {
this.cases.put(entry.getKey(), entry.getValue());
@@ -90,11 +91,6 @@ public class SwitchExpression extends CompositeExpression {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java
index af572e38487..04ce7d2be39 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ThisExpression.java
@@ -7,8 +7,11 @@ import com.yahoo.document.DocumentType;
/**
* @author Simon Thoresen Hult
*/
-public class ThisExpression extends Expression {
+public final class ThisExpression extends Expression {
+ public ThisExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
// empty
@@ -20,11 +23,6 @@ public class ThisExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return UnresolvedDataType.INSTANCE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java
index 980861dd1fd..cad3f1f9c04 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToArrayExpression.java
@@ -3,15 +3,17 @@ package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.ArrayDataType;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.Array;
import com.yahoo.document.datatypes.FieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class ToArrayExpression extends Expression {
+public final class ToArrayExpression extends Expression {
+ public ToArrayExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@SuppressWarnings({ "unchecked", "rawtypes" })
@Override
protected void doExecute(ExecutionContext ctx) {
@@ -31,11 +33,6 @@ public class ToArrayExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return UnresolvedDataType.INSTANCE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java
index cf16351b573..5348493a8fd 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToByteExpression.java
@@ -2,14 +2,16 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.ByteFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class ToByteExpression extends Expression {
+public final class ToByteExpression extends Expression {
+ public ToByteExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(new ByteFieldValue(Byte.valueOf(String.valueOf(ctx.getValue()))));
@@ -21,11 +23,6 @@ public class ToByteExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.BYTE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java
index 6f86f18cb38..c9a04693a25 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToDoubleExpression.java
@@ -2,14 +2,16 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.DoubleFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class ToDoubleExpression extends Expression {
+public final class ToDoubleExpression extends Expression {
+ public ToDoubleExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(new DoubleFieldValue(Double.valueOf(String.valueOf(ctx.getValue()))));
@@ -21,11 +23,6 @@ public class ToDoubleExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.DOUBLE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java
index 31884d29633..b255702ada3 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToFloatExpression.java
@@ -2,14 +2,16 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.FloatFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class ToFloatExpression extends Expression {
+public final class ToFloatExpression extends Expression {
+ public ToFloatExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(new FloatFieldValue(Float.valueOf(String.valueOf(ctx.getValue()))));
@@ -21,11 +23,6 @@ public class ToFloatExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.FLOAT;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java
index c0c23b04350..7efc25d8400 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToIntegerExpression.java
@@ -2,14 +2,16 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.IntegerFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class ToIntegerExpression extends Expression {
+public final class ToIntegerExpression extends Expression {
+ public ToIntegerExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(new IntegerFieldValue(Integer.valueOf(String.valueOf(ctx.getValue()))));
@@ -21,11 +23,6 @@ public class ToIntegerExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.INT;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java
index ddde87a086b..74d43fc1693 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToLongExpression.java
@@ -2,14 +2,16 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.LongFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class ToLongExpression extends Expression {
+public final class ToLongExpression extends Expression {
+ public ToLongExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(new LongFieldValue(Long.valueOf(String.valueOf(ctx.getValue()))));
@@ -21,11 +23,6 @@ public class ToLongExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.LONG;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java
index bb50422d81d..4c7cd348fbb 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToPositionExpression.java
@@ -8,8 +8,11 @@ import com.yahoo.document.PositionDataType;
/**
* @author Simon Thoresen Hult
*/
-public class ToPositionExpression extends Expression {
+public final class ToPositionExpression extends Expression {
+ public ToPositionExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(PositionDataType.fromString(String.valueOf(ctx.getValue())));
@@ -21,11 +24,6 @@ public class ToPositionExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return PositionDataType.INSTANCE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java
index 298292c03c6..36f896a0b7f 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToStringExpression.java
@@ -7,8 +7,11 @@ import com.yahoo.document.datatypes.StringFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class ToStringExpression extends Expression {
+public final class ToStringExpression extends Expression {
+ public ToStringExpression() {
+ super(UnresolvedDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
ctx.setValue(new StringFieldValue(String.valueOf(ctx.getValue())));
@@ -20,11 +23,6 @@ public class ToStringExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java
index 0108c2db98d..8d511d442df 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ToWsetExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.WeightedSetDataType;
import com.yahoo.document.datatypes.FieldValue;
import com.yahoo.document.datatypes.WeightedSet;
@@ -10,12 +9,13 @@ import com.yahoo.document.datatypes.WeightedSet;
/**
* @author Simon Thoresen Hult
*/
-public class ToWsetExpression extends Expression {
+public final class ToWsetExpression extends Expression {
private final Boolean createIfNonExistent;
private final Boolean removeIfZero;
public ToWsetExpression(boolean createIfNonExistent, boolean removeIfZero) {
+ super(UnresolvedDataType.INSTANCE);
this.createIfNonExistent = createIfNonExistent;
this.removeIfZero = removeIfZero;
}
@@ -47,11 +47,6 @@ public class ToWsetExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return UnresolvedDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return UnresolvedDataType.INSTANCE;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TokenizeExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TokenizeExpression.java
index 0a1a9e0be1a..1e7983d9bed 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TokenizeExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TokenizeExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.language.Language;
import com.yahoo.language.Linguistics;
@@ -13,12 +12,13 @@ import com.yahoo.vespa.indexinglanguage.linguistics.LinguisticsAnnotator;
/**
* @author Simon Thoresen Hult
*/
-public class TokenizeExpression extends Expression {
+public final class TokenizeExpression extends Expression {
private final Linguistics linguistics;
private final AnnotatorConfig config;
public TokenizeExpression(Linguistics linguistics, AnnotatorConfig config) {
+ super(DataType.STRING);
this.linguistics = linguistics;
this.config = config;
}
@@ -52,11 +52,6 @@ public class TokenizeExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java
index b26048e1867..14a6c8f9b04 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/TrimExpression.java
@@ -8,7 +8,10 @@ import com.yahoo.document.datatypes.StringFieldValue;
/**
* @author Simon Thoresen Hult
*/
-public class TrimExpression extends Expression {
+public final class TrimExpression extends Expression {
+ public TrimExpression() {
+ super(DataType.STRING);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
@@ -21,11 +24,6 @@ public class TrimExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return DataType.STRING;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.STRING;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java
index 9e77c439303..ed56cdfb604 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ZCurveExpression.java
@@ -2,7 +2,6 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.PositionDataType;
import com.yahoo.document.datatypes.IntegerFieldValue;
import com.yahoo.document.datatypes.LongFieldValue;
@@ -12,8 +11,11 @@ import com.yahoo.geo.ZCurve;
/**
* @author Simon Thoresen Hult
*/
-public class ZCurveExpression extends Expression {
+public final class ZCurveExpression extends Expression {
+ public ZCurveExpression() {
+ super(PositionDataType.INSTANCE);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
Struct input = ((Struct)ctx.getValue());
@@ -37,11 +39,6 @@ public class ZCurveExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return PositionDataType.INSTANCE;
- }
-
- @Override
public DataType createdOutputType() {
return DataType.LONG;
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java
index ae7fa0f3123..5c86d0fe836 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/ExpressionConverterTestCase.java
@@ -3,9 +3,7 @@ package com.yahoo.vespa.indexinglanguage;
import com.yahoo.collections.Pair;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.IntegerFieldValue;
-import com.yahoo.language.Linguistics;
import com.yahoo.language.simple.SimpleLinguistics;
import com.yahoo.vespa.indexinglanguage.expressions.ArithmeticExpression;
import com.yahoo.vespa.indexinglanguage.expressions.AttributeExpression;
@@ -258,6 +256,9 @@ public class ExpressionConverterTestCase {
private static class MyComposite extends CompositeExpression {
+ MyComposite() {
+ super(null);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
@@ -269,11 +270,6 @@ public class ExpressionConverterTestCase {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java
index 0f2f8353791..e837b30707d 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionAssert.java
@@ -25,6 +25,24 @@ class ExpressionAssert {
assertVerifyCtxThrows(new VerificationContext().setValue(valueBefore), exp, expectedException);
}
+ interface CreateExpression {
+ Expression create();
+ }
+ public static void assertVerifyThrows(DataType valueBefore, CreateExpression createExp, String expectedException) {
+ assertVerifyCtxThrows(new VerificationContext().setValue(valueBefore), createExp, expectedException);
+ }
+
+ public static void assertVerifyCtxThrows(VerificationContext ctx, CreateExpression createExp, String expectedException) {
+ try {
+ Expression exp = createExp.create();
+ exp.verify(ctx);
+ fail();
+ } catch (VerificationException e) {
+ if (!Pattern.matches(expectedException, e.getMessage())) {
+ assertEquals(expectedException, e.getMessage());
+ }
+ }
+ }
public static void assertVerifyCtxThrows(VerificationContext ctx, Expression exp, String expectedException) {
try {
exp.verify(ctx);
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java
index 867d9ef0b23..b7b4a5cce1a 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachTestCase.java
@@ -2,10 +2,14 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.Field;
import com.yahoo.document.StructDataType;
-import com.yahoo.document.datatypes.*;
+import com.yahoo.document.datatypes.Array;
+import com.yahoo.document.datatypes.FieldValue;
+import com.yahoo.document.datatypes.IntegerFieldValue;
+import com.yahoo.document.datatypes.StringFieldValue;
+import com.yahoo.document.datatypes.Struct;
+import com.yahoo.document.datatypes.WeightedSet;
import com.yahoo.vespa.indexinglanguage.SimpleTestAdapter;
import org.junit.Test;
@@ -14,7 +18,13 @@ import java.util.List;
import static com.yahoo.vespa.indexinglanguage.expressions.ExpressionAssert.assertVerify;
import static com.yahoo.vespa.indexinglanguage.expressions.ExpressionAssert.assertVerifyThrows;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertSame;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
/**
* @author Simon Thoresen Hult
@@ -232,6 +242,9 @@ public class ForEachTestCase {
List<FieldValue> lst = new LinkedList<>();
+ MyCollector() {
+ super(null);
+ }
@Override
protected void doExecute(ExecutionContext ctx) {
lst.add(ctx.getValue());
@@ -243,11 +256,6 @@ public class ForEachTestCase {
}
@Override
- public DataType requiredInputType() {
- return null;
- }
-
- @Override
public DataType createdOutputType() {
return null;
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenTestCase.java
index 01c6b0f122d..4d7f1cb02d1 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenTestCase.java
@@ -44,16 +44,16 @@ public class IfThenTestCase {
assertVerify(DataType.STRING, exp, DataType.STRING);
assertVerifyThrows(null, exp, "Expected string input, got null.");
assertVerifyThrows(DataType.INT, exp, "Expected string input, got int.");
- assertVerifyThrows(null, newRequiredInput(DataType.INT, Comparator.EQ, DataType.STRING,
+ assertVerifyThrows(null, () -> newRequiredInput(DataType.INT, Comparator.EQ, DataType.STRING,
DataType.STRING, DataType.STRING),
"Operands require conflicting input types, int vs string.");
- assertVerifyThrows(null, newRequiredInput(DataType.STRING, Comparator.EQ, DataType.INT,
+ assertVerifyThrows(null, () -> newRequiredInput(DataType.STRING, Comparator.EQ, DataType.INT,
DataType.STRING, DataType.STRING),
"Operands require conflicting input types, string vs int.");
- assertVerifyThrows(null, newRequiredInput(DataType.STRING, Comparator.EQ, DataType.STRING,
+ assertVerifyThrows(null, () -> newRequiredInput(DataType.STRING, Comparator.EQ, DataType.STRING,
DataType.INT, DataType.STRING),
"Operands require conflicting input types, string vs int.");
- assertVerifyThrows(null, newRequiredInput(DataType.STRING, Comparator.EQ, DataType.STRING,
+ assertVerifyThrows(null, () -> newRequiredInput(DataType.STRING, Comparator.EQ, DataType.STRING,
DataType.STRING, DataType.INT),
"Operands require conflicting input types, string vs int.");
}
@@ -262,8 +262,7 @@ public class IfThenTestCase {
new Field("ifFalse", DataType.INT));
}
- private static Expression newRequiredInput(DataType lhs, Comparator cmp, DataType rhs, DataType ifTrue,
- DataType ifFalse) {
+ private static Expression newRequiredInput(DataType lhs, Comparator cmp, DataType rhs, DataType ifTrue, DataType ifFalse) {
return new IfThenExpression(new SimpleExpression().setRequiredInput(lhs), cmp,
new SimpleExpression().setRequiredInput(rhs),
new SimpleExpression().setRequiredInput(ifTrue),
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptTestCase.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptTestCase.java
index b260f2933fb..d35b678e0d8 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptTestCase.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptTestCase.java
@@ -57,7 +57,7 @@ public class ScriptTestCase {
assertVerifyThrows(null, exp, "Expected int input, got null.");
assertVerifyThrows(DataType.STRING, exp, "Expected int input, got string.");
- assertVerifyThrows(null, newScript(newStatement(SimpleExpression.newConversion(DataType.INT, DataType.STRING)),
+ assertVerifyThrows(null, () -> newScript(newStatement(SimpleExpression.newConversion(DataType.INT, DataType.STRING)),
newStatement(SimpleExpression.newConversion(DataType.STRING, DataType.INT))),
"Statements require conflicting input types, int vs string.");
}
diff --git a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java
index 0a8c8697bb7..c771389ac1b 100644
--- a/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java
+++ b/indexinglanguage/src/test/java/com/yahoo/vespa/indexinglanguage/expressions/SimpleExpression.java
@@ -2,21 +2,22 @@
package com.yahoo.vespa.indexinglanguage.expressions;
import com.yahoo.document.DataType;
-import com.yahoo.document.DocumentType;
import com.yahoo.document.datatypes.FieldValue;
/**
* @author Simon Thoresen Hult
*/
-class SimpleExpression extends Expression {
+final class SimpleExpression extends Expression {
private boolean hasExecuteValue = false;
private boolean hasVerifyValue = false;
private FieldValue executeValue;
private DataType verifyValue;
- private DataType requiredInput;
private DataType createdOutput;
+ public SimpleExpression() {
+ super(null);
+ }
public SimpleExpression setExecuteValue(FieldValue executeValue) {
this.hasExecuteValue = true;
this.executeValue = executeValue;
@@ -30,7 +31,7 @@ class SimpleExpression extends Expression {
}
public SimpleExpression setRequiredInput(DataType requiredInput) {
- this.requiredInput = requiredInput;
+ setInputType(requiredInput);
return this;
}
@@ -54,18 +55,13 @@ class SimpleExpression extends Expression {
}
@Override
- public DataType requiredInputType() {
- return requiredInput;
- }
-
- @Override
public DataType createdOutputType() {
return createdOutput;
}
@Override
public int hashCode() {
- return hashCode(executeValue) + hashCode(verifyValue) + hashCode(requiredInput) + hashCode(createdOutput);
+ return hashCode(executeValue) + hashCode(verifyValue) + hashCode(requiredInputType()) + hashCode(createdOutput);
}
@Override
@@ -86,7 +82,7 @@ class SimpleExpression extends Expression {
if (!equals(verifyValue, rhs.verifyValue)) {
return false;
}
- if (!equals(requiredInput, rhs.requiredInput)) {
+ if (!equals(requiredInputType(), rhs.requiredInputType())) {
return false;
}
if (!equals(createdOutput, rhs.createdOutput)) {