summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/schema/RankProfile.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/schema/RankProfile.java')
-rw-r--r--config-model/src/main/java/com/yahoo/schema/RankProfile.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/RankProfile.java b/config-model/src/main/java/com/yahoo/schema/RankProfile.java
index f9b3bc77040..639930041c3 100644
--- a/config-model/src/main/java/com/yahoo/schema/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/schema/RankProfile.java
@@ -683,6 +683,25 @@ public class RankProfile implements Cloneable {
addRankProperty(new RankProperty(name, parameter));
}
+ /*
+ * set a rank-property that should be a single-value parameter;
+ * if the same name is used multiple times, that parameter must be identical each time.
+ */
+ public void setRankProperty(String name, String parameter) {
+ var old = rankProperties.get(name);
+ if (old != null) {
+ if (old.size() != 1) {
+ throw new IllegalStateException("setRankProperty used for multi-valued property " + name);
+ }
+ var oldVal = old.get(0).getValue();
+ if (! oldVal.equals(parameter)) {
+ throw new IllegalArgumentException("setRankProperty would change property " + name + " from " + oldVal + " to " + parameter);
+ }
+ } else {
+ addRankProperty(new RankProperty(name, parameter));
+ }
+ }
+
private void addRankProperty(RankProperty rankProperty) {
// Just the usual multimap semantics here
rankProperties.computeIfAbsent(rankProperty.getName(), (String key) -> new ArrayList<>(1)).add(rankProperty);
@@ -1091,7 +1110,7 @@ public class RankProfile implements Cloneable {
inlineFunctions);
RankingExpression expression = expressionTransforms.transform(function.function().getBody(), context);
for (Map.Entry<String, String> rankProperty : context.rankProperties().entrySet()) {
- addRankProperty(rankProperty.getKey(), rankProperty.getValue());
+ setRankProperty(rankProperty.getKey(), rankProperty.getValue());
}
return function.withExpression(expression);
}