github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/sugar/query_test.go (about)

     1  package sugar_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  	"github.com/ydb-platform/ydb-go-genproto/protos/Ydb"
     8  
     9  	internalQuery "github.com/ydb-platform/ydb-go-sdk/v3/internal/query"
    10  	"github.com/ydb-platform/ydb-go-sdk/v3/query"
    11  	"github.com/ydb-platform/ydb-go-sdk/v3/sugar"
    12  )
    13  
    14  func TestUnmarshallRow(t *testing.T) {
    15  	v, err := sugar.UnmarshallRow[rowTestStruct](func() query.Row {
    16  		return newRow(123, "my string")
    17  	}())
    18  	require.NoError(t, err)
    19  	require.EqualValues(t, 123, v.ID)
    20  	require.EqualValues(t, "my string", v.Str)
    21  }
    22  
    23  func TestUnmarshallResultSet(t *testing.T) {
    24  	v, err := sugar.UnmarshallResultSet[rowTestStruct](internalQuery.MaterializedResultSet(-1, nil, nil,
    25  		[]query.Row{
    26  			func() query.Row {
    27  				return newRow(123, "my string 1")
    28  			}(),
    29  			func() query.Row {
    30  				return newRow(456, "my string 2")
    31  			}(),
    32  		},
    33  	))
    34  	require.NoError(t, err)
    35  	require.Len(t, v, 2)
    36  	require.EqualValues(t, 123, v[0].ID)
    37  	require.EqualValues(t, "my string 1", v[0].Str)
    38  	require.EqualValues(t, 456, v[1].ID)
    39  	require.EqualValues(t, "my string 2", v[1].Str)
    40  }
    41  
    42  type rowTestStruct struct {
    43  	ID  uint64 `sql:"id"`
    44  	Str string `sql:"myStr"`
    45  }
    46  
    47  // newRow return row for unmarshal to rowTestStruct
    48  func newRow(id uint64, str string) *internalQuery.Row {
    49  	return internalQuery.NewRow([]*Ydb.Column{
    50  		{
    51  			Name: "id",
    52  			Type: &Ydb.Type{
    53  				Type: &Ydb.Type_TypeId{
    54  					TypeId: Ydb.Type_UINT64,
    55  				},
    56  			},
    57  		},
    58  		{
    59  			Name: "myStr",
    60  			Type: &Ydb.Type{
    61  				Type: &Ydb.Type_TypeId{
    62  					TypeId: Ydb.Type_UTF8,
    63  				},
    64  			},
    65  		},
    66  	}, &Ydb.Value{
    67  		Items: []*Ydb.Value{{
    68  			Value: &Ydb.Value_Uint64Value{
    69  				Uint64Value: id,
    70  			},
    71  		}, {
    72  			Value: &Ydb.Value_TextValue{
    73  				TextValue: str,
    74  			},
    75  		}},
    76  	})
    77  }