diff options
4 files changed, 30 insertions, 98 deletions
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/GeminiTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/GeminiTestCase.java deleted file mode 100644 index 07e6fbf7b1b..00000000000 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/GeminiTestCase.java +++ /dev/null @@ -1,70 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.searchdefinition.derived; - -import com.yahoo.collections.Pair; -import com.yahoo.searchdefinition.parser.ParseException; -import org.junit.Test; -import static org.junit.Assert.assertEquals; - -import java.io.IOException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author bratseth - */ -public class GeminiTestCase extends AbstractExportingTestCase { - - @Test - public void testRanking2() throws IOException, ParseException { - DerivedConfiguration c = assertCorrectDeriving("gemini2"); - RawRankProfile p = c.getRankProfileList().getRankProfile("test"); - Map<String, String> ranking = removePartKeySuffixes(asMap(p.configProperties())); - assertEquals("attribute(right)", resolve(lookup("toplevel", ranking), ranking)); - } - - private Map<String, String> asMap(List<Pair<String, String>> properties) { - Map<String, String> map = new HashMap<>(); - for (Pair<String, String> property : properties) - map.put(property.getFirst(), property.getSecond()); - return map; - } - - private Map<String, String> removePartKeySuffixes(Map<String, String> p) { - Map<String, String> pWithoutSuffixes = new HashMap<>(); - for (Map.Entry<String, String> entry : p.entrySet()) - pWithoutSuffixes.put(removePartSuffix(entry.getKey()), entry.getValue()); - return pWithoutSuffixes; - } - - private String removePartSuffix(String s) { - int partIndex = s.indexOf(".part"); - if (partIndex <= 0) return s; - return s.substring(0, partIndex); - } - - /** - * Recursively resolves references to other ranking expressions - rankingExpression(name) - - * and replaces the reference by the expression - */ - private String resolve(String expression, Map<String, String> ranking) { - int referenceStartIndex; - while ((referenceStartIndex = expression.indexOf("rankingExpression(")) >= 0) { - int referenceEndIndex = expression.indexOf(")", referenceStartIndex); - expression = expression.substring(0, referenceStartIndex) + - resolve(lookup(expression.substring(referenceStartIndex + "rankingExpression(".length(), referenceEndIndex), ranking), ranking) + - expression.substring(referenceEndIndex + 1); - } - return expression; - } - - private String lookup(String expressionName, Map<String, String> ranking) { - String value = ranking.get("rankingExpression(" + expressionName + ").rankingScript"); - if (value == null) { - return expressionName; - } - return value; - } - -} diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java index 1f3203f2e35..bb1101fdbfc 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/SerializationContext.java @@ -32,17 +32,20 @@ public class SerializationContext extends FunctionReferenceContext { this(Collections.emptyList()); } - /** Create a context for a single serialization task */ + /** @deprecated Use {@link #SerializationContext(Map, Map, Optional, Map) instead}*/ + @Deprecated(forRemoval = true, since = "7") public SerializationContext(Collection<ExpressionFunction> functions) { this(functions, Collections.emptyMap(), Optional.empty(), new LinkedHashMap<>()); } - /** Create a context for a single serialization task */ + /** @deprecated Use {@link #SerializationContext(Map, Map, Optional, Map) instead}*/ + @Deprecated(forRemoval = true, since = "7") public SerializationContext(Map<String, ExpressionFunction> functions) { this(functions.values()); } - /** Create a context for a single serialization task */ + /** @deprecated Use {@link #SerializationContext(Collection, Map, TypeContext) instead}*/ + @Deprecated(forRemoval = true, since = "7") public SerializationContext(Collection<ExpressionFunction> functions, Map<String, String> bindings) { this(functions, bindings, Optional.empty(), new LinkedHashMap<>()); } @@ -68,30 +71,14 @@ public class SerializationContext extends FunctionReferenceContext { this(toMap(functions), bindings, typeContext, serializedFunctions); } - /** Returns the type context of this, if it is able to resolve types. */ - public Optional<TypeContext<Reference>> typeContext() { return typeContext; } - - private static Map<String, ExpressionFunction> toMap(Collection<ExpressionFunction> list) { - Map<String,ExpressionFunction> mapBuilder = new HashMap<>(); - for (ExpressionFunction function : list) - mapBuilder.put(function.getName(), function); - return Map.copyOf(mapBuilder); - } - - /** - * Create a context for a single serialization task - * - * @param functions the functions of this - * @param bindings the arguments of this - * @param serializedFunctions a cache of serializedFunctions - the ownership of this map - * is <b>transferred</b> to this and will be modified in it - */ + /** @deprecated Use {@link #SerializationContext(Map, Map, Optional, Map) instead}*/ + @Deprecated(forRemoval = true, since = "7") public SerializationContext(Map<String, ExpressionFunction> functions, Map<String, String> bindings, Map<String, String> serializedFunctions) { this(functions, bindings, Optional.empty(), serializedFunctions); } - public SerializationContext(Map<String,ExpressionFunction> functions, Map<String, String> bindings, + public SerializationContext(Map<String, ExpressionFunction> functions, Map<String, String> bindings, Optional<TypeContext<Reference>> typeContext, Map<String, String> serializedFunctions) { super(functions, bindings); @@ -99,13 +86,23 @@ public class SerializationContext extends FunctionReferenceContext { this.serializedFunctions = serializedFunctions; } - /** @deprecated Use {@link #SerializationContext(Map, Map, Map) instead}*/ + /** @deprecated Use {@link #SerializationContext(Map, Map, Optional, Map) instead}*/ @Deprecated(forRemoval = true, since = "7") public SerializationContext(ImmutableMap<String,ExpressionFunction> functions, Map<String, String> bindings, Map<String, String> serializedFunctions) { this((Map<String, ExpressionFunction>)functions, bindings, serializedFunctions); } + /** Returns the type context of this, if it is able to resolve types. */ + public Optional<TypeContext<Reference>> typeContext() { return typeContext; } + + private static Map<String, ExpressionFunction> toMap(Collection<ExpressionFunction> list) { + Map<String,ExpressionFunction> mapBuilder = new HashMap<>(); + for (ExpressionFunction function : list) + mapBuilder.put(function.getName(), function); + return Map.copyOf(mapBuilder); + } + /** Adds the serialization of a function */ public void addFunctionSerialization(String name, String expressionString) { serializedFunctions.put(name, expressionString); @@ -124,13 +121,13 @@ public class SerializationContext extends FunctionReferenceContext { @Override public SerializationContext withBindings(Map<String, String> bindings) { - return new SerializationContext(getFunctions(), bindings, this.serializedFunctions); + return new SerializationContext(getFunctions(), bindings, typeContext, this.serializedFunctions); } /** Returns a fresh context without bindings */ @Override public SerializationContext withoutBindings() { - return new SerializationContext(getFunctions(), null, this.serializedFunctions); + return new SerializationContext(getFunctions(), null, typeContext, this.serializedFunctions); } public Map<String, String> serializedFunctions() { return serializedFunctions; } diff --git a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java index 52d54c9163e..ce5832027b7 100644 --- a/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java +++ b/searchlib/src/main/java/com/yahoo/searchlib/rankingexpression/rule/TensorFunctionNode.java @@ -360,17 +360,22 @@ public class TensorFunctionNode extends CompositeNode { /** Returns a new context with the bindings replaced by the given bindings */ @Override public ExpressionToStringContext withBindings(Map<String, String> bindings) { - SerializationContext serializationContext = new SerializationContext(getFunctions(), bindings, serializedFunctions()); + SerializationContext serializationContext = new SerializationContext(getFunctions(), bindings, typeContext(), serializedFunctions()); return new ExpressionToStringContext(serializationContext, wrappedToStringContext, path, parent); } /** Returns a fresh context without bindings */ @Override public SerializationContext withoutBindings() { - SerializationContext serializationContext = new SerializationContext(getFunctions(), null, serializedFunctions()); + SerializationContext serializationContext = new SerializationContext(getFunctions(), null, typeContext(), serializedFunctions()); return new ExpressionToStringContext(serializationContext, null, path, parent); } + @Override + public String toString() { + return "TensorFunctionNode.ExpressionToStringContext with wrapped serialization context: " + wrappedSerializationContext; + } + } /** Turns an EvaluationContext into a Context */ diff --git a/vespajlib/src/main/java/com/yahoo/tensor/functions/ToStringContext.java b/vespajlib/src/main/java/com/yahoo/tensor/functions/ToStringContext.java index 233779fcebe..72f0a267449 100644 --- a/vespajlib/src/main/java/com/yahoo/tensor/functions/ToStringContext.java +++ b/vespajlib/src/main/java/com/yahoo/tensor/functions/ToStringContext.java @@ -13,7 +13,7 @@ import java.util.Optional; */ public interface ToStringContext<NAMETYPE extends Name> { - static <NAMETYPE extends Name> ToStringContext<NAMETYPE> empty() { return new EmptyStringContext<NAMETYPE>(); } + static <NAMETYPE extends Name> ToStringContext<NAMETYPE> empty() { return new EmptyStringContext<>(); } /** Returns the name an identifier is bound to, or null if not bound in this context */ String getBinding(String name); |