@SuppressWarnings("unused") // Set up your IDE to render IndexedInts impls using this method during debug. default String debugToString() { StringBuilder sb = new StringBuilder("["); forEach(v -> sb.append(v).append(',').append(' ')); if (sb.length() > 1) { sb.setLength(sb.length() - 2); } sb.append(']'); return sb.toString(); } }
private static IndexedInts getRow(ColumnValueSelector s) { if (s instanceof DimensionSelector) { return ((DimensionSelector) s).getRow(); } else if (s instanceof NilColumnValueSelector) { return IndexedInts.empty(); } else { throw new ISE( "ColumnValueSelector[%s], only DimensionSelector or NilColumnValueSelector is supported", s.getClass() ); } }
private static boolean isNullRow(IndexedInts row, int size) { for (int i = 0; i < size; i++) { if (row.get(i) != 0) { return false; } } return true; }
@Override public void initGroupingKeyColumnValue(int keyBufferPosition, int columnIndex, Object rowObj, ByteBuffer keyBuffer, int[] stack) { IndexedInts row = (IndexedInts) rowObj; int rowSize = row.size(); initializeGroupingKeyV2Dimension(row, rowSize, keyBuffer, keyBufferPosition); stack[columnIndex] = rowSize == 0 ? 0 : 1; }
@Override public void aggregate() { // note: there might be room for optimization here but behavior must match BloomDimFilter implementation if (selector.getRow().size() > 1) { selector.getRow().forEach(v -> { String value = selector.lookupName(v); if (value == null) { collector.addBytes(null, 0, 0); } else { collector.addString(value); } }); } else { String value = (String) selector.getObject(); if (value == null) { collector.addBytes(null, 0, 0); } else { collector.addString(value); } } } }
@Override public boolean matches() { final IndexedInts row = selector.getRow(); final int size = row.size(); return size == 0; }
@Override public void bufferAdd(ByteBuffer buf) { if (selector.getRow().size() > 1) { selector.getRow().forEach(v -> { String value = selector.lookupName(v); if (value == null) { BloomKFilter.addBytes(buf, null, 0, 0); } else { BloomKFilter.addString(buf, value); } }); } else { String value = (String) selector.getObject(); if (value == null) { BloomKFilter.addBytes(buf, null, 0, 0); } else { BloomKFilter.addString(buf, value); } } } }
@Override public boolean checkRowIndexAndAddValueToGroupingKey(int keyBufferPosition, Object rowObj, int rowValIdx, ByteBuffer keyBuffer) { IndexedInts row = (IndexedInts) rowObj; int rowSize = row.size(); if (rowValIdx < rowSize) { keyBuffer.putInt( keyBufferPosition, row.get(rowValIdx) ); return true; } else { return false; } }
private void initializeGroupingKeyV2Dimension( final IndexedInts values, final int rowSize, final ByteBuffer keyBuffer, final int keyBufferPosition ) { if (rowSize == 0) { keyBuffer.putInt(keyBufferPosition, GROUP_BY_MISSING_VALUE); } else { keyBuffer.putInt(keyBufferPosition, values.get(0)); } } }
public static VSizeColumnarInts fromIndexedInts(IndexedInts ints, int maxValue) { int numBytes = getNumBytesForMax(maxValue); final ByteBuffer buffer = ByteBuffer.allocate((ints.size() * numBytes) + (4 - numBytes)); writeToBuffer(buffer, ints, numBytes, maxValue); return new VSizeColumnarInts(buffer.asReadOnlyBuffer(), numBytes); }
/** * Get a particular row from a column, exactly as reported by the column. */ private static List<String> getRow(final DictionaryEncodedColumn<String> column, final int rowNumber) { final List<String> retVal = new ArrayList<>(); if (column.hasMultipleValues()) { column.getMultiValueRow(rowNumber).forEach(i -> retVal.add(column.lookupName(i))); } else { retVal.add(column.lookupName(column.getSingleValueRow(rowNumber))); } return retVal; } }
private static IndexedInts getRow(ColumnValueSelector s) { if (s instanceof DimensionSelector) { return ((DimensionSelector) s).getRow(); } else if (s instanceof NilColumnValueSelector) { return IndexedInts.empty(); } else { throw new ISE( "ColumnValueSelector[%s], only DimensionSelector or NilColumnValueSelector is supported", s.getClass() ); } }
@Override public Object getOnlyValue(ColumnValueSelector selector) { final DimensionSelector dimSelector = (DimensionSelector) selector; final IndexedInts row = dimSelector.getRow(); Preconditions.checkState(row.size() < 2, "Not supported for multi-value dimensions"); return row.size() == 1 ? row.get(0) : GROUP_BY_MISSING_VALUE; }
@Override public int get(int index) { if (index < 0 || index >= size) { throw new IAE("Index[%d] >= size[%d] or < 0", index, size); } return base.get(offset + index); }
@Override public boolean matches() { final IndexedInts row = selector.getRow(); final int size = row.size(); return size == 0; }
@SuppressWarnings("unused") // Set up your IDE to render IndexedInts impls using this method during debug. default String debugToString() { StringBuilder sb = new StringBuilder("["); forEach(v -> sb.append(v).append(',').append(' ')); if (sb.length() > 1) { sb.setLength(sb.length() - 2); } sb.append(']'); return sb.toString(); } }
@Benchmark @BenchmarkMode(Mode.AverageTime) @OutputTimeUnit(TimeUnit.MICROSECONDS) public void uncompressed(Blackhole blackhole) { for (int i = filter.nextSetBit(0); i >= 0; i = filter.nextSetBit(i + 1)) { blackhole.consume(uncompressed.get(i)); } }