@Override public boolean equalTo(Block leftBlock, int leftPosition, Block rightBlock, int rightPosition) { return compareTo(leftBlock, leftPosition, rightBlock, rightPosition) == 0; }
@Override public void writeSlice(BlockBuilder blockBuilder, Slice value) { writeSlice(blockBuilder, value, 0, value.length()); }
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; } Slice slice = block.getSlice(position, 0, getFixedSize()); return new SqlDecimal(decodeUnscaledValue(slice), getPrecision(), getScale()); }
@Override public BlockBuilder createFixedSizeBlockBuilder(int positionCount) { return new FixedWidthBlockBuilder(getFixedSize(), positionCount); }
LongDecimalType(int precision, int scale) { super(precision, scale, Slice.class); validatePrecisionScale(precision, scale, MAX_PRECISION); }
@Override public Object getObjectValue(ConnectorSession session, Block block, int position) { if (block.isNull(position)) { return null; } Slice slice = block.getSlice(position, 0, getFixedSize()); return new SqlDecimal(decodeUnscaledValue(slice), getPrecision(), getScale()); }
@Override public Slice getSlice(Block block, int position) { return block.getSlice(position, 0, getFixedSize()); } }
@Override public BlockBuilder createBlockBuilder(BlockBuilderStatus blockBuilderStatus, int expectedEntries) { return createBlockBuilder(blockBuilderStatus, expectedEntries, getFixedSize()); }
LongDecimalType(int precision, int scale) { super(precision, scale, Slice.class); validatePrecisionScale(precision, scale, MAX_PRECISION); }
private void testCompare(String decimalA, String decimalB, int expected) { int actual = TYPE.compareTo(decimalAsBlock(decimalA), 0, decimalAsBlock(decimalB), 0); assertEquals((int) signum(actual), (int) signum(expected), "bad comparison result for " + decimalA + ", " + decimalB); }
private Block decimalAsBlock(String value) { Slice slice = encodeScaledValue(new BigDecimal(value)); BlockBuilder blockBuilder = new VariableWidthBlockBuilder(null, 1, slice.length()); TYPE.writeSlice(blockBuilder, slice); return blockBuilder.build(); } }
@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 FixedWidthBlockBuilder( getFixedSize(), blockBuilderStatus, Math.min(expectedEntries, maxBlockSizeInBytes / 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); } }
@Override public boolean equalTo(Block leftBlock, int leftPosition, Block rightBlock, int rightPosition) { return compareTo(leftBlock, leftPosition, rightBlock, rightPosition) == 0; }
@Override public void writeSlice(BlockBuilder blockBuilder, Slice value) { writeSlice(blockBuilder, value, 0, value.length()); }
@Override public void appendTo(Block block, int position, BlockBuilder blockBuilder) { if (block.isNull(position)) { blockBuilder.appendNull(); } else { block.writeBytesTo(position, 0, getFixedSize(), blockBuilder); blockBuilder.closeEntry(); } }
@Override public BlockBuilder createFixedSizeBlockBuilder(int positionCount) { return new FixedWidthBlockBuilder(getFixedSize(), positionCount); }
@Override public Slice getSlice(Block block, int position) { return block.getSlice(position, 0, getFixedSize()); } }