github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/tests/integration/unexpected_decimal_parse_test.go (about) 1 //go:build integration 2 // +build integration 3 4 package integration 5 6 import ( 7 "context" 8 "testing" 9 10 "github.com/stretchr/testify/require" 11 12 "github.com/ydb-platform/ydb-go-sdk/v3/internal/decimal" 13 "github.com/ydb-platform/ydb-go-sdk/v3/table" 14 "github.com/ydb-platform/ydb-go-sdk/v3/table/types" 15 ) 16 17 func TestIssue1234UnexpectedDecimalRepresentation(t *testing.T) { 18 scope := newScope(t) 19 driver := scope.Driver() 20 21 tests := []struct { 22 name string 23 bts [16]byte 24 precision uint32 25 scale uint32 26 expectedFormat string 27 }{ 28 { 29 bts: [16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 250, 240, 128}, 30 precision: 22, 31 scale: 9, 32 expectedFormat: "0.050000000", 33 }, 34 } 35 for _, tt := range tests { 36 t.Run(tt.name, func(t *testing.T) { 37 expected := decimal.Decimal{ 38 Bytes: tt.bts, 39 Precision: tt.precision, 40 Scale: tt.scale, 41 } 42 var actual decimal.Decimal 43 44 err := driver.Table().Do(scope.Ctx, func(ctx context.Context, s table.Session) error { 45 _, result, err := s.Execute(ctx, table.DefaultTxControl(), ` 46 DECLARE $value AS Decimal(22,9); 47 SELECT $value;`, 48 table.NewQueryParameters( 49 table.ValueParam("$value", types.DecimalValue(&expected)), 50 ), 51 ) 52 if err != nil { 53 return err 54 } 55 for result.NextResultSet(ctx) { 56 for result.NextRow() { 57 err = result.Scan(&actual) 58 if err != nil { 59 return err 60 } 61 } 62 } 63 return nil 64 }) 65 require.NoError(t, err) 66 require.Equal(t, expected, actual) 67 require.Equal(t, tt.expectedFormat, actual.String()) 68 }) 69 } 70 }