@Override public Void visit(Decimal decimal) { writeString(sqlTypeNameVisitor.visit(decimal)); try { generator.writeFieldName("precision"); generator.writeNumber(decimal.getPrecision()); generator.writeFieldName("scale"); generator.writeNumber(decimal.getScale()); } catch (IOException e) { e.printStackTrace(); } return null; }
@Override public String visit(Decimal type) { return String.format("decimal(%d,%d)", type.getPrecision(), type.getScale()); }
@Override public CompleteType getOutputType(CompleteType baseReturn, List<LogicalExpression> args) { int scale = 0; int precision = 0; // Get the max scale and precision from the inputs for (LogicalExpression e : args) { Decimal arg = e.getCompleteType().getType(Decimal.class); scale = Math.max(scale, arg.getScale()); precision = Math.max(precision, arg.getPrecision()); } return CompleteType.fromDecimalPrecisionScale(precision, scale); } };
decimal(child.getName(), arrowType.getScale(), arrowType.getPrecision()); break;
decimal(child.getName(), arrowType.getScale(), arrowType.getPrecision()); break;
case DECIMAL: Decimal dec = ((Decimal) field.getType()); return new DecimalVector(field.getName(), allocator, dec.getPrecision(), dec.getScale()); case FIXEDSIZEBINARY: return new FixedSizeBinaryVector(field.getName(), allocator, WIDTH_ESTIMATE);
case DECIMAL: eval.assign(out.getHolder().ref("scale"), JExpr.lit(ct.getType(Decimal.class).getScale())); eval.assign(out.getHolder().ref("precision"), JExpr.lit(ct.getType(Decimal.class).getPrecision())); eval.assign(out.getHolder().ref("start"), JExpr.lit(TypeHelper.getSize(getArrowMinorType(type))).mul(indexVariable)); eval.assign(out.getHolder().ref("buffer"), vector.invoke("getDataBuffer"));
case DECIMAL38SPARSE: Decimal fromDecimal = from.getType(Decimal.class); return to.getScale() == fromDecimal.getScale() && to.getPrecision() == fromDecimal.getPrecision(); case VARBINARY: case VARCHAR:
switch(fieldType) { case Decimal: builder.setPrecision(((Decimal) arrowType).getPrecision()).setScale(((Decimal) arrowType).getScale()); break;
Decimal decimal = toType.getType(Decimal.class); castArgs.add(new ValueExpressions.LongExpression(decimal.getPrecision())); castArgs.add(new ValueExpressions.LongExpression(decimal.getScale()));
/** * See https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#decimal * @param type an arrow decimal type * @return a mapping from the arrow decimal to the Parquet type */ @Override public TypeMapping visit(Decimal type) { int precision = type.getPrecision(); int scale = type.getScale(); if (1 <= precision && precision <= 9) { return decimal(INT32, precision, scale); } else if (1 <= precision && precision <= 18) { return decimal(INT64, precision, scale); } else { // Better: FIXED_LENGTH_BYTE_ARRAY with length return decimal(BINARY, precision, scale); } }
/** * Instantiate a DecimalVector. This doesn't allocate any memory for * the data in vector. * * @param name name of the vector * @param fieldType type of Field materialized by this vector * @param allocator allocator for memory management. */ public DecimalVector(String name, FieldType fieldType, BufferAllocator allocator) { super(name, allocator, fieldType, TYPE_WIDTH); ArrowType.Decimal arrowType = (ArrowType.Decimal) fieldType.getType(); reader = new DecimalReaderImpl(DecimalVector.this); this.precision = arrowType.getPrecision(); this.scale = arrowType.getScale(); }
public static int prec(LogicalExpression e){ return e.getCompleteType().getType(Decimal.class).getPrecision(); }
@Override public Integer visit(Time type) { return getPrecision(type.getUnit()); }
@Override public Integer visit(Decimal type) { return type.getPrecision(); }
@Override public Integer visit(Decimal paramDecimal) { return 2 + paramDecimal.getPrecision(); }
@Override public Integer visit(Timestamp type) { return getPrecision(type.getUnit()); }