final int oldDictSize = dimLookup.size(); final int nullId = dimLookup.getId(null); encodedDimensionValues = nullId == ABSENT_VALUE_ID ? new int[]{dimLookup.add(null)} : new int[]{nullId}; } else if (dimValues instanceof List) { List<Object> dimValuesList = (List) dimValues; if (dimValuesList.isEmpty()) { dimLookup.add(null); encodedDimensionValues = IntArrays.EMPTY_ARRAY; } else if (dimValuesList.size() == 1) { encodedDimensionValues = new int[]{dimLookup.add(emptyToNullIfNeeded(dimValuesList.get(0)))}; } else { hasMultipleValues = true; for (String dimensionValue : dimensionValues) { if (multiValueHandling != MultiValueHandling.SORTED_SET) { retVal[pos++] = dimLookup.add(dimensionValue); continue; int index = dimLookup.add(dimensionValue); if (index != prevId) { prevId = retVal[pos++] = index; encodedDimensionValues = new int[]{dimLookup.add(emptyToNullIfNeeded(dimValues))}; if (oldDictSize != dimLookup.size()) { sortedLookup = null;
@Override public long estimateEncodedKeyComponentSize(int[] key) { // string length is being accounted for each time they are referenced, based on dimension handler interface, // even though they are stored just once. It may overestimate the size by a bit, but we wanted to leave // more buffer to be safe long estimatedSize = key.length * Integer.BYTES; estimatedSize += Arrays.stream(key) .filter(element -> dimLookup.getValue(element) != null) .mapToLong(element -> dimLookup.getValue(element).length() * Character.BYTES) .sum(); return estimatedSize; }
final int oldDictSize = dimLookup.size(); final int nullId = dimLookup.getId(null); encodedDimensionValues = nullId == ABSENT_VALUE_ID ? new int[]{dimLookup.add(null)} : new int[]{nullId}; } else if (dimValues instanceof List) { List<Object> dimValuesList = (List) dimValues; if (dimValuesList.isEmpty()) { dimLookup.add(null); encodedDimensionValues = IntArrays.EMPTY_ARRAY; } else if (dimValuesList.size() == 1) { encodedDimensionValues = new int[]{dimLookup.add(emptyToNullIfNeeded(dimValuesList.get(0)))}; } else { hasMultipleValues = true; for (String dimensionValue : dimensionValues) { if (multiValueHandling != MultiValueHandling.SORTED_SET) { retVal[pos++] = dimLookup.add(dimensionValue); continue; int index = dimLookup.add(dimensionValue); if (index != prevId) { prevId = retVal[pos++] = index; encodedDimensionValues = new int[]{dimLookup.add(emptyToNullIfNeeded(dimValues))}; if (oldDictSize != dimLookup.size()) { sortedLookup = null;
@Override public long estimateEncodedKeyComponentSize(int[] key) { // string length is being accounted for each time they are referenced, based on dimension handler interface, // even though they are stored just once. It may overestimate the size by a bit, but we wanted to leave // more buffer to be safe long estimatedSize = key.length * Integer.BYTES; estimatedSize += Arrays.stream(key) .filter(element -> dimLookup.getValue(element) != null) .mapToLong(element -> dimLookup.getValue(element).length() * Character.BYTES) .sum(); return estimatedSize; }
private SortedDimensionDictionary sortedLookup() { return sortedLookup == null ? sortedLookup = dimLookup.sort() : sortedLookup; }
@Override public String getMaxValue() { return dimLookup.getMaxValue(); }
private int getEncodedValue(String fullValue, boolean idSorted) { int unsortedId = dimLookup.getId(fullValue); if (idSorted) { return sortedLookup().getSortedIdFromUnsortedId(unsortedId); } else { return unsortedId; } } }
@Override public int getCardinality() { return dimLookup.size(); }
@Override public String getMinValue() { return dimLookup.getMinValue(); }
private String getActualValue(int intermediateValue, boolean idSorted) { if (idSorted) { return sortedLookup().getValueFromSortedId(intermediateValue); } else { return dimLookup.getValue(intermediateValue); } }
public StringDimensionIndexer(MultiValueHandling multiValueHandling, boolean hasBitmapIndexes) { this.dimLookup = new DimensionDictionary(); this.multiValueHandling = multiValueHandling == null ? MultiValueHandling.ofDefault() : multiValueHandling; this.hasBitmapIndexes = hasBitmapIndexes; }
private SortedDimensionDictionary sortedLookup() { return sortedLookup == null ? sortedLookup = dimLookup.sort() : sortedLookup; }
public StringDimensionIndexer(MultiValueHandling multiValueHandling, boolean hasBitmapIndexes) { this.dimLookup = new DimensionDictionary(); this.multiValueHandling = multiValueHandling == null ? MultiValueHandling.ofDefault() : multiValueHandling; this.hasBitmapIndexes = hasBitmapIndexes; }
private String getActualValue(int intermediateValue, boolean idSorted) { if (idSorted) { return sortedLookup().getValueFromSortedId(intermediateValue); } else { return dimLookup.getValue(intermediateValue); } }
@Override public String getMaxValue() { return dimLookup.getMaxValue(); }
private int getEncodedValue(String fullValue, boolean idSorted) { int unsortedId = dimLookup.getId(fullValue); if (idSorted) { return sortedLookup().getSortedIdFromUnsortedId(unsortedId); } else { return unsortedId; } } }
@Override public String getMinValue() { return dimLookup.getMinValue(); }
@Override public int getCardinality() { return dimLookup.size(); }