github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/tests/integration/sugar_unmarhall_result_set_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 TestSugarUnmarshallResultSet(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 rows, err := db.Query().QueryResultSet(ctx, ` 39 SELECT 42 as id, "myStr42" as myStr 40 UNION 41 SELECT 43 as id, "myStr43" as myStr 42 ORDER BY id 43 `) 44 require.NoError(t, err) 45 46 many, err := sugar.UnmarshallResultSet[myStruct](rows) 47 require.NoError(t, err) 48 require.Len(t, many, 2) 49 require.NotNil(t, many[0]) 50 require.NotNil(t, many[1]) 51 require.EqualValues(t, 42, many[0].ID) 52 require.EqualValues(t, "myStr42", many[0].Str) 53 require.EqualValues(t, 43, many[1].ID) 54 require.EqualValues(t, "myStr43", many[1].Str) 55 }) 56 t.Run("UnexpectedColumn", func(t *testing.T) { 57 type myStruct struct { 58 ID int32 `sql:"id"` 59 Str string `sql:"myStr"` 60 } 61 62 rows, err := db.Query().QueryResultSet(ctx, ` 63 SELECT 42 as id, "myStr42" as myStr, 123 as unexpected_column 64 UNION 65 SELECT 43 as id, "myStr43" as myStr, 123 as unexpected_column 66 ORDER BY id 67 `) 68 require.NoError(t, err) 69 70 many, err := sugar.UnmarshallResultSet[myStruct](rows) 71 require.ErrorIs(t, err, scanner.ErrFieldsNotFoundInStruct) 72 require.Empty(t, many) 73 }) 74 t.Run("UnexpectedStructField", func(t *testing.T) { 75 type myStruct struct { 76 ID int32 `sql:"id"` 77 Str string `sql:"myStr"` 78 UnexpectedField int `sql:"unexpected_column"` 79 } 80 81 rows, err := db.Query().QueryResultSet(ctx, ` 82 SELECT 42 as id, "myStr42" as myStr 83 UNION 84 SELECT 43 as id, "myStr43" as myStr 85 ORDER BY id 86 `) 87 88 many, err := sugar.UnmarshallResultSet[myStruct](rows) 89 require.ErrorIs(t, err, scanner.ErrColumnsNotFoundInRow) 90 require.Empty(t, many) 91 }) 92 }