private void assertDimCompression(QueryableIndex index, CompressionStrategy expectedStrategy) throws Exception { // Java voodoo if (expectedStrategy == null || expectedStrategy == CompressionStrategy.UNCOMPRESSED) { return; } DictionaryEncodedColumn encodedColumn = (DictionaryEncodedColumn) index.getColumnHolder("dim2").getColumn(); Object obj; if (encodedColumn.hasMultipleValues()) { Field field = StringDictionaryEncodedColumn.class.getDeclaredField("multiValueColumn"); field.setAccessible(true); obj = field.get(encodedColumn); } else { Field field = StringDictionaryEncodedColumn.class.getDeclaredField("column"); field.setAccessible(true); obj = field.get(encodedColumn); } // CompressedVSizeColumnarIntsSupplier$CompressedByteSizeColumnarInts // CompressedVSizeColumnarMultiIntsSupplier$CompressedVSizeColumnarMultiInts Field compressedSupplierField = obj.getClass().getDeclaredField("this$0"); compressedSupplierField.setAccessible(true); Object supplier = compressedSupplierField.get(obj); Field compressionField = supplier.getClass().getDeclaredField("compression"); compressionField.setAccessible(true); Object strategy = compressionField.get(supplier); Assert.assertEquals(expectedStrategy, strategy); }
/** * 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; } }
); Assert.assertEquals(subsetList.toString(), hasMultipleValues, dictionaryColumn.hasMultipleValues()); Assert.assertEquals(subsetList.toString(), uniqueValues.size(), dictionaryColumn.getCardinality());