diff --git a/CHANGELOG.md b/CHANGELOG.md index 27ef3b408..40e3da012 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ * Added write to topics within transactions +* Fixed marshal optional parameter of ydb.ParamBuilder to protobuf ## v3.80.10 * Added `ydb.WithSessionPoolSessionUsageLimit()` option for limitation max count of session usage diff --git a/internal/params/optional.go b/internal/params/optional.go index 94aa7188b..8be04b1a6 100644 --- a/internal/params/optional.go +++ b/internal/params/optional.go @@ -21,7 +21,7 @@ func (b *optionalBuilder) EndOptional() Builder { b.opt.parent.params = append(b.opt.parent.params, &Parameter{ parent: b.opt.parent, name: b.opt.name, - value: value.OptionalValue(b.opt.value), + value: b.opt.value, }) return b.opt.parent diff --git a/tests/integration/table_regression_test.go b/tests/integration/table_regression_test.go index e74530c11..322d939ad 100644 --- a/tests/integration/table_regression_test.go +++ b/tests/integration/table_regression_test.go @@ -6,6 +6,8 @@ package integration import ( "context" "fmt" + "github.com/ydb-platform/ydb-go-sdk/v3" + "github.com/ydb-platform/ydb-go-sdk/v3/query" "strconv" "strings" "testing" @@ -113,3 +115,34 @@ func TestRegressionIssue1227RetryBadSession(t *testing.T) { require.NoError(t, err) require.EqualValues(t, 100, cnt) } + +func TestOptionalWithParamBuilder(t *testing.T) { + t.Run("Nil", func(t *testing.T) { + scope := newScope(t) + row, err := scope.Driver().Query().QueryRow(scope.Ctx, ` +DECLARE $val AS Int64?; + +SELECT $val +`, query.WithParameters(ydb.ParamsBuilder().Param("$val").BeginOptional().Int64(nil).EndOptional().Build())) + require.NoError(t, err) + var val *int64 + err = row.Scan(&val) + require.NoError(t, err) + require.Nil(t, val) + }) + t.Run("Val", func(t *testing.T) { + scope := newScope(t) + param := int64(123) + row, err := scope.Driver().Query().QueryRow(scope.Ctx, ` +DECLARE $val AS Int64?; + +SELECT $val +`, query.WithParameters(ydb.ParamsBuilder().Param("$val").BeginOptional().Int64(¶m).EndOptional().Build())) + require.NoError(t, err) + var val *int64 + err = row.Scan(&val) + require.NoError(t, err) + require.Equal(t, param, *val) + }) + +}