summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
diff options
context:
space:
mode:
authorLester Solbakken <lesters@oath.com>2020-01-13 13:16:18 +0100
committerLester Solbakken <lesters@oath.com>2020-01-13 13:16:18 +0100
commit4b49c3e9ebc4234dde6a81ee82c31df97b42b971 (patch)
treea3f57f00cf86e317c15136bb2baa2d12ea27ab2b /config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
parent4e2478aabcd2ed3945ac0294cefd2cf325e39bbf (diff)
Add resolving og input types if missing in rank profile
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java18
1 files changed, 14 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
index 8fad8695e88..204f066e915 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/RankingExpressionTypeResolver.java
@@ -11,6 +11,7 @@ import com.yahoo.searchlib.rankingexpression.ExpressionFunction;
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.searchlib.rankingexpression.Reference;
import com.yahoo.searchlib.rankingexpression.rule.ExpressionNode;
+import com.yahoo.tensor.Tensor;
import com.yahoo.tensor.TensorType;
import com.yahoo.tensor.evaluation.TypeContext;
import com.yahoo.vespa.model.container.search.QueryProfiles;
@@ -63,10 +64,19 @@ public class RankingExpressionTypeResolver extends Processor {
private void resolveTypesIn(RankProfile profile, boolean validate) {
MapEvaluationTypeContext context = profile.typeContext(queryProfiles);
for (Map.Entry<String, RankProfile.RankingExpressionFunction> function : profile.getFunctions().entrySet()) {
- if (hasUntypedArguments(function.getValue().function())) continue;
- TensorType type = resolveType(function.getValue().function().getBody(),
- "function '" + function.getKey() + "'",
- context);
+ ExpressionFunction expressionFunction = function.getValue().function();
+ if (hasUntypedArguments(expressionFunction)) continue;
+
+ // Add any missing inputs for type resolution
+ for (String argument : expressionFunction.arguments()) {
+ Reference ref = Reference.fromIdentifier(argument);
+ if (context.getType(ref).equals(TensorType.empty)) {
+ context.setType(ref, expressionFunction.argumentTypes().get(argument));
+ }
+ }
+ context.forgetResolvedTypes();
+
+ TensorType type = resolveType(expressionFunction.getBody(), "function '" + function.getKey() + "'", context);
function.getValue().setReturnType(type);
}