aboutsummaryrefslogtreecommitdiffstats
path: root/indexinglanguage/src/main
diff options
context:
space:
mode:
authorbjormel <bjormel@yahooinc.com>2023-10-01 12:23:12 +0000
committerbjormel <bjormel@yahooinc.com>2023-10-01 12:23:12 +0000
commite9058b555d4dfea2f6c872d9a677e8678b569569 (patch)
treefa1b67c6e39712c1e0d9f308b0dd55573b43f913 /indexinglanguage/src/main
parent0ad931fa86658904fe9212b014d810236b0e00e4 (diff)
parent16030193ec04ee41e98779a3d7ee6a6c1d0d0d6f (diff)
Merge branch 'master' into bjormel/aws-main-controller
Diffstat (limited to 'indexinglanguage/src/main')
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java9
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java14
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ArithmeticExpression.java48
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Base64DecodeExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/CatExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ConstantExpression.java (renamed from indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java)11
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EmbedExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/Expression.java21
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExpressionList.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ForEachExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetFieldExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/GetVarExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HashExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HexDecodeExpression.java6
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/IfThenExpression.java98
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/InputExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/JoinExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/OptimizePredicateExpression.java4
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ScriptExpression.java18
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SelectInputExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetVarExpression.java2
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/StatementExpression.java8
-rw-r--r--indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SwitchExpression.java6
-rw-r--r--indexinglanguage/src/main/javacc/IndexingParser.jj3
30 files changed, 153 insertions, 157 deletions
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java
index 5df066f06fa..1a1e26b1091 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/ExpressionOptimizer.java
@@ -70,7 +70,7 @@ public class ExpressionOptimizer extends ExpressionConverter {
}
return exp instanceof InputExpression ||
exp instanceof NowExpression ||
- exp instanceof SetValueExpression ||
+ exp instanceof ConstantExpression ||
exp instanceof HostNameExpression ||
exp instanceof GetVarExpression;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java
index 3c3f75a6693..24ed6b898fd 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldPathUpdateAdapter.java
@@ -75,7 +75,7 @@ public class FieldPathUpdateAdapter implements UpdateAdapter {
if (type == FieldPathEntry.Type.STRUCT_FIELD) {
if (!(value instanceof StructuredFieldValue)) {
throw new IllegalArgumentException("Expected structured field value, got " +
- value.getClass().getName() + ".");
+ value.getClass().getName());
}
for (Iterator<Map.Entry<Field, FieldValue>> it = ((StructuredFieldValue)value).iterator(); it.hasNext();) {
Map.Entry<Field, FieldValue> structEntry = it.next();
@@ -84,8 +84,7 @@ public class FieldPathUpdateAdapter implements UpdateAdapter {
createUpdatesAt(nextPath, structEntry.getValue(), idx + 1, out);
}
} else if (type == FieldPathEntry.Type.MAP_KEY) {
- if (value instanceof WeightedSet) {
- WeightedSet wset = (WeightedSet)value;
+ if (value instanceof WeightedSet wset) {
for (Iterator<FieldValue> it = wset.fieldValueIterator(); it.hasNext();) {
FieldValue wsetEntry = it.next();
List<FieldPathEntry> nextPath = new ArrayList<>(path);
@@ -102,7 +101,7 @@ public class FieldPathUpdateAdapter implements UpdateAdapter {
}
} else {
throw new IllegalArgumentException("Expected map or weighted set, got " +
- value.getClass().getName() + ".");
+ value.getClass().getName());
}
} else {
path.add(pathEntry);
@@ -111,7 +110,7 @@ public class FieldPathUpdateAdapter implements UpdateAdapter {
} else if (update instanceof AddFieldPathUpdate) {
if (!(value instanceof Array)) {
throw new IllegalStateException("Expected array, got " +
- value.getClass().getName() + ".");
+ value.getClass().getName());
}
out.addFieldPathUpdate(new AddFieldPathUpdate(update.getDocumentType(), new FieldPath(path).toString(),
update.getOriginalWhereClause(), (Array)value));
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java
index 2601c5d0f71..b2ef838bcc4 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateAdapter.java
@@ -152,7 +152,7 @@ public class FieldUpdateAdapter implements UpdateAdapter {
if (val instanceof Array) {
lst.addAll(createMapValueUpdatesForArray((Array)val, (MapValueUpdate)upd));
} else if (val instanceof MapFieldValue) {
- throw new UnsupportedOperationException("Can not map into a " + val.getClass().getName() + ".");
+ throw new UnsupportedOperationException("Can not map into a " + val.getClass().getName());
} else if (val instanceof StructuredFieldValue) {
lst.addAll(createMapValueUpdatesForStruct((StructuredFieldValue)val, (MapValueUpdate)upd));
} else if (val instanceof WeightedSet) {
@@ -168,7 +168,7 @@ public class FieldUpdateAdapter implements UpdateAdapter {
lst.add(upd);
} else {
throw new UnsupportedOperationException(
- "Value update type " + upd.getClass().getName() + " not supported.");
+ "Value update type " + upd.getClass().getName() + " not supported");
}
return lst;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
index 8c32f2e451d..a7fed91c360 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldUpdateHelper.java
@@ -95,7 +95,7 @@ public abstract class FieldUpdateHelper {
return applyUpdate(nestedUpdate, value);
}
} else if (value instanceof MapFieldValue) {
- throw new UnsupportedOperationException("Can not map into a " + value.getClass().getName() + ".");
+ throw new UnsupportedOperationException("Can not map into a " + value.getClass().getName());
} else if (value instanceof StructuredFieldValue) {
Field field = ((StructuredFieldValue)value).getField(String.valueOf(update.getValue()));
if (field == null) {
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java
index 4f96f2b7a31..d2cf97273ad 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/FieldValueConverter.java
@@ -49,7 +49,7 @@ public abstract class FieldValueConverter {
nextType = nextVal.getDataType();
} else if (!nextType.isValueCompatible(nextVal)) {
throw new IllegalArgumentException("Expected " + nextType.getName() + ", got " +
- nextVal.getDataType().getName() + ".");
+ nextVal.getDataType().getName());
}
next.add(nextVal);
}
@@ -63,7 +63,7 @@ public abstract class FieldValueConverter {
@SuppressWarnings({ "unchecked", "rawtypes" })
private FieldValue convertMap(MapFieldValue<FieldValue, FieldValue> val) {
- Map<FieldValue, FieldValue> next = new LinkedHashMap<FieldValue, FieldValue>();
+ Map<FieldValue, FieldValue> next = new LinkedHashMap<>();
DataType nextKeyType = null, nextValType = null;
for (Map.Entry<FieldValue, FieldValue> entry : val.entrySet()) {
FieldValue prevKey = entry.getKey();
@@ -75,7 +75,7 @@ public abstract class FieldValueConverter {
nextKeyType = nextKey.getDataType();
} else if (!nextKeyType.isValueCompatible(nextKey)) {
throw new IllegalArgumentException("Expected " + nextKeyType.getName() + ", got " +
- nextKey.getDataType().getName() + ".");
+ nextKey.getDataType().getName());
}
FieldValue prevVal = entry.getValue();
FieldValue nextVal = convert(prevVal);
@@ -86,7 +86,7 @@ public abstract class FieldValueConverter {
nextValType = nextVal.getDataType();
} else if (!nextValType.isValueCompatible(nextVal)) {
throw new IllegalArgumentException("Expected " + nextValType.getName() + ", got " +
- nextVal.getDataType().getName() + ".");
+ nextVal.getDataType().getName());
}
next.put(nextKey, nextVal);
}
@@ -100,7 +100,7 @@ public abstract class FieldValueConverter {
@SuppressWarnings({ "unchecked", "rawtypes" })
private FieldValue convertWset(WeightedSet val) {
- Map<FieldValue, Integer> next = new LinkedHashMap<FieldValue, Integer>();
+ Map<FieldValue, Integer> next = new LinkedHashMap<>();
DataType nextType = null;
for (Iterator<FieldValue> it = val.fieldValueIterator(); it.hasNext();) {
FieldValue prevKey = it.next();
@@ -114,7 +114,7 @@ public abstract class FieldValueConverter {
nextType = nextKey.getDataType();
} else if (!nextType.isValueCompatible(nextKey)) {
throw new IllegalArgumentException("Expected " + nextType.getName() + ", got " +
- nextKey.getDataType().getName() + ".");
+ nextKey.getDataType().getName());
}
next.put(nextKey, prevVal);
}
@@ -143,7 +143,7 @@ public abstract class FieldValueConverter {
}
/**
- * Returns whether or not the given {@link FieldValue} should be converted. If this method returns <em>false</em>,
+ * Returns whether the given {@link FieldValue} should be converted. If this method returns <em>false</em>,
* the converter will proceed to traverse the value itself to see if its internal can be converted.
*
* @param value the value to check
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java
index f36c44539c7..bab1f5fe7c0 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/SimpleDocumentAdapter.java
@@ -41,7 +41,7 @@ public class SimpleDocumentAdapter implements DocumentAdapter {
try {
return input.getDataType().buildFieldPath(fieldName).getResultingDataType();
} catch (IllegalArgumentException e) {
- throw new VerificationException(exp, "Input field '" + fieldName + "' not found.");
+ throw new VerificationException(exp, "Input field '" + fieldName + "' not found");
}
}
@@ -67,12 +67,12 @@ public class SimpleDocumentAdapter implements DocumentAdapter {
public void tryOutputType(Expression exp, String fieldName, DataType valueType) {
Field field = output.getDataType().getField(fieldName);
if (field == null) {
- throw new VerificationException(exp, "Field '" + fieldName + "' not found.");
+ throw new VerificationException(exp, "Field '" + fieldName + "' not found");
}
DataType fieldType = field.getDataType();
if (!fieldType.isAssignableFrom(valueType)) {
throw new VerificationException(exp, "Can not assign " + valueType.getName() + " to field '" +
- fieldName + "' which is " + fieldType.getName() + ".");
+ fieldName + "' which is " + fieldType.getName());
}
}
@@ -81,7 +81,7 @@ public class SimpleDocumentAdapter implements DocumentAdapter {
Field field = output.getField(fieldName);
if (field == null) {
throw new IllegalArgumentException("Field '" + fieldName + "' not found in document type '" +
- output.getDataType().getName() + "'.");
+ output.getDataType().getName());
}
output.setFieldValue(field, fieldValue);
return this;
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 b7ee444975f..8fff5d488c2 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
@@ -42,28 +42,28 @@ public final class ArithmeticExpression extends CompositeExpression {
}
}
- private final Expression lhs;
+ private final Expression left;
private final Operator op;
- private final Expression rhs;
+ private final Expression right;
- public ArithmeticExpression(Expression lhs, Operator op, Expression rhs) {
- super(requiredInputType(lhs, rhs));
- lhs.getClass(); // throws NullPointerException
+ public ArithmeticExpression(Expression left, Operator op, Expression right) {
+ super(requiredInputType(left, right));
+ left.getClass(); // throws NullPointerException
op.getClass();
- rhs.getClass();
- this.lhs = lhs;
+ right.getClass();
+ this.left = left;
this.op = op;
- this.rhs = rhs;
+ this.right = right;
}
@Override
public ArithmeticExpression convertChildren(ExpressionConverter converter) {
// TODO: branch()?
- return new ArithmeticExpression(converter.convert(lhs), op, converter.convert(rhs));
+ return new ArithmeticExpression(converter.convert(left), op, converter.convert(right));
}
public Expression getLeftHandSide() {
- return lhs;
+ return left;
}
public Operator getOperator() {
@@ -71,21 +71,21 @@ public final class ArithmeticExpression extends CompositeExpression {
}
public Expression getRightHandSide() {
- return rhs;
+ return right;
}
@Override
protected void doExecute(ExecutionContext context) {
FieldValue input = context.getValue();
- context.setValue(evaluate(context.setValue(input).execute(lhs).getValue(),
- context.setValue(input).execute(rhs).getValue()));
+ context.setValue(evaluate(context.setValue(input).execute(left).getValue(),
+ context.setValue(input).execute(right).getValue()));
}
@Override
protected void doVerify(VerificationContext context) {
DataType input = context.getValueType();
- context.setValueType(evaluate(context.setValueType(input).execute(lhs).getValueType(),
- context.setValueType(input).execute(rhs).getValueType()));
+ context.setValueType(evaluate(context.setValueType(input).execute(left).getValueType(),
+ context.setValueType(input).execute(right).getValueType()));
}
private static DataType requiredInputType(Expression lhs, Expression rhs) {
@@ -99,7 +99,7 @@ public final class ArithmeticExpression extends CompositeExpression {
}
if (!lhsType.equals(rhsType)) {
throw new VerificationException(ArithmeticExpression.class, "Operands require conflicting input types, " +
- lhsType.getName() + " vs " + rhsType.getName() + ".");
+ lhsType.getName() + " vs " + rhsType.getName());
}
return lhsType;
}
@@ -111,7 +111,7 @@ public final class ArithmeticExpression extends CompositeExpression {
@Override
public String toString() {
- return lhs + " " + op + " " + rhs;
+ return left + " " + op + " " + right;
}
@Override
@@ -120,13 +120,13 @@ public final class ArithmeticExpression extends CompositeExpression {
return false;
}
ArithmeticExpression exp = (ArithmeticExpression)obj;
- if (!lhs.equals(exp.lhs)) {
+ if (!left.equals(exp.left)) {
return false;
}
if (!op.equals(exp.op)) {
return false;
}
- if (!rhs.equals(exp.rhs)) {
+ if (!right.equals(exp.right)) {
return false;
}
return true;
@@ -134,12 +134,12 @@ public final class ArithmeticExpression extends CompositeExpression {
@Override
public int hashCode() {
- return getClass().hashCode() + lhs.hashCode() + op.hashCode() + rhs.hashCode();
+ return getClass().hashCode() + left.hashCode() + op.hashCode() + right.hashCode();
}
private DataType evaluate(DataType lhs, DataType rhs) {
if (lhs == null || rhs == null) {
- throw new VerificationException(this, "Attempting to perform arithmetic on a null value.");
+ throw new VerificationException(this, "Attempting to perform arithmetic on a null value");
}
if (!(lhs instanceof NumericDataType) ||
!(rhs instanceof NumericDataType))
@@ -210,12 +210,12 @@ public final class ArithmeticExpression extends CompositeExpression {
return BigDecimal.valueOf(((LongFieldValue)value).getLong());
}
throw new IllegalArgumentException("Unsupported numeric field value type '" +
- value.getClass().getName() + "'.");
+ value.getClass().getName() + "'");
}
@Override
public void selectMembers(ObjectPredicate predicate, ObjectOperation operation) {
- lhs.select(predicate, operation);
- rhs.select(predicate, operation);
+ left.select(predicate, operation);
+ right.select(predicate, operation);
}
}
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 2474dadab77..d5b5fa2ddfa 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
@@ -23,11 +23,11 @@ public final class Base64DecodeExpression extends Expression {
return;
}
if (input.length() > 12) {
- throw new NumberFormatException("Base64 value '" + input + "' is out of range.");
+ throw new NumberFormatException("Base64 value '" + input + "' is out of range");
}
byte[] decoded = Base64.getDecoder().decode(input);
if (decoded == null || decoded.length == 0) {
- throw new NumberFormatException("Illegal base64 value '" + input + "'.");
+ throw new NumberFormatException("Illegal base64 value '" + input + "'");
}
long output = 0;
for (int i = decoded.length; --i >= 0;) {
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 564ab015e10..b495a0b3bbf 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
@@ -62,7 +62,7 @@ public final class CatExpression extends ExpressionList<Expression> {
DataType val = context.setValueType(input).execute(exp).getValueType();
types.add(val);
if (val == null) {
- throw new VerificationException(this, "Attempting to concatenate a null value (" + exp + ").");
+ throw new VerificationException(this, "Attempting to concatenate a null value (" + exp + ")");
}
}
context.setValueType(resolveOutputType(types));
@@ -78,7 +78,7 @@ public final class CatExpression extends ExpressionList<Expression> {
prev = next;
} else if (!prev.isAssignableFrom(next)) {
throw new VerificationException(CatExpression.class, "Operands require conflicting input types, " +
- prev.getName() + " vs " + next.getName() + ".");
+ prev.getName() + " vs " + next.getName());
}
}
return prev;
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java
index 5dbb9292a9d..991cbd30433 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ChoiceExpression.java
@@ -64,14 +64,14 @@ public class ChoiceExpression extends ExpressionList<Expression> {
previousInput = thisInput;
else if (thisInput != null && !previousInput.isAssignableFrom(thisInput))
throw new VerificationException(ScriptExpression.class, "Choice expression require conflicting input types, " +
- previousInput.getName() + " vs " + thisInput.getName() + ".");
+ previousInput.getName() + " vs " + thisInput.getName());
DataType thisOutput = choice.createdOutputType();
if (previousOutput == null)
previousOutput = thisOutput;
else if (thisOutput != null && !previousOutput.isAssignableFrom(thisOutput))
throw new VerificationException(ScriptExpression.class, "Choice expression produce conflicting output types, " +
- previousOutput.getName() + " vs " + thisOutput.getName() + ".");
+ previousOutput.getName() + " vs " + thisOutput.getName());
}
return previousInput;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ConstantExpression.java
index f7348c24af5..b44d4844c4d 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/SetValueExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ConstantExpression.java
@@ -7,17 +7,18 @@ import com.yahoo.document.datatypes.LongFieldValue;
import com.yahoo.document.datatypes.StringFieldValue;
import com.yahoo.text.StringUtilities;
+import java.util.Objects;
+
/**
* @author Simon Thoresen Hult
*/
-public final class SetValueExpression extends Expression {
+public final class ConstantExpression extends Expression {
private final FieldValue value;
- public SetValueExpression(FieldValue value) {
+ public ConstantExpression(FieldValue value) {
super(null);
- value.getClass(); // throws NullPointerException
- this.value = value;
+ this.value = Objects.requireNonNull(value);
}
public FieldValue getValue() {
@@ -52,7 +53,7 @@ public final class SetValueExpression extends Expression {
@Override
public boolean equals(Object obj) {
- if (!(obj instanceof SetValueExpression rhs)) return false;
+ if (!(obj instanceof ConstantExpression rhs)) return false;
if (!value.equals(rhs.value)) return false;
return true;
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EmbedExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EmbedExpression.java
index 5ee5fea3158..0407e17596b 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EmbedExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/EmbedExpression.java
@@ -116,7 +116,7 @@ public class EmbedExpression extends Expression {
String outputField = context.getOutputField();
if (outputField == null)
throw new VerificationException(this, "No output field in this statement: " +
- "Don't know what tensor type to embed into.");
+ "Don't know what tensor type to embed into");
targetType = toTargetTensor(context.getInputType(this, outputField));
if ( ! validTarget(targetType))
throw new VerificationException(this, "The embedding target field must either be a dense 1d tensor, " +
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java
index f01f2fcc9fb..7f0abfd64db 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/ExecutionContext.java
@@ -50,7 +50,7 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl
@Override
public FieldValue getInputValue(String fieldName) {
if (adapter == null) {
- throw new IllegalStateException("Can not get field '" + fieldName + "' because adapter is null.");
+ throw new IllegalStateException("Can not get field '" + fieldName + "' because adapter is null");
}
return adapter.getInputValue(fieldName);
}
@@ -58,7 +58,7 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl
@Override
public FieldValue getInputValue(FieldPath fieldPath) {
if (adapter == null) {
- throw new IllegalStateException("Can not get field '" + fieldPath + "' because adapter is null.");
+ throw new IllegalStateException("Can not get field '" + fieldPath + "' because adapter is null");
}
return adapter.getInputValue(fieldPath);
}
@@ -71,7 +71,7 @@ public class ExecutionContext implements FieldTypeAdapter, FieldValueAdapter, Cl
@Override
public ExecutionContext setOutputValue(Expression exp, String fieldName, FieldValue fieldValue) {
if (adapter == null)
- throw new IllegalStateException("Can not set field '" + fieldName + "' because adapter is null.");
+ throw new IllegalStateException("Can not set field '" + fieldName + "' because adapter is null");
adapter.setOutputValue(exp, fieldName, fieldValue);
return this;
}
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 f498b871096..a6f117beb40 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
@@ -28,8 +28,8 @@ public abstract class Expression extends Selectable {
* Creates an expression
*
* @param inputType the type of the input this expression can work with.
- * UnresolvedDataType.INSTANCE if it works with any type,
- * and null if it does not consume any input.
+ * UnresolvedDataType.INSTANCE if it works with any type,
+ * and null if it does not consume any input.
*/
protected Expression(DataType inputType) {
this.inputType = inputType;
@@ -93,7 +93,7 @@ public abstract class Expression extends Selectable {
}
if (!inputType.isValueCompatible(input)) {
throw new IllegalArgumentException("Expression '" + this + "' expected " + inputType.getName() +
- " input, got " + input.getDataType().getName() + ".");
+ " input, got " + input.getDataType().getName());
}
}
doExecute(context);
@@ -102,7 +102,7 @@ public abstract class Expression extends Selectable {
FieldValue output = context.getValue();
if (output != null && !outputType.isValueCompatible(output)) {
throw new IllegalStateException("Expression '" + this + "' expected " + outputType.getName() +
- " output, got " + output.getDataType().getName() + ".");
+ " output, got " + output.getDataType().getName());
}
}
return context.getValue();
@@ -163,14 +163,14 @@ public abstract class Expression extends Selectable {
if (inputType != null) {
DataType input = context.getValueType();
if (input == null) {
- throw new VerificationException(this, "Expected " + inputType.getName() + " input, got null.");
+ throw new VerificationException(this, "Expected " + inputType.getName() + " input, but no input is specified");
}
if (input.getPrimitiveType() == UnresolvedDataType.INSTANCE) {
- throw new VerificationException(this, "Failed to resolve input type.");
+ throw new VerificationException(this, "Failed to resolve input type");
}
if (!inputType.isAssignableFrom(input)) {
throw new VerificationException(this, "Expected " + inputType.getName() + " input, got " +
- input.getName() + ".");
+ input.getName());
}
}
doVerify(context);
@@ -178,14 +178,13 @@ public abstract class Expression extends Selectable {
if (outputType != null) {
DataType output = context.getValueType();
if (output == null) {
- throw new VerificationException(this, "Expected " + outputType.getName() + " output, got null.");
+ throw new VerificationException(this, "Expected " + outputType.getName() + " output, but no output is specified");
}
if (output.getPrimitiveType() == UnresolvedDataType.INSTANCE) {
- throw new VerificationException(this, "Failed to resolve output type.");
+ throw new VerificationException(this, "Failed to resolve output type");
}
if (!outputType.isAssignableFrom(output)) {
- throw new VerificationException(this, "Expected " + outputType.getName() + " output, got " +
- output.getName() + ".");
+ throw new VerificationException(this, "Expected " + outputType.getName() + " output, got " + output.getName());
}
}
return context.getValueType();
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 57de66f80a0..f3e9e33d841 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
@@ -21,9 +21,9 @@ public abstract class ExpressionList<T extends Expression> extends CompositeExpr
private final List<T> expressions = new LinkedList<T>();
- protected ExpressionList(Iterable<? extends T> lst, DataType inputType) {
+ protected ExpressionList(Iterable<? extends T> expressions, DataType inputType) {
super(inputType);
- for (T exp : lst) {
+ for (T exp : expressions) {
this.expressions.add(exp);
}
}
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 3053a391823..7e32c93faff 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
@@ -52,7 +52,7 @@ public final class ForEachExpression extends CompositeExpression {
context.setValue(new MyConverter(context, exp).convert(input));
} else {
throw new IllegalArgumentException("Expected Array, Struct or WeightedSet input, got " +
- input.getDataType().getName() + ".");
+ input.getDataType().getName());
}
}
@@ -80,13 +80,13 @@ public final class ForEachExpression extends CompositeExpression {
DataType structValueType = context.setValueType(fieldType).execute(exp).getValueType();
if (!fieldType.isAssignableFrom(structValueType))
throw new VerificationException(this, "Expected " + fieldType.getName() + " output, got " +
- structValueType.getName() + ".");
+ structValueType.getName());
}
context.setValueType(valueType);
}
else {
throw new VerificationException(this, "Expected Array, Struct or WeightedSet input, got " +
- valueType.getName() + ".");
+ valueType.getName());
}
}
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 ecb6980f795..8a0fc9a56ec 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
@@ -27,7 +27,7 @@ public final class GetFieldExpression extends Expression {
protected void doExecute(ExecutionContext context) {
FieldValue input = context.getValue();
if (!(input instanceof StructuredFieldValue struct)) {
- throw new IllegalArgumentException("Expected structured input, got " + input.getDataType().getName() + ".");
+ throw new IllegalArgumentException("Expected structured input, got " + input.getDataType().getName());
}
Field field = struct.getField(fieldName);
if (field == null) {
@@ -41,7 +41,7 @@ public final class GetFieldExpression extends Expression {
protected void doVerify(VerificationContext context) {
DataType input = context.getValueType();
if (!(input instanceof StructuredDataType)) {
- throw new VerificationException(this, "Expected structured input, got " + input.getName() + ".");
+ throw new VerificationException(this, "Expected structured input, got " + input.getName());
}
Field field = ((StructuredDataType)input).getField(fieldName);
if (field == null) {
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 4ebf5da2ff8..54e85be1986 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
@@ -28,7 +28,7 @@ public final class GetVarExpression extends Expression {
protected void doVerify(VerificationContext context) {
DataType input = context.getVariable(varName);
if (input == null) {
- throw new VerificationException(this, "Variable '" + varName + "' not found.");
+ throw new VerificationException(this, "Variable '" + varName + "' not found");
}
context.setValueType(input);
}
diff --git a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HashExpression.java b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HashExpression.java
index 2952692b5d0..3b4c1b432bf 100644
--- a/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HashExpression.java
+++ b/indexinglanguage/src/main/java/com/yahoo/vespa/indexinglanguage/expressions/HashExpression.java
@@ -63,7 +63,7 @@ public class HashExpression extends Expression {
String outputField = context.getOutputField();
if (outputField == null)
throw new VerificationException(this, "No output field in this statement: " +
- "Don't know what value to hash to.");
+ "Don't know what value to hash to");
DataType outputFieldType = context.getInputType(this, outputField);
if ( ! canStoreHash(outputFieldType))
throw new VerificationException(this, "The type of the output field " + outputField +
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 93f101a422e..4a2c7381ac0 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
@@ -28,12 +28,12 @@ public final class HexDecodeExpression extends Expression {
try {
output = new BigInteger(input, 16);
} catch (NumberFormatException e) {
- throw new NumberFormatException("Illegal hex value '" + input + "'.");
+ throw new NumberFormatException("Illegal hex value '" + input + "'");
}
if (output.bitLength() > 64) {
- throw new NumberFormatException("Hex value '" + input + "' is out of range.");
+ throw new NumberFormatException("Hex value '" + input + "' is out of range");
}
- if (output.compareTo(BigInteger.ZERO) == 1 && output.bitLength() == 64) {
+ if (output.compareTo(BigInteger.ZERO) > 0 && output.bitLength() == 64) {
output = output.subtract(ULONG_MAX); // flip to negative
}
context.setValue(new LongFieldValue(output.longValue()));
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 f05795aa234..e0fb4e0337a 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
@@ -27,7 +27,7 @@ public final class IfThenExpression extends CompositeExpression {
private final String img;
- private Comparator(String img) {
+ Comparator(String img) {
this.img = img;
}
@@ -38,77 +38,67 @@ public final class IfThenExpression extends CompositeExpression {
}
- private final Expression lhs;
- private final Comparator cmp;
- private final Expression rhs;
+ private final Expression left;
+ private final Comparator comparator;
+ private final Expression right;
private final Expression ifTrue;
private final Expression ifFalse;
- public IfThenExpression(Expression lhs, Comparator cmp, Expression rhs, Expression ifTrue) {
- this(lhs, cmp, rhs, ifTrue, null);
+ public IfThenExpression(Expression lhs, Comparator cmp, Expression right, Expression ifTrue) {
+ this(lhs, cmp, right, ifTrue, null);
}
- public IfThenExpression(Expression lhs, Comparator cmp, Expression rhs, Expression ifTrue, Expression ifFalse) {
- super(resolveInputType(lhs, rhs, ifTrue, ifFalse));
- this.lhs = lhs;
- this.cmp = cmp;
- this.rhs = rhs;
+ public IfThenExpression(Expression lhs, Comparator cmp, Expression right, Expression ifTrue, Expression ifFalse) {
+ super(resolveInputType(lhs, right, ifTrue, ifFalse));
+ this.left = lhs;
+ this.comparator = cmp;
+ this.right = right;
this.ifTrue = ifTrue;
this.ifFalse = ifFalse;
}
@Override
public IfThenExpression convertChildren(ExpressionConverter converter) {
- return new IfThenExpression(converter.branch().convert(lhs),
- cmp,
- converter.branch().convert(rhs),
+ return new IfThenExpression(converter.branch().convert(left),
+ comparator,
+ converter.branch().convert(right),
converter.branch().convert(ifTrue),
converter.branch().convert(ifFalse));
}
@Override
public void setStatementOutput(DocumentType documentType, Field field) {
- lhs.setStatementOutput(documentType, field);
- rhs.setStatementOutput(documentType, field);
+ left.setStatementOutput(documentType, field);
+ right.setStatementOutput(documentType, field);
ifTrue.setStatementOutput(documentType, field);
ifFalse.setStatementOutput(documentType, field);
}
- public Expression getLeftHandSide() {
- return lhs;
- }
+ public Expression getLeftHandSide() { return left; }
- public Comparator getComparator() {
- return cmp;
- }
+ public Comparator getComparator() { return comparator; }
- public Expression getRightHandSide() {
- return rhs;
- }
+ public Expression getRightHandSide() { return right; }
- public Expression getIfTrueExpression() {
- return ifTrue;
- }
+ public Expression getIfTrueExpression() { return ifTrue; }
- public Expression getIfFalseExpression() {
- return ifFalse;
- }
+ public Expression getIfFalseExpression() { return ifFalse; }
@Override
protected void doExecute(ExecutionContext context) {
FieldValue input = context.getValue();
- FieldValue lhsVal = context.setValue(input).execute(lhs).getValue();
- if (lhsVal == null) {
+ FieldValue leftValue = context.setValue(input).execute(left).getValue();
+ if (leftValue == null) {
context.setValue(null);
return;
}
- FieldValue rhsVal = context.setValue(input).execute(rhs).getValue();
- if (rhsVal == null) {
+ FieldValue rightValue = context.setValue(input).execute(right).getValue();
+ if (rightValue == null) {
context.setValue(null);
return;
}
context.setValue(input);
- if (isTrue(lhsVal, cmp, rhsVal)) {
+ if (isTrue(leftValue, comparator, rightValue)) {
ifTrue.execute(context);
} else if (ifFalse != null) {
ifFalse.execute(context);
@@ -118,17 +108,19 @@ public final class IfThenExpression extends CompositeExpression {
@Override
protected void doVerify(VerificationContext context) {
DataType input = context.getValueType();
- context.setValueType(input).execute(lhs);
- context.setValueType(input).execute(rhs);
- context.setValueType(input).execute(ifTrue);
- context.setValueType(input).execute(ifFalse);
- context.setValueType(input);
+ context.setValueType(input).execute(left);
+ context.setValueType(input).execute(right);
+ var trueValue = context.setValueType(input).execute(ifTrue);
+ var falseValue = context.setValueType(input).execute(ifFalse);
+ var valueType = trueValue.getValueType().isAssignableFrom(falseValue.getValueType()) ?
+ trueValue.getValueType() : falseValue.getValueType();
+ context.setValueType(valueType);
}
@Override
public void selectMembers(ObjectPredicate predicate, ObjectOperation operation) {
- select(lhs, predicate, operation);
- select(rhs, predicate, operation);
+ select(left, predicate, operation);
+ select(right, predicate, operation);
select(ifTrue, predicate, operation);
select(ifFalse, predicate, operation);
}
@@ -146,13 +138,19 @@ public final class IfThenExpression extends CompositeExpression {
@Override
public DataType createdOutputType() {
- return null;
+ DataType ifTrueType = ifTrue.createdOutputType();
+ DataType ifFalseType = ifFalse == null ? null : ifFalse.createdOutputType();
+ if (ifTrueType == null || ifFalseType == null) return null;
+ if (ifTrueType.isAssignableFrom(ifFalseType))
+ return ifTrueType;
+ else
+ return ifFalseType;
}
@Override
public String toString() {
StringBuilder ret = new StringBuilder();
- ret.append("if (").append(lhs).append(" ").append(cmp).append(" ").append(rhs).append(") ");
+ ret.append("if (").append(left).append(" ").append(comparator).append(" ").append(right).append(") ");
ret.append(toScriptBlock(ifTrue));
if (ifFalse != null) {
ret.append(" else ").append(toScriptBlock(ifFalse));
@@ -165,13 +163,13 @@ public final class IfThenExpression extends CompositeExpression {
if (!(obj instanceof IfThenExpression exp)) {
return false;
}
- if (!lhs.equals(exp.lhs)) {
+ if (!left.equals(exp.left)) {
return false;
}
- if (!cmp.equals(exp.cmp)) {
+ if (!comparator.equals(exp.comparator)) {
return false;
}
- if (!rhs.equals(exp.rhs)) {
+ if (!right.equals(exp.right)) {
return false;
}
if (!ifTrue.equals(exp.ifTrue)) {
@@ -185,7 +183,7 @@ public final class IfThenExpression extends CompositeExpression {
@Override
public int hashCode() {
- int ret = getClass().hashCode() + lhs.hashCode() + cmp.hashCode() + rhs.hashCode() + ifTrue.hashCode();
+ int ret = getClass().hashCode() + left.hashCode() + comparator.hashCode() + right.hashCode() + ifTrue.hashCode();
if (ifFalse != null) {
ret += ifFalse.hashCode();
}
@@ -201,7 +199,7 @@ public final class IfThenExpression extends CompositeExpression {
}
if (!prev.equals(next)) {
throw new VerificationException(IfThenExpression.class, "Operands require conflicting input types, " +
- prev.getName() + " vs " + next.getName() + ".");
+ prev.getName() + " vs " + next.getName());
}
return prev;
}
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 bba1b09cda2..8534e58694e 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
@@ -42,7 +42,7 @@ public final class InputExpression extends Expression {
protected void doVerify(VerificationContext context) {
DataType val = context.getInputType(this, fieldName);
if (val == null)
- throw new VerificationException(this, "Field '" + fieldName + "' not found.");
+ throw new VerificationException(this, "Field '" + fieldName + "' not found");
context.setValueType(val);
}
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 1c3582ea695..39325385dde 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
@@ -31,7 +31,7 @@ public final class JoinExpression extends Expression {
protected void doExecute(ExecutionContext context) {
FieldValue input = context.getValue();
if (!(input instanceof Array)) {
- throw new IllegalArgumentException("Expected Array input, got " + input.getDataType().getName() + ".");
+ throw new IllegalArgumentException("Expected Array input, got " + input.getDataType().getName());
}
StringBuilder output = new StringBuilder();
for (Iterator<FieldValue> it = ((Array)input).fieldValueIterator(); it.hasNext(); ) {
@@ -47,7 +47,7 @@ public final class JoinExpression extends Expression {
protected void doVerify(VerificationContext context) {
DataType input = context.getValueType();
if (!(input instanceof ArrayDataType)) {
- throw new VerificationException(this, "Expected Array input, got " + input.getName() + ".");
+ throw new VerificationException(this, "Expected Array input, got " + input.getName());
}
context.setValueType(createdOutputType());
}
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 d4b6f2e0a0a..97bbb1494e0 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
@@ -54,10 +54,10 @@ public final class OptimizePredicateExpression extends Expression {
DataType input = ctx.getVariable(var);
if (input == null) {
if (required) {
- throw new VerificationException(this, "Variable '" + var + "' must be set.");
+ throw new VerificationException(this, "Variable '" + var + "' must be set");
}
} else if (input != type) {
- throw new VerificationException(this, "Variable '" + var + "' must have type " + type.getName() + ".");
+ throw new VerificationException(this, "Variable '" + var + "' must have type " + type.getName());
}
}
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 1a640c9924e..f9ceed4cb34 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
@@ -29,12 +29,12 @@ public final class ScriptExpression extends ExpressionList<StatementExpression>
this(Collections.emptyList());
}
- public ScriptExpression(StatementExpression... lst) {
- this(Arrays.asList(lst));
+ public ScriptExpression(StatementExpression... statements) {
+ this(Arrays.asList(statements));
}
- public ScriptExpression(Collection<? extends StatementExpression> lst) {
- super(lst, resolveInputType(lst));
+ public ScriptExpression(Collection<? extends StatementExpression> statements) {
+ super(statements, resolveInputType(statements));
}
@Override
@@ -67,10 +67,8 @@ public final class ScriptExpression extends ExpressionList<StatementExpression>
@Override
protected void doVerify(VerificationContext context) {
DataType input = context.getValueType();
- for (Expression exp : this) {
+ for (Expression exp : this)
context.setValueType(input).execute(exp);
- }
- context.setValueType(input);
}
private static DataType resolveInputType(Collection<? extends StatementExpression> list) {
@@ -81,7 +79,7 @@ public final class ScriptExpression extends ExpressionList<StatementExpression>
prev = next;
} else if (next != null && !prev.isAssignableFrom(next)) {
throw new VerificationException(ScriptExpression.class, "Statements require conflicting input types, " +
- prev.getName() + " vs " + next.getName() + ".");
+ prev.getName() + " vs " + next.getName());
}
}
return prev;
@@ -89,7 +87,9 @@ public final class ScriptExpression extends ExpressionList<StatementExpression>
@Override
public DataType createdOutputType() {
- return null;
+ var expressions = asList();
+ if (expressions.isEmpty()) return null;
+ return (expressions.get(expressions.size() - 1)).createdOutputType();
}
@Override
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 bb8111f358e..90b2253b520 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
@@ -65,7 +65,7 @@ public final class SelectInputExpression extends CompositeExpression {
for (Pair<String, Expression> entry : cases) {
DataType val = context.getInputType(this, entry.getFirst());
if (val == null) {
- throw new VerificationException(this, "Field '" + entry.getFirst() + "' not found.");
+ throw new VerificationException(this, "Field '" + entry.getFirst() + "' not found");
}
context.setValueType(val).execute(entry.getSecond());
}
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 a855ba86c9c..c80efbf7d19 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
@@ -30,7 +30,7 @@ public final class SetVarExpression extends Expression {
DataType prev = context.getVariable(varName);
if (prev != null && !prev.equals(next)) {
throw new VerificationException(this, "Attempting to assign conflicting types to variable '" + varName +
- "', " + prev.getName() + " vs " + next.getName() + ".");
+ "', " + prev.getName() + " vs " + next.getName());
}
context.setVariable(varName, next);
}
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 75f206ef47d..da067935d18 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
@@ -73,12 +73,12 @@ public final class StatementExpression extends ExpressionList<Expression> {
context.execute(expression);
}
- private static DataType resolveInputType(Iterable<Expression> lst) {
- for (Expression exp : lst) {
- DataType type = exp.requiredInputType();
+ private static DataType resolveInputType(Iterable<Expression> expressions) {
+ for (Expression expression : expressions) {
+ DataType type = expression.requiredInputType();
if (type != null) return type;
- type = exp.createdOutputType();
+ type = expression.createdOutputType();
if (type != null) return null;
}
return null;
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 c7cf7066483..3bf67ff9c5d 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
@@ -70,7 +70,7 @@ public final class SwitchExpression extends CompositeExpression {
if (input != null) {
if (!(input instanceof StringFieldValue)) {
throw new IllegalArgumentException("Expected " + DataType.STRING.getName() + " input, got " +
- input.getDataType().getName() + ".");
+ input.getDataType().getName());
}
exp = cases.get(String.valueOf(input));
}
@@ -95,11 +95,11 @@ public final class SwitchExpression extends CompositeExpression {
protected void doVerify(VerificationContext context) {
DataType input = context.getValueType();
if (input == null) {
- throw new VerificationException(this, "Expected " + DataType.STRING.getName() + " input, got null.");
+ throw new VerificationException(this, "Expected " + DataType.STRING.getName() + " input, but no input is specified");
}
if (input != DataType.STRING) {
throw new VerificationException(this, "Expected " + DataType.STRING.getName() + " input, got " +
- input.getName() + ".");
+ input.getName());
}
for (Expression exp : cases.values()) {
context.setValueType(input).execute(exp);
diff --git a/indexinglanguage/src/main/javacc/IndexingParser.jj b/indexinglanguage/src/main/javacc/IndexingParser.jj
index d559d9b7260..3c67a468aea 100644
--- a/indexinglanguage/src/main/javacc/IndexingParser.jj
+++ b/indexinglanguage/src/main/javacc/IndexingParser.jj
@@ -32,7 +32,6 @@ import com.yahoo.document.datatypes.*;
import com.yahoo.text.StringUtilities;
import com.yahoo.vespa.indexinglanguage.expressions.*;
import com.yahoo.vespa.indexinglanguage.linguistics.AnnotatorConfig;
-import com.yahoo.language.process.StemMode;
import com.yahoo.language.process.Embedder;
import com.yahoo.language.Linguistics;
@@ -592,7 +591,7 @@ Expression setValueExp() :
}
{
( val = fieldValue() )
- { return new SetValueExpression(val); }
+ { return new ConstantExpression(val); }
}
Expression setVarExp() :