github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/tests/integration/sugar_unmarhall_row_test.go (about)

     1  //go:build integration
     2  // +build integration
     3  
     4  package integration
     5  
     6  import (
     7  	"context"
     8  	"os"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/query/scanner"
    14  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/version"
    15  	"github.com/ydb-platform/ydb-go-sdk/v3/internal/xtest"
    16  	"github.com/ydb-platform/ydb-go-sdk/v3/sugar"
    17  )
    18  
    19  func TestSugarUnmarshallRow(t *testing.T) {
    20  	if version.Lt(os.Getenv("YDB_VERSION"), "24.1") {
    21  		t.Skip("query service not allowed in YDB version '" + os.Getenv("YDB_VERSION") + "'")
    22  	}
    23  
    24  	ctx, cancel := context.WithCancel(xtest.Context(t))
    25  	defer cancel()
    26  
    27  	var (
    28  		scope = newScope(t)
    29  		db    = scope.Driver()
    30  	)
    31  
    32  	t.Run("HappyWay", func(t *testing.T) {
    33  		type myStruct struct {
    34  			ID  int32  `sql:"id"`
    35  			Str string `sql:"myStr"`
    36  		}
    37  
    38  		row, err := db.Query().QueryRow(ctx, `SELECT 42 as id, "my string" as myStr`)
    39  		require.NoError(t, err)
    40  
    41  		one, err := sugar.UnmarshallRow[myStruct](row)
    42  		require.NoError(t, err)
    43  		require.NotNil(t, one)
    44  		require.EqualValues(t, 42, one.ID)
    45  		require.EqualValues(t, "my string", one.Str)
    46  	})
    47  	t.Run("UnexpectedColumn", func(t *testing.T) {
    48  		type myStruct struct {
    49  			ID  int32  `sql:"id"`
    50  			Str string `sql:"myStr"`
    51  		}
    52  
    53  		row, err := db.Query().QueryRow(ctx, `SELECT 42 as id, "my string" as myStr, 123 as unexpected_column`)
    54  		require.NoError(t, err)
    55  
    56  		one, err := sugar.UnmarshallRow[myStruct](row)
    57  		require.ErrorIs(t, err, scanner.ErrFieldsNotFoundInStruct)
    58  		require.Nil(t, one)
    59  	})
    60  	t.Run("UnexpectedStructField", func(t *testing.T) {
    61  		type myStruct struct {
    62  			ID              int32  `sql:"id"`
    63  			Str             string `sql:"myStr"`
    64  			UnexpectedField int    `sql:"unexpected_column"`
    65  		}
    66  
    67  		row, err := db.Query().QueryRow(ctx, `SELECT 42 as id, "my string" as myStr`)
    68  		require.NoError(t, err)
    69  
    70  		one, err := sugar.UnmarshallRow[myStruct](row)
    71  		require.ErrorIs(t, err, scanner.ErrColumnsNotFoundInRow)
    72  		require.Nil(t, one)
    73  	})
    74  }