From 6a87e097ffd13579ae1af6b1b3c5376381229cb9 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Wed, 17 Oct 2018 00:13:54 +0200 Subject: Move all input type verification to expression construction time. --- .../expressions/ArithmeticExpression.java | 7 ++++--- .../expressions/AttributeExpression.java | 2 +- .../expressions/Base64DecodeExpression.java | 11 ++++------ .../expressions/Base64EncodeExpression.java | 10 ++++----- .../expressions/CatExpression.java | 6 +++--- .../expressions/ClearStateExpression.java | 10 ++++----- .../expressions/CompositeExpression.java | 5 +++++ .../expressions/EchoExpression.java | 9 ++------ .../expressions/ExactExpression.java | 19 +++++++++-------- .../indexinglanguage/expressions/Expression.java | 11 ++++++++-- .../expressions/ExpressionList.java | 3 ++- .../expressions/FlattenExpression.java | 23 +++++++++++++-------- .../expressions/ForEachExpression.java | 8 ++------ .../expressions/GetFieldExpression.java | 9 ++------ .../expressions/GetVarExpression.java | 9 ++------ .../expressions/GuardExpression.java | 8 ++------ .../expressions/HexDecodeExpression.java | 11 ++++------ .../expressions/HexEncodeExpression.java | 11 ++++------ .../expressions/HostNameExpression.java | 11 +++++----- .../expressions/IfThenExpression.java | 7 ++++--- .../expressions/IndexExpression.java | 2 +- .../expressions/InputExpression.java | 8 ++------ .../expressions/JoinExpression.java | 9 ++------ .../expressions/LowerCaseExpression.java | 16 +++++---------- .../expressions/NGramExpression.java | 15 +++++++------- .../expressions/NormalizeExpression.java | 9 ++------ .../expressions/NowExpression.java | 9 ++------ .../expressions/OptimizePredicateExpression.java | 8 ++------ .../expressions/OutputExpression.java | 6 +----- .../expressions/ParenthesisExpression.java | 6 +----- .../expressions/PassthroughExpression.java | 2 +- .../expressions/RandomExpression.java | 9 ++------ .../expressions/ScriptExpression.java | 22 ++++---------------- .../expressions/SelectInputExpression.java | 8 ++------ .../expressions/SetLanguageExpression.java | 10 ++++----- .../expressions/SetValueExpression.java | 9 ++------ .../expressions/SetVarExpression.java | 9 ++------ .../expressions/SplitExpression.java | 9 ++------ .../expressions/StatementExpression.java | 7 ++++--- .../expressions/SubstringExpression.java | 9 ++------ .../expressions/SummaryExpression.java | 2 +- .../expressions/SwitchExpression.java | 8 ++------ .../expressions/ThisExpression.java | 10 ++++----- .../expressions/ToArrayExpression.java | 11 ++++------ .../expressions/ToByteExpression.java | 11 ++++------ .../expressions/ToDoubleExpression.java | 11 ++++------ .../expressions/ToFloatExpression.java | 11 ++++------ .../expressions/ToIntegerExpression.java | 11 ++++------ .../expressions/ToLongExpression.java | 11 ++++------ .../expressions/ToPositionExpression.java | 10 ++++----- .../expressions/ToStringExpression.java | 10 ++++----- .../expressions/ToWsetExpression.java | 9 ++------ .../expressions/TokenizeExpression.java | 9 ++------ .../expressions/TrimExpression.java | 10 ++++----- .../expressions/ZCurveExpression.java | 11 ++++------ .../ExpressionConverterTestCase.java | 10 +++------ .../expressions/ExpressionAssert.java | 18 ++++++++++++++++ .../expressions/ForEachTestCase.java | 24 ++++++++++++++-------- .../expressions/IfThenTestCase.java | 11 +++++----- .../expressions/ScriptTestCase.java | 2 +- .../expressions/SimpleExpression.java | 18 +++++++--------- 61 files changed, 239 insertions(+), 361 deletions(-) (limited to 'indexinglanguage') 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()); @@ -37,11 +39,6 @@ public class Base64DecodeExpression extends Expression { context.setValue(createdOutputType()); } - @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(); @@ -29,11 +32,6 @@ public class Base64EncodeExpression extends Expression { context.setValue(createdOutputType()); } - @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 { +public final class CatExpression extends ExpressionList { public CatExpression(Expression... lst) { super(Arrays.asList(lst)); + setInputType(resolveInputType()); } public CatExpression(Collection lst) { @@ -62,8 +63,7 @@ public class CatExpression extends ExpressionList { 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(); @@ -19,11 +22,6 @@ public class ClearStateExpression extends Expression { context.clear(); } - @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; } @@ -35,11 +35,6 @@ public class EchoExpression extends Expression { // empty } - @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(); @@ -43,11 +51,6 @@ public class ExactExpression extends Expression { // empty } - @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 extends CompositeExpr private final List expressions = new LinkedList(); protected ExpressionList() { - // empty + super(null); } protected ExpressionList(Iterable 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(); @@ -62,11 +72,6 @@ public class FlattenExpression extends Expression { context.setValue(createdOutputType()); } - @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; } @@ -71,11 +72,6 @@ public class ForEachExpression extends CompositeExpression { } } - @Override - public DataType requiredInputType() { - return UnresolvedDataType.INSTANCE; - } - @Override public DataType createdOutputType() { if (exp.createdOutputType() == 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; } @@ -52,11 +52,6 @@ public class GetFieldExpression extends Expression { context.setValue(field.getDataType()); } - @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; } @@ -33,11 +33,6 @@ public class GetVarExpression extends Expression { context.setValue(input); } - @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); } @@ -39,11 +40,6 @@ public class GuardExpression extends CompositeExpression { exp.verify(context); } - @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()); @@ -41,11 +43,6 @@ public class HexDecodeExpression extends Expression { context.setValue(createdOutputType()); } - @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(); @@ -22,11 +24,6 @@ public class HexEncodeExpression extends Expression { context.setValue(createdOutputType()); } - @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) { @@ -21,11 +25,6 @@ public class HostNameExpression extends Expression { context.setValue(createdOutputType()); } - @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; } @@ -45,11 +46,6 @@ public class InputExpression extends Expression { context.setValue(val); } - @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; } @@ -52,11 +52,6 @@ public class JoinExpression extends Expression { context.setValue(createdOutputType()); } - @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())))); @@ -22,11 +24,6 @@ public class LowerCaseExpression extends Expression { context.setValue(createdOutputType()); } - @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; } @@ -77,11 +81,6 @@ public class NGramExpression extends Expression { // empty } - @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; } @@ -34,11 +34,6 @@ public class NormalizeExpression extends Expression { context.setValue(createdOutputType()); } - @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; } @@ -34,11 +34,6 @@ public class NowExpression extends Expression { context.setValue(createdOutputType()); } - @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; } @@ -60,11 +61,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; } @@ -31,11 +32,6 @@ public abstract class OutputExpression extends Expression { context.tryOutputType(this, fieldName, context.getValue()); } - @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; } @@ -31,11 +32,6 @@ public class ParenthesisExpression extends CompositeExpression { innerExp.verify(context); } - @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; } @@ -42,11 +42,6 @@ public class RandomExpression extends Expression { context.setValue(createdOutputType()); } - @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 { - - private final DataType inputType; +public final class ScriptExpression extends ExpressionList { public ScriptExpression() { super(); - inputType = resolveInputTypeAndcatch(); + setInputType(resolveInputType()); } public ScriptExpression(StatementExpression... lst) { super(Arrays.asList(lst)); - inputType = resolveInputTypeAndcatch(); + setInputType(resolveInputType()); } public ScriptExpression(Collection lst) { super(lst); - inputType = resolveInputTypeAndcatch(); + setInputType(resolveInputType()); } @Override @@ -54,18 +52,6 @@ public class ScriptExpression extends ExpressionList { 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> cases; @@ -25,6 +25,7 @@ public class SelectInputExpression extends CompositeExpression { } public SelectInputExpression(List> cases) { + super(null); this.cases = cases; } @@ -61,11 +62,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()))); @@ -21,11 +24,6 @@ public class SetLanguageExpression extends Expression { // empty } - @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; } @@ -34,11 +34,6 @@ public class SetValueExpression extends Expression { context.setValue(value.getDataType()); } - @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; } @@ -35,11 +35,6 @@ public class SetVarExpression extends Expression { context.setVariable(varName, next); } - @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); } @@ -42,11 +42,6 @@ public class SplitExpression extends Expression { context.setValue(createdOutputType()); } - @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 { +public final class StatementExpression extends ExpressionList { public StatementExpression(Expression... lst) { this(Arrays.asList(lst)); + setInputType(resolveInputType()); } public StatementExpression(Iterable lst) { super(filterList(lst)); + setInputType(resolveInputType()); } @Override @@ -41,8 +43,7 @@ public class StatementExpression extends ExpressionList { } } - @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(); } @@ -48,11 +48,6 @@ public class SubstringExpression extends Expression { context.setValue(createdOutputType()); } - @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 cases = new LinkedHashMap<>(); private final Expression defaultExp; @@ -26,6 +26,7 @@ public class SwitchExpression extends CompositeExpression { } public SwitchExpression(Map cases, Expression defaultExp) { + super(null); this.defaultExp = defaultExp; for (Map.Entry entry : cases.entrySet()) { this.cases.put(entry.getKey(), entry.getValue()); @@ -89,11 +90,6 @@ public class SwitchExpression extends CompositeExpression { context.setValue(input); } - @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 @@ -19,11 +22,6 @@ public class ThisExpression extends Expression { // empty } - @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) { @@ -30,11 +32,6 @@ public class ToArrayExpression extends Expression { context.setValue(DataType.getArray(context.getValue())); } - @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())))); @@ -20,11 +22,6 @@ public class ToByteExpression extends Expression { context.setValue(createdOutputType()); } - @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())))); @@ -20,11 +22,6 @@ public class ToDoubleExpression extends Expression { context.setValue(createdOutputType()); } - @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())))); @@ -20,11 +22,6 @@ public class ToFloatExpression extends Expression { context.setValue(createdOutputType()); } - @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())))); @@ -20,11 +22,6 @@ public class ToIntegerExpression extends Expression { context.setValue(createdOutputType()); } - @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())))); @@ -20,11 +22,6 @@ public class ToLongExpression extends Expression { context.setValue(createdOutputType()); } - @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()))); @@ -20,11 +23,6 @@ public class ToPositionExpression extends Expression { context.setValue(createdOutputType()); } - @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()))); @@ -19,11 +22,6 @@ public class ToStringExpression extends Expression { context.setValue(createdOutputType()); } - @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; } @@ -46,11 +46,6 @@ public class ToWsetExpression extends Expression { context.setValue(DataType.getWeightedSet(context.getValue(), createIfNonExistent, removeIfZero)); } - @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; } @@ -51,11 +51,6 @@ public class TokenizeExpression extends Expression { // empty } - @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) { @@ -20,11 +23,6 @@ public class TrimExpression extends Expression { context.setValue(createdOutputType()); } - @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()); @@ -36,11 +38,6 @@ public class ZCurveExpression extends Expression { context.setValue(createdOutputType()); } - @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) { @@ -268,11 +269,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 lst = new LinkedList<>(); + MyCollector() { + super(null); + } @Override protected void doExecute(ExecutionContext ctx) { lst.add(ctx.getValue()); @@ -242,11 +255,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; } @@ -53,11 +54,6 @@ class SimpleExpression extends Expression { } } - @Override - public DataType requiredInputType() { - return requiredInput; - } - @Override public DataType createdOutputType() { return createdOutput; @@ -65,7 +61,7 @@ class SimpleExpression extends Expression { @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)) { -- cgit v1.2.3