private void convertValueForDecimalType(ColumnPageValueConverter codec) { switch (decimalConverter.getDecimalConverterType()) { case DECIMAL_INT: for (int i = 0; i < pageSize; i++) { long offset = (long)i << intBits; codec.encode(i, CarbonUnsafe.getUnsafe().getInt(baseAddress, baseOffset + offset)); } break; case DECIMAL_LONG: for (int i = 0; i < pageSize; i++) { long offset = (long)i << longBits; codec.encode(i, CarbonUnsafe.getUnsafe().getLong(baseAddress, baseOffset + offset)); } break; default: throw new UnsupportedOperationException("not support value conversion on " + columnPageEncoderMeta.getStoreDataType() + " page"); } }
@Override public void convertValue(ColumnPageValueConverter codec) { switch (decimalConverter.getDecimalConverterType()) { case DECIMAL_INT: for (int i = 0; i < pageSize; i++) { codec.encode(i, intData[i]); } break; case DECIMAL_LONG: for (int i = 0; i < pageSize; i++) { codec.encode(i, longData[i]); } break; default: throw new UnsupportedOperationException("not support value conversion on " + columnPageEncoderMeta.getStoreDataType() + " page"); } }
@Override public void putDecimal(int rowId, BigDecimal decimal) { switch (decimalConverter.getDecimalConverterType()) { case DECIMAL_INT: if (null == intData) { intData = new int[pageSize]; } putInt(rowId, (int) decimalConverter.convert(decimal)); break; case DECIMAL_LONG: if (null == longData) { longData = new long[pageSize]; } putLong(rowId, (long) decimalConverter.convert(decimal)); break; default: putBytes(rowId, (byte[]) decimalConverter.convert(decimal)); } }
private ColumnPageEncoder createEncoderForDecimalDataTypeMeasure(ColumnPage columnPage, TableSpec.ColumnSpec columnSpec) { DecimalConverterFactory.DecimalConverterType decimalConverterType = ((DecimalColumnPage) columnPage).getDecimalConverter().getDecimalConverterType(); switch (decimalConverterType) { case DECIMAL_INT: case DECIMAL_LONG: return selectCodecByAlgorithmForDecimal(columnPage.getStatistics(), decimalConverterType, columnSpec) .createEncoder(null); default: return new DirectCompressCodec(columnPage.getDataType()).createEncoder(null); } }
private BigDecimal getDecimalFromRawData(int rowId) { long value; switch (decimalConverter.getDecimalConverterType()) { case DECIMAL_INT: value = getInt(rowId); break; case DECIMAL_LONG: value = getLong(rowId); break; default: value = getByte(rowId); } return decimalConverter.getDecimal(value); }
@Override public void putDecimal(int rowId, BigDecimal decimal) { switch (decimalConverter.getDecimalConverterType()) { case DECIMAL_INT: putInt(rowId, (int) decimalConverter.convert(decimal)); break; case DECIMAL_LONG: putLong(rowId, (long) decimalConverter.convert(decimal)); break; default: putBytes(rowId, (byte[]) decimalConverter.convert(decimal)); } }