summaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com/yahoo
diff options
context:
space:
mode:
Diffstat (limited to 'container-search/src/main/java/com/yahoo')
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java21
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java2
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java4
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java24
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java25
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java2
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java25
10 files changed, 55 insertions, 62 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java b/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java
index 2071e43f54c..485e2c9a8c3 100644
--- a/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java
+++ b/container-search/src/main/java/com/yahoo/prelude/hitfield/RawBase64.java
@@ -3,16 +3,22 @@ package com.yahoo.prelude.hitfield;
import java.util.Arrays;
import java.util.Base64;
+import java.util.Objects;
/**
+ * Wraps a byte [] and renders it as base64 encoded string
* @author baldersheim
*/
public class RawBase64 implements Comparable<RawBase64> {
+ private final static Base64.Encoder encoder = Base64.getEncoder().withoutPadding();
private final byte[] content;
public RawBase64(byte[] content) {
+ Objects.requireNonNull(content);
this.content = content;
}
+ public byte [] value() { return content; }
+
@Override
public int compareTo(RawBase64 rhs) {
return Arrays.compareUnsigned(content, rhs.content);
@@ -20,6 +26,19 @@ public class RawBase64 implements Comparable<RawBase64> {
@Override
public String toString() {
- return Base64.getEncoder().encodeToString(content);
+ return encoder.encodeToString(content);
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ RawBase64 rawBase64 = (RawBase64) o;
+ return Arrays.equals(content, rawBase64.content);
+ }
+
+ @Override
+ public int hashCode() {
+ return Arrays.hashCode(content);
}
}
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java b/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java
index 7ba7a13936f..3dac4cb92c0 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/MultiRangeItem.java
@@ -271,7 +271,7 @@ public class MultiRangeItem<Type extends Number> extends MultiTermItem {
if (endInclusive) metadata |= 0b00000100;
encoder = type.encoderFor(sortedRanges());
- metadata |= encoder.id << 3;
+ metadata |= (byte)(encoder.id << 3);
buffer.put(metadata);
putString(startIndex, buffer);
diff --git a/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java b/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java
index a7ca62d153c..03a661499e0 100644
--- a/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java
+++ b/container-search/src/main/java/com/yahoo/prelude/query/MultiTermItem.java
@@ -67,8 +67,8 @@ abstract class MultiTermItem extends SimpleTaggableItem {
super.encodeThis(buffer);
byte metadata = 0;
- metadata |= (operatorType().code << 5) & 0b11100000;
- metadata |= ( termType().code ) & 0b00011111;
+ metadata |= (byte)((byte)(operatorType().code << 5) & (byte)0b11100000);
+ metadata |= (byte)(termType().code & (byte)0b00011111);
buffer.put(metadata);
buffer.putInt(terms());
encodeBlueprint(buffer);
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java b/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java
index 05efc134465..0bea390ad63 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/result/BucketGroupId.java
@@ -1,8 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.grouping.result;
-import static com.yahoo.text.Lowercase.toLowerCase;
-
/**
* This abstract class is used in {@link Group} instances where the identifying expression evaluated to a {@link
* com.yahoo.search.grouping.request.BucketValue}. The range is inclusive-from and exclusive-to.
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java b/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java
index 343fea82b6e..91c46960ab0 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/result/HitRenderer.java
@@ -7,7 +7,6 @@ import com.yahoo.text.Utf8String;
import com.yahoo.text.XMLWriter;
import java.io.IOException;
-import java.util.Arrays;
import java.util.Map;
/**
@@ -63,28 +62,15 @@ public abstract class HitRenderer {
private static void renderGroupId(GroupId id, XMLWriter writer) {
writer.openTag(TAG_GROUP_ID).attribute(ATR_TYPE, id.getTypeName());
- if (id instanceof ValueGroupId) {
- writer.content(getIdValue((ValueGroupId)id), false);
- } else if (id instanceof BucketGroupId) {
- BucketGroupId bucketId = (BucketGroupId)id;
- writer.openTag(TAG_BUCKET_FROM).content(getBucketFrom(bucketId), false).closeTag();
- writer.openTag(TAG_BUCKET_TO).content(getBucketTo(bucketId), false).closeTag();
+ if (id instanceof ValueGroupId<?> valueGroupId) {
+ writer.content(valueGroupId.getValue(), false);
+ } else if (id instanceof BucketGroupId bucketId) {
+ writer.openTag(TAG_BUCKET_FROM).content(bucketId.getFrom(), false).closeTag();
+ writer.openTag(TAG_BUCKET_TO).content(bucketId.getTo(), false).closeTag();
}
writer.closeTag();
}
- private static Object getIdValue(ValueGroupId id) {
- return id instanceof RawId ? Arrays.toString(((RawId)id).getValue()) : id.getValue();
- }
-
- private static Object getBucketFrom(BucketGroupId id) {
- return id instanceof RawBucketId ? Arrays.toString(((RawBucketId)id).getFrom()) : id.getFrom();
- }
-
- private static Object getBucketTo(BucketGroupId id) {
- return id instanceof RawBucketId ? Arrays.toString(((RawBucketId)id).getTo()) : id.getTo();
- }
-
private static void renderContinuations(Map<String, Continuation> continuations, XMLWriter writer) {
for (Map.Entry<String, Continuation> entry : continuations.entrySet()) {
renderContinuation(entry.getKey(), entry.getValue(), writer);
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java b/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java
index 9576f548f4a..9b5ad6660b0 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/result/RawBucketId.java
@@ -1,7 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.grouping.result;
-import java.util.Arrays;
+import com.yahoo.prelude.hitfield.RawBase64;
/**
* This class is used in {@link Group} instances where the identifying
@@ -9,7 +9,7 @@ import java.util.Arrays;
*
* @author Ulf Lilleengen
*/
-public class RawBucketId extends BucketGroupId<byte[]> {
+public class RawBucketId extends BucketGroupId<RawBase64> {
/**
* Constructs a new instance of this class.
@@ -18,6 +18,6 @@ public class RawBucketId extends BucketGroupId<byte[]> {
* @param to The identifying exclusive-to raw buffer.
*/
public RawBucketId(byte[] from, byte[] to) {
- super("raw_bucket", from, Arrays.toString(from), to, Arrays.toString(to));
+ super("raw_bucket", new RawBase64(from), new RawBase64(to));
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java b/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java
index de711d0c218..fd0d38c37fd 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/result/RawId.java
@@ -1,14 +1,14 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.grouping.result;
-import java.util.Arrays;
+import com.yahoo.prelude.hitfield.RawBase64;
/**
* This class is used in {@link Group} instances where the identifying expression evaluated to a {@link Byte} array.
*
* @author Simon Thoresen Hult
*/
-public class RawId extends ValueGroupId<byte[]> {
+public class RawId extends ValueGroupId<RawBase64> {
/**
* Constructs a new instance of this class.
@@ -16,6 +16,6 @@ public class RawId extends ValueGroupId<byte[]> {
* @param value The identifying byte array.
*/
public RawId(byte[] value) {
- super("raw", value, Arrays.toString(value));
+ super("raw", new RawBase64(value));
}
}
diff --git a/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java b/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java
index 7f006b098cd..e746706f9c5 100644
--- a/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java
+++ b/container-search/src/main/java/com/yahoo/search/grouping/vespa/ResultBuilder.java
@@ -1,6 +1,7 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.search.grouping.vespa;
+import com.yahoo.prelude.hitfield.RawBase64;
import com.yahoo.search.grouping.Continuation;
import com.yahoo.search.grouping.GroupingRequest;
import com.yahoo.search.grouping.result.BoolId;
@@ -28,6 +29,7 @@ import com.yahoo.searchlib.aggregation.Hit;
import com.yahoo.searchlib.aggregation.HitsAggregationResult;
import com.yahoo.searchlib.aggregation.MaxAggregationResult;
import com.yahoo.searchlib.aggregation.MinAggregationResult;
+import com.yahoo.searchlib.aggregation.RawData;
import com.yahoo.searchlib.aggregation.StandardDeviationAggregationResult;
import com.yahoo.searchlib.aggregation.SumAggregationResult;
import com.yahoo.searchlib.aggregation.XorAggregationResult;
@@ -169,7 +171,7 @@ class ResultBuilder {
} else {
String label = transform.getLabel(result.getTag());
if (label != null) {
- group.setField(label, newResult(result, tag));
+ group.setField(label, convertResult(newResult(result, tag)));
}
}
}
@@ -228,24 +230,27 @@ class ResultBuilder {
return new RawId(res.getRaw());
} else if (res instanceof StringResultNode) {
return new StringId(res.getString());
- } else if (res instanceof FloatBucketResultNode) {
- FloatBucketResultNode bucketId = (FloatBucketResultNode)res;
+ } else if (res instanceof FloatBucketResultNode bucketId) {
return new DoubleBucketId(bucketId.getFrom(), bucketId.getTo());
- } else if (res instanceof IntegerBucketResultNode) {
- IntegerBucketResultNode bucketId = (IntegerBucketResultNode)res;
+ } else if (res instanceof IntegerBucketResultNode bucketId) {
return new LongBucketId(bucketId.getFrom(), bucketId.getTo());
- } else if (res instanceof StringBucketResultNode) {
- StringBucketResultNode bucketId = (StringBucketResultNode)res;
+ } else if (res instanceof StringBucketResultNode bucketId) {
return new StringBucketId(bucketId.getFrom(), bucketId.getTo());
- } else if (res instanceof RawBucketResultNode) {
- RawBucketResultNode bucketId = (RawBucketResultNode)res;
+ } else if (res instanceof RawBucketResultNode bucketId) {
return new RawBucketId(bucketId.getFrom(), bucketId.getTo());
} else {
throw new UnsupportedOperationException(res.getClass().getName());
}
}
- Object newResult(ExpressionNode execResult, int tag) {
+ private Object convertResult(Object value) {
+ if (value instanceof RawData raw) {
+ return new RawBase64(raw.getData());
+ }
+ return value;
+ }
+
+ private Object newResult(ExpressionNode execResult, int tag) {
if (execResult instanceof AverageAggregationResult) {
return ((AverageAggregationResult)execResult).getAverage().getNumber();
} else if (execResult instanceof CountAggregationResult) {
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java
index 99c3477274d..01bbef13129 100644
--- a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java
+++ b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/Binding.java
@@ -48,7 +48,7 @@ public class Binding implements Comparable<Binding> {
for (int i = 0; i <= maxDimensions; i++) {
String value = i < dimensionBinding.getDimensions().size() ? dimensionBinding.getValues().get(i) : null;
if (value == null)
- generality += Math.pow(2, maxDimensions - i-1);
+ generality += (int)Math.pow(2, maxDimensions - i - 1);
else
context.put(dimensionBinding.getDimensions().get(i), value);
}
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
index b36c8788877..90f4e6ae65c 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/JsonRenderer.java
@@ -32,8 +32,6 @@ import com.yahoo.search.grouping.result.AbstractList;
import com.yahoo.search.grouping.result.BucketGroupId;
import com.yahoo.search.grouping.result.Group;
import com.yahoo.search.grouping.result.GroupId;
-import com.yahoo.search.grouping.result.RawBucketId;
-import com.yahoo.search.grouping.result.RawId;
import com.yahoo.search.grouping.result.RootGroup;
import com.yahoo.search.grouping.result.ValueGroupId;
import com.yahoo.search.result.Coverage;
@@ -57,7 +55,6 @@ import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.charset.StandardCharsets;
import java.util.ArrayDeque;
-import java.util.Arrays;
import java.util.Deque;
import java.util.Map;
import java.util.Optional;
@@ -420,31 +417,19 @@ public class JsonRenderer extends AsynchronousSectionedRenderer<Result> {
}
protected void renderGroupMetadata(GroupId id) throws IOException {
- if (!(id instanceof ValueGroupId || id instanceof BucketGroupId)) return;
+ if (!(id instanceof ValueGroupId<?> || id instanceof BucketGroupId)) return;
- if (id instanceof ValueGroupId valueId) {
- generator.writeStringField(GROUPING_VALUE, getIdValue(valueId));
+ if (id instanceof ValueGroupId<?> valueId) {
+ generator.writeStringField(GROUPING_VALUE, valueId.getValue().toString());
} else {
BucketGroupId<?> bucketId = (BucketGroupId<?>) id;
generator.writeObjectFieldStart(BUCKET_LIMITS);
- generator.writeStringField(BUCKET_FROM, getBucketFrom(bucketId));
- generator.writeStringField(BUCKET_TO, getBucketTo(bucketId));
+ generator.writeStringField(BUCKET_FROM, bucketId.getFrom().toString());
+ generator.writeStringField(BUCKET_TO, bucketId.getTo().toString());
generator.writeEndObject();
}
}
- private static String getIdValue(ValueGroupId<?> id) {
- return (id instanceof RawId ? Arrays.toString(((RawId) id).getValue()) : id.getValue()).toString();
- }
-
- private static String getBucketFrom(BucketGroupId<?> id) {
- return (id instanceof RawBucketId ? Arrays.toString(((RawBucketId) id).getFrom()) : id.getFrom()).toString();
- }
-
- private static String getBucketTo(BucketGroupId<?> id) {
- return (id instanceof RawBucketId ? Arrays.toString(((RawBucketId) id).getTo()) : id.getTo()).toString();
- }
-
protected void renderTotalHitCount(Hit hit) throws IOException {
if ( ! (getRecursionLevel() == 1 && hit instanceof HitGroup)) return;