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 }