MCPcopy Create free account
hub / github.com/cockroachdb/cockroachdb-parser / decodeDecimal

Function decodeDecimal

pkg/util/encoding/decimal.go:253–318  ·  view source on GitHub ↗
(buf []byte, tmp []byte, invert bool)

Source from the content-addressed store, hash-verified

251}
252
253func decodeDecimal(buf []byte, tmp []byte, invert bool) ([]byte, apd.Decimal, error) {
254 // Handle the simplistic cases first.
255 switch buf[0] {
256 case decimalNaN, decimalNaNDesc:
257 return buf[1:], apd.Decimal{Form: apd.NaN}, nil
258 case decimalInfinity:
259 return buf[1:], apd.Decimal{Form: apd.Infinite, Negative: invert}, nil
260 case decimalNegativeInfinity:
261 return buf[1:], apd.Decimal{Form: apd.Infinite, Negative: !invert}, nil
262 case decimalZero:
263 return buf[1:], apd.Decimal{}, nil
264 }
265 tmp = tmp[len(tmp):cap(tmp)]
266 switch {
267 case buf[0] == decimalNegLarge:
268 // Negative large.
269 e, m, r, tmp2, err := decodeLargeNumber(true, buf, tmp)
270 if err != nil {
271 return nil, apd.Decimal{}, err
272 }
273 d, err := makeDecimalFromMandE(!invert, e, m, tmp2)
274 return r, d, err
275 case buf[0] > decimalNegLarge && buf[0] <= decimalNegMedium:
276 // Negative medium.
277 e, m, r, tmp2, err := decodeMediumNumber(true, buf, tmp)
278 if err != nil {
279 return nil, apd.Decimal{}, err
280 }
281 d, err := makeDecimalFromMandE(!invert, e, m, tmp2)
282 return r, d, err
283 case buf[0] == decimalNegSmall:
284 // Negative small.
285 e, m, r, tmp2, err := decodeSmallNumber(true, buf, tmp)
286 if err != nil {
287 return nil, apd.Decimal{}, err
288 }
289 d, err := makeDecimalFromMandE(!invert, e, m, tmp2)
290 return r, d, err
291 case buf[0] == decimalPosLarge:
292 // Positive large.
293 e, m, r, tmp2, err := decodeLargeNumber(false, buf, tmp)
294 if err != nil {
295 return nil, apd.Decimal{}, err
296 }
297 d, err := makeDecimalFromMandE(invert, e, m, tmp2)
298 return r, d, err
299 case buf[0] >= decimalPosMedium && buf[0] < decimalPosLarge:
300 // Positive medium.
301 e, m, r, tmp2, err := decodeMediumNumber(false, buf, tmp)
302 if err != nil {
303 return nil, apd.Decimal{}, err
304 }
305 d, err := makeDecimalFromMandE(invert, e, m, tmp2)
306 return r, d, err
307 case buf[0] == decimalPosSmall:
308 // Positive small.
309 e, m, r, tmp2, err := decodeSmallNumber(false, buf, tmp)
310 if err != nil {

Callers 2

DecodeDecimalAscendingFunction · 0.85
DecodeDecimalDescendingFunction · 0.85

Calls 5

decodeLargeNumberFunction · 0.85
makeDecimalFromMandEFunction · 0.85
decodeMediumNumberFunction · 0.85
decodeSmallNumberFunction · 0.85
ErrorfMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…