MCPcopy Create free account
hub / github.com/apache/arrow / DecimalRescale

Function DecimalRescale

cpp/src/arrow/util/basic_decimal.cc:1054–1077  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1052
1053template <class DecimalClass>
1054DecimalStatus DecimalRescale(const DecimalClass& value, int32_t original_scale,
1055 int32_t new_scale, DecimalClass* out) {
1056 DCHECK_NE(out, nullptr);
1057
1058 if (original_scale == new_scale) {
1059 *out = value;
1060 return DecimalStatus::kSuccess;
1061 }
1062
1063 const int32_t delta_scale = new_scale - original_scale;
1064 const int32_t abs_delta_scale = std::abs(delta_scale);
1065
1066 DecimalClass multiplier = DecimalClass::GetScaleMultiplier(abs_delta_scale);
1067
1068 const bool rescale_would_cause_data_loss =
1069 RescaleWouldCauseDataLoss(value, delta_scale, multiplier, out);
1070
1071 // Fail if we overflow or truncate
1072 if (ARROW_PREDICT_FALSE(rescale_would_cause_data_loss)) {
1073 return DecimalStatus::kRescaleDataLoss;
1074 }
1075
1076 return DecimalStatus::kSuccess;
1077}
1078
1079DecimalStatus BasicDecimal32::Rescale(int32_t original_scale, int32_t new_scale,
1080 BasicDecimal32* out) const {

Callers 1

RescaleMethod · 0.85

Calls 2

GetScaleMultiplierFunction · 0.85

Tested by

no test coverage detected