public DrillBinaryToDecimal38Converter(
     Decimal38SparseWriter writer, int precision, int scale, DrillBuf buf) {
   this.writer = writer;
   this.buf = buf.reallocIfNeeded(38);
   holder.precision = precision;
   holder.scale = scale;
 }
 @Override
 public void addBinary(Binary value) {
   BigDecimal bigDecimal =
       DecimalUtility.getBigDecimalFromByteArray(
           value.getBytes(), 0, value.length(), holder.scale);
   DecimalUtility.getSparseFromBigDecimal(
       bigDecimal, buf, 0, holder.scale, holder.precision, Decimal38SparseHolder.nDecimalDigits);
   holder.buffer = buf;
   writer.write(holder);
 }
  public static Decimal38SparseHolder getDecimal38Holder(DrillBuf buf, String decimal) {

    Decimal38SparseHolder dch = new Decimal38SparseHolder();

    BigDecimal bigDecimal = new BigDecimal(decimal);

    dch.scale = bigDecimal.scale();
    dch.precision = bigDecimal.precision();
    Decimal38SparseHolder.setSign(bigDecimal.signum() == -1, dch.start, dch.buffer);
    dch.start = 0;
    dch.buffer = buf.reallocIfNeeded(dch.maxPrecision * DecimalUtility.INTEGER_SIZE);
    DecimalUtility.getSparseFromBigDecimal(
        bigDecimal, dch.buffer, dch.start, dch.scale, dch.precision, dch.nDecimalDigits);

    return dch;
  }