(value compatibleScalarValue)
| 501 | } |
| 502 | |
| 503 | func compatibleValueToString(value compatibleScalarValue) (string, bool) { |
| 504 | if value.typeID == BOOL { |
| 505 | if value.boolVal { |
| 506 | return "true", true |
| 507 | } |
| 508 | return "false", true |
| 509 | } |
| 510 | switch value.typeID { |
| 511 | case INT8, INT16, INT32, VARINT32, INT64, VARINT64, TAGGED_INT64: |
| 512 | return strconv.FormatInt(value.signed, 10), true |
| 513 | case UINT8, UINT16, UINT32, VAR_UINT32, UINT64, VAR_UINT64, TAGGED_UINT64: |
| 514 | return strconv.FormatUint(value.unsigned, 10), true |
| 515 | case FLOAT16: |
| 516 | f := float16.Float16FromBits(value.halfBits) |
| 517 | if !f.IsFinite() { |
| 518 | return "", false |
| 519 | } |
| 520 | return finiteFloatRatString(exactRatFromFloat32(f.Float32()), f.Signbit() && f.IsZero()) |
| 521 | case BFLOAT16: |
| 522 | f := bfloat16.BFloat16FromBits(value.halfBits).Float32() |
| 523 | if math.IsNaN(float64(f)) || math.IsInf(float64(f), 0) { |
| 524 | return "", false |
| 525 | } |
| 526 | return finiteFloatRatString(exactRatFromFloat32(f), math.Float32bits(f) == 0x80000000) |
| 527 | case FLOAT32: |
| 528 | f := float32(value.float64) |
| 529 | if math.IsNaN(float64(f)) || math.IsInf(float64(f), 0) { |
| 530 | return "", false |
| 531 | } |
| 532 | return finiteFloatRatString(exactRatFromFloat32(f), value.negZero) |
| 533 | case FLOAT64: |
| 534 | if math.IsNaN(value.float64) || math.IsInf(value.float64, 0) { |
| 535 | return "", false |
| 536 | } |
| 537 | return finiteFloatRatString(exactRatFromFloat64(value.float64), value.negZero) |
| 538 | case DECIMAL: |
| 539 | return canonicalDecimalString(value.decimal) |
| 540 | default: |
| 541 | return "", false |
| 542 | } |
| 543 | } |
| 544 | |
| 545 | func compatibleValueToDecimal(value compatibleScalarValue) (Decimal, bool) { |
| 546 | if value.typeID == BOOL { |
no test coverage detected