@GuardedBy("dimensionDescs") private DimensionDesc addNewDimension(String dim, ColumnCapabilitiesImpl capabilities, DimensionHandler handler) { DimensionDesc desc = new DimensionDesc(dimensionDescs.size(), dim, capabilities, handler); dimensionDescs.put(dim, desc); dimensionDescsList.add(desc); return desc; }
DimensionDesc desc = dimensionDescs.get(dimension); if (desc != null) { capabilities = desc.getCapabilities(); } else { wasNewDim = true; desc = addNewDimension(dimension, capabilities, handler); DimensionHandler handler = desc.getHandler(); DimensionIndexer indexer = desc.getIndexer(); Object dimsKey = null; try { } else if (desc.getIndex() > dims.length || dims[desc.getIndex()] != null) { dims[desc.getIndex()] = dimsKey;
continue; String dimensionName = dimensionDesc.getName(); DimensionHandler handler = dimensionDesc.getHandler(); if (dim == null || handler.getLengthOfEncodedKeyComponent(dim) == 0) { theVals.put(dimensionName, null); continue; final DimensionIndexer indexer = dimensionDesc.getIndexer(); Object rowVals = indexer.convertUnsortedEncodedKeyComponentToActualList(dim); theVals.put(dimensionName, rowVals);
final int dimIndex = desc.getIndex(); final int maxId = getCardinality();
DimensionDesc desc = dimensionDescs.get(dimension); if (desc != null) { capabilities = desc.getCapabilities(); } else { wasNewDim = true; desc = addNewDimension(dimension, capabilities, handler); DimensionHandler handler = desc.getHandler(); DimensionIndexer indexer = desc.getIndexer(); Object dimsKey = null; try { } else if (desc.getIndex() > dims.length || dims[desc.getIndex()] != null) { dims[desc.getIndex()] = dimsKey;
final int dimIndex = desc.getIndex(); class IndexerFloatColumnSelector implements FloatColumnSelector
final int dimIndex = desc.getIndex(); class IndexerDoubleColumnSelector implements DoubleColumnSelector
final int dimIndex = desc.getIndex(); class IndexerLongColumnSelector implements LongColumnSelector
continue; String dimensionName = dimensionDesc.getName(); DimensionHandler handler = dimensionDesc.getHandler(); if (dim == null || handler.getLengthOfEncodedKeyComponent(dim) == 0) { theVals.put(dimensionName, null); continue; final DimensionIndexer indexer = dimensionDesc.getIndexer(); Object rowVals = indexer.convertUnsortedEncodedKeyComponentToActualList(dim); theVals.put(dimensionName, rowVals);
final int dimIndex = dimension.getIndex(); DimensionAccessor accessor = accessors.get(dimension.getName()); continue; final ColumnCapabilities capabilities = dimension.getCapabilities();
.stream() .map(dim -> { ColumnValueSelector selectorWithUnsortedValues = columnSelectorFactory.makeColumnValueSelector(dim.getName()); return dim.getIndexer().convertUnsortedValuesToSorted(selectorWithUnsortedValues); }) .toArray(ColumnValueSelector[]::new);
final DimensionIndexer indexer = dimensionDescs.get(index).getIndexer(); retVal = indexer.compareUnsortedEncodedKeyComponents(lhsIdxs, rhsIdxs); ++index;
private DimensionSelector makeDimensionSelectorUndecorated(DimensionSpec dimensionSpec) { final String dimension = dimensionSpec.getDimension(); final ExtractionFn extractionFn = dimensionSpec.getExtractionFn(); if (dimension.equals(ColumnHolder.TIME_COLUMN_NAME)) { return new SingleScanTimeDimensionSelector(makeColumnValueSelector(dimension), extractionFn, descending); } final IncrementalIndex.DimensionDesc dimensionDesc = index.getDimension(dimensionSpec.getDimension()); if (dimensionDesc == null) { // not a dimension, column may be a metric ColumnCapabilities capabilities = getColumnCapabilities(dimension); if (capabilities == null) { return DimensionSelectorUtils.constantSelector(null, extractionFn); } if (capabilities.getType().isNumeric()) { return capabilities.getType().makeNumericWrappingDimensionSelector( makeColumnValueSelector(dimension), extractionFn ); } // if we can't wrap the base column, just return a column of all nulls return DimensionSelectorUtils.constantSelector(null, extractionFn); } else { final DimensionIndexer indexer = dimensionDesc.getIndexer(); return indexer.makeDimensionSelector(dimensionSpec, rowHolder, dimensionDesc); } }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } IncrementalIndexRow that = (IncrementalIndexRow) o; if (timestamp != that.timestamp) { return false; } if (dims.length != that.dims.length) { return false; } for (int i = 0; i < dims.length; i++) { final DimensionIndexer indexer = dimensionDescsList.get(i).getIndexer(); if (!indexer.checkUnsortedEncodedKeyComponentsEqual(dims[i], that.dims[i])) { return false; } } return true; }
@Override public BitmapValues getBitmapValues(String dimension, int index) { DimensionAccessor accessor = accessors.get(dimension); if (accessor == null) { return BitmapValues.EMPTY; } ColumnCapabilities capabilities = accessor.dimensionDesc.getCapabilities(); DimensionIndexer indexer = accessor.dimensionDesc.getIndexer(); if (!capabilities.hasBitmapIndexes()) { return BitmapValues.EMPTY; } final int id = (Integer) indexer.getUnsortedEncodedValueFromSorted(index); if (id < 0 || id >= indexer.getCardinality()) { return BitmapValues.EMPTY; } MutableBitmap bitmapIndex = accessor.invertedIndexes[id]; if (bitmapIndex == null) { return BitmapValues.EMPTY; } return new MutableBitmapValues(bitmapIndex); }
@Override public ColumnValueSelector<?> makeColumnValueSelector(String columnName) { if (virtualColumns.exists(columnName)) { return virtualColumns.makeColumnValueSelector(columnName, this); } if (columnName.equals(ColumnHolder.TIME_COLUMN_NAME)) { return rowHolder; } final Integer dimIndex = index.getDimensionIndex(columnName); if (dimIndex != null) { final IncrementalIndex.DimensionDesc dimensionDesc = index.getDimension(columnName); final DimensionIndexer indexer = dimensionDesc.getIndexer(); return indexer.makeColumnValueSelector(rowHolder, dimensionDesc); } return index.makeMetricColumnValueSelector(columnName, rowHolder); }
@Override public int getDimensionCardinality(String dimension) { if (dimension.equals(ColumnHolder.TIME_COLUMN_NAME)) { return Integer.MAX_VALUE; } IncrementalIndex.DimensionDesc desc = index.getDimension(dimension); if (desc == null) { return 0; } DimensionIndexer indexer = desc.getIndexer(); int cardinality = indexer.getCardinality(); return cardinality != DimensionSelector.CARDINALITY_UNKNOWN ? cardinality : Integer.MAX_VALUE; }
@Nullable @Override public <T extends Comparable<? super T>> CloseableIndexed<T> getDimValueLookup(String dimension) { final DimensionAccessor accessor = accessors.get(dimension); if (accessor == null) { return null; } final DimensionIndexer indexer = accessor.dimensionDesc.getIndexer(); return indexer.getSortedIndexedValues(); }
@Override public ColumnValueSelector<?> makeColumnValueSelector( IncrementalIndexRowHolder currEntry, IncrementalIndex.DimensionDesc desc ) { return makeDimensionSelector(DefaultDimensionSpec.of(desc.getName()), currEntry, desc); }
@Nullable public Integer getDimensionIndex(String dimension) { DimensionDesc dimSpec = getDimension(dimension); return dimSpec == null ? null : dimSpec.getIndex(); }