diff options
author | Jon Bratseth <bratseth@oath.com> | 2019-11-25 13:20:14 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-25 13:20:14 +0100 |
commit | 8ff44f3e26ab641e997710def9dfa4edcba746d4 (patch) | |
tree | b8dcbf44b2991fa1a03c2e662d61663b760e628c /container-search/src/main/java/com/yahoo/search | |
parent | 2debaa455d8393559d1def6126ff719a221fd7dc (diff) | |
parent | df50b3f3366738dcc67eec72094cbdd18d305a82 (diff) |
Merge pull request #11379 from vespa-engine/bratseth/add-some-test-cases
Add some test cases: No functional changes
Diffstat (limited to 'container-search/src/main/java/com/yahoo/search')
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/query/profile/DimensionBinding.java | 23 | ||||
-rw-r--r-- | container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileCompiler.java | 3 |
2 files changed, 22 insertions, 4 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/DimensionBinding.java b/container-search/src/main/java/com/yahoo/search/query/profile/DimensionBinding.java index 1fc1e19e3ee..50bd2c58da8 100644 --- a/container-search/src/main/java/com/yahoo/search/query/profile/DimensionBinding.java +++ b/container-search/src/main/java/com/yahoo/search/query/profile/DimensionBinding.java @@ -4,6 +4,7 @@ package com.yahoo.search.query.profile; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -21,7 +22,7 @@ public class DimensionBinding { private DimensionValues values; /** The binding from those dimensions to values, and possibly other values */ - private Map<String, String> context; + private Map<String, String> context; // TODO: This is not needed any more public static final DimensionBinding nullBinding = new DimensionBinding(Collections.unmodifiableList(Collections.emptyList()), DimensionValues.empty, null); @@ -32,7 +33,13 @@ public class DimensionBinding { /** Whether the value array contains only nulls */ private boolean containsAllNulls; + // NOTE: Map must be ordered + public static DimensionBinding createFrom(Map<String,String> values) { + return createFrom(new ArrayList<>(values.keySet()), values); + } + /** Creates a binding from a variant and a context. Any of the arguments may be null. */ + // NOTE: Map must be ordered public static DimensionBinding createFrom(List<String> dimensions, Map<String,String> context) { if (dimensions == null || dimensions.size() == 0) { if (context == null) return nullBinding; @@ -102,7 +109,7 @@ public class DimensionBinding { * in the corresponding order. The array is always of the same length as the number of dimensions. * Dimensions which are not set in this context get a null value. */ - private static DimensionValues extractDimensionValues(List<String> dimensions,Map<String,String> context) { + private static DimensionValues extractDimensionValues(List<String> dimensions, Map<String,String> context) { String[] dimensionValues=new String[dimensions.size()]; if (context==null || context.size()==0) return DimensionValues.createFrom(dimensionValues); for (int i=0; i<dimensions.size(); i++) @@ -131,6 +138,16 @@ public class DimensionBinding { return DimensionBinding.createFrom(combinedDimensions, combinedValues); } + /** Returns the binding of this (dimension->value) as a map */ + private Map<String, String> asMap() { + Map<String, String> map = new LinkedHashMap<>(); + for (int i = 0; i < Math.min(dimensions.size(), values.size()); i++) { + if (values.getValues()[i] != null) + map.put(dimensions.get(i), values.getValues()[i]); + } + return map; + } + /** * Returns a combined list of dimensions from two separate lists, * or null if they are incompatible. @@ -169,7 +186,7 @@ public class DimensionBinding { * or null if they are incompatible. */ private Map<String, String> combineValues(Map<String, String> m1, Map<String, String> m2) { - Map<String, String> combinedValues = new HashMap<>(m1); + Map<String, String> combinedValues = new LinkedHashMap<>(m1); for (Map.Entry<String, String> m2Entry : m2.entrySet()) { if (m2Entry.getValue() == null) continue; String m1Value = m1.get(m2Entry.getKey()); diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileCompiler.java b/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileCompiler.java index 3cc7570576b..cffe941b912 100644 --- a/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileCompiler.java +++ b/container-search/src/main/java/com/yahoo/search/query/profile/QueryProfileCompiler.java @@ -82,7 +82,6 @@ public class QueryProfileCompiler { variants.addAll(parentVariants); variants.addAll(combined(variants, parentVariants)); // parents and children may have different variant dimensions } - variants.addAll(wildcardExpanded(variants)); return variants; } @@ -152,8 +151,10 @@ public class QueryProfileCompiler { Set<DimensionBindingForPath> variants = new HashSet<>(); if (profileVariants != null) { for (QueryProfileVariant variant : profile.getVariants().getVariants()) { + // Allow switching order since we're entering another profile DimensionBinding combinedVariant = DimensionBinding.createFrom(profile.getDimensions(), variant.getDimensionValues()).combineWith(currentVariant); + if (combinedVariant.isInvalid()) continue; // values at this point in the graph are unreachable variants.addAll(collectVariantsFromValues(path, variant.values(), combinedVariant)); |