public static DecimalType createDecimalType(int precision, int scale) { if (precision <= MAX_SHORT_PRECISION) { return new ShortDecimalType(precision, scale); } else { return new LongDecimalType(precision, scale); } }
@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries) { return createBlockBuilder(blockBuilderStatus, expectedEntries, getFixedSize()); }
@Override public Object getObjectValue(ConnectorSession session, Block block, int position) { if (block.isNull(position)) { return null; } long unscaledValue = block.getLong(position, 0); return new SqlDecimal(BigInteger.valueOf(unscaledValue), getPrecision(), getScale()); }
ShortDecimalType(int precision, int scale) { super(precision, scale, long.class); validatePrecisionScale(precision, scale, MAX_SHORT_PRECISION); }
@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry) { int maxBlockSizeInBytes; if (blockBuilderStatus == null) { maxBlockSizeInBytes = PageBuilderStatus.DEFAULT_MAX_PAGE_SIZE_IN_BYTES; } else { maxBlockSizeInBytes = blockBuilderStatus.getMaxPageSizeInBytes(); } return new LongArrayBlockBuilder( blockBuilderStatus, Math.min(expectedEntries, maxBlockSizeInBytes / getFixedSize())); }
ShortDecimalType(int precision, int scale) { super(precision, scale, long.class); validatePrecisionScale(precision, scale, MAX_SHORT_PRECISION); }
@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries, int expectedBytesPerEntry) { int maxBlockSizeInBytes; if (blockBuilderStatus == null) { maxBlockSizeInBytes = PageBuilderStatus.DEFAULT_MAX_PAGE_SIZE_IN_BYTES; } else { maxBlockSizeInBytes = blockBuilderStatus.getMaxPageSizeInBytes(); } return new LongArrayBlockBuilder( blockBuilderStatus, Math.min(expectedEntries, maxBlockSizeInBytes / getFixedSize())); }
@Override public Object getObjectValue(ConnectorSession session, Block block, int position) { if (block.isNull(position)) { return null; } long unscaledValue = block.getLong(position, 0); return new SqlDecimal(BigInteger.valueOf(unscaledValue), getPrecision(), getScale()); }
@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries) { return createBlockBuilder(blockBuilderStatus, expectedEntries, getFixedSize()); }
public static DecimalType createDecimalType(int precision, int scale) { if (precision <= MAX_SHORT_PRECISION) { return new ShortDecimalType(precision, scale); } else { return new LongDecimalType(precision, scale); } }