private static DecimalTypeInfo adjustType(HiveDecimal hd) { // Note: the normalize() call with rounding in HiveDecimal will currently reduce the // precision and scale of the value by throwing away trailing zeroes. This may or may // not be desirable for the literals; however, this used to be the default behavior // for explicit decimal literals (e.g. 1.0BD), so we keep this behavior for now. int prec = 1; int scale = 0; if (hd != null) { prec = hd.precision(); scale = hd.scale(); } DecimalTypeInfo typeInfo = TypeInfoFactory.getDecimalTypeInfo(prec, scale); return typeInfo; }
private TypeInfo getDecimalScalarTypeInfo(Object scalarObject) { HiveDecimal dec = (HiveDecimal) scalarObject; int precision = dec.precision(); int scale = dec.scale(); return new DecimalTypeInfo(precision, scale); }
private TypeInfo getDecimalScalarTypeInfo(Object scalarObject) { HiveDecimal dec = (HiveDecimal) scalarObject; int precision = dec.precision(); int scale = dec.scale(); return new DecimalTypeInfo(precision, scale); }
public static ExprNodeConstantDesc createDecimal(String strVal, boolean notNull) { // Note: the normalize() call with rounding in HiveDecimal will currently reduce the // precision and scale of the value by throwing away trailing zeroes. This may or may // not be desirable for the literals; however, this used to be the default behavior // for explicit decimal literals (e.g. 1.0BD), so we keep this behavior for now. HiveDecimal hd = HiveDecimal.create(strVal); if (notNull && hd == null) return null; int prec = 1; int scale = 0; if (hd != null) { prec = hd.precision(); scale = hd.scale(); } DecimalTypeInfo typeInfo = TypeInfoFactory.getDecimalTypeInfo(prec, scale); return new ExprNodeConstantDesc(typeInfo, hd); }
private DecimalTypeInfo decimalTypeFromCastToDecimal(ExprNodeDesc exprNodeDesc, DecimalTypeInfo returnDecimalType) throws HiveException { if (exprNodeDesc instanceof ExprNodeConstantDesc) { // Return a constant vector expression Object constantValue = ((ExprNodeConstantDesc) exprNodeDesc).getValue(); HiveDecimal decimalValue = castConstantToDecimal(constantValue, exprNodeDesc.getTypeInfo()); if (decimalValue == null) { // Return something. return returnDecimalType; } return new DecimalTypeInfo(decimalValue.precision(), decimalValue.scale()); } String inputType = exprNodeDesc.getTypeString(); if (isIntFamily(inputType) || isFloatFamily(inputType) || decimalTypePattern.matcher(inputType).matches() || isStringFamily(inputType) || inputType.equals("timestamp")) { return returnDecimalType; } return null; }
@Override public int precision() { if (value == null) { return super.precision(); } return value.getHiveDecimal().precision(); }
@Override public int precision() { if (value == null) { return super.precision(); } return value.getHiveDecimal().precision(); }
@Override public int precision() { if (value == null) { return super.precision(); } return value.getHiveDecimal().precision(); }
public static HiveDecimal enforcePrecisionScale(HiveDecimal dec,int maxPrecision, int maxScale) { if (dec == null) { return null; } // Minor optimization, avoiding creating new objects. if (dec.precision() - dec.scale() <= maxPrecision - maxScale && dec.scale() <= maxScale) { return dec; } BigDecimal bd = HiveDecimal.enforcePrecisionScale(dec.bigDecimalValue(), maxPrecision, maxScale); if (bd == null) { return null; } return HiveDecimal.create(bd); }
public static HiveDecimal enforcePrecisionScale(HiveDecimal dec,int maxPrecision, int maxScale) { if (dec == null) { return null; } // Minor optimization, avoiding creating new objects. if (dec.precision() - dec.scale() <= maxPrecision - maxScale && dec.scale() <= maxScale) { return dec; } BigDecimal bd = HiveDecimal.enforcePrecisionScale(dec.bigDecimalValue(), maxPrecision, maxScale); if (bd == null) { return null; } return HiveDecimal.create(bd); }
public static HiveDecimal enforcePrecisionScale(HiveDecimal dec,int maxPrecision, int maxScale) { if (dec == null) { return null; } // Minor optimization, avoiding creating new objects. if (dec.precision() - dec.scale() <= maxPrecision - maxScale && dec.scale() <= maxScale) { return dec; } BigDecimal bd = HiveDecimal.enforcePrecisionScale(dec.bigDecimalValue(), maxPrecision, maxScale); if (bd == null) { return null; } return HiveDecimal.create(bd); }
int scale = 0; if (hd != null) { prec = hd.precision(); scale = hd.scale();