Skip to content

Commit 6a9f4b2

Browse files
committed
Merge branch 'refs/heads/master' into write-message-in-transaction
2 parents 5034fda + 18e9f8b commit 6a9f4b2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1782
-436
lines changed

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ jobs:
6868
go-version: "1.23.x"
6969
- name: Install utilities
7070
run: |
71-
go install mvdan.cc/gofumpt@v0.3.1
71+
go install mvdan.cc/gofumpt@v0.7.0
7272
go install github.com/daixiang0/[email protected]
7373
- name: format all files with auto-formatter
7474
run: bash ./.github/scripts/format-all-go-code.sh "$PWD"

.github/workflows/tests.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
fail-fast: false
5252
matrix:
5353
go-version: [1.21.x, 1.22.x, 1.23.x]
54-
ydb-version: [23.3, 24.1]
54+
ydb-version: [23.3, 24.1, 24.2]
5555
os: [ubuntu]
5656
services:
5757
ydb:

CHANGELOG.md

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,22 @@
1-
* Renamed method at experimental API reader.PopBatchTx to reader.PopMessagesBatchTx
1+
## v3.80.10
2+
* Added `ydb.WithSessionPoolSessionUsageLimit()` option for limitation max count of session usage
3+
* Refactored experimental topic iterators in `topicsugar` package
4+
5+
## v3.80.9
6+
* Fixed bug in experimental api: `ydb.ParamsBuilder().Param().Optional()` receive pointer and really produce optional value.
7+
8+
## v3.80.8
9+
* Added `ydb.WithLazyTx(bool)` option for create lazy transactions on `query.Session.Begin` call
10+
* Added initial experimental topic and cdc-helpers, see examples in [tests/integration/topic_helpers_test.go](https://github.com/ydb-platform/ydb-go-sdk/blob/master/tests/integration/topic_helpers_test.go)
11+
* Added experimental `sugar.UnmarshalRows` for user unmarshaller structs in own code in go 1.23, change example for use the iterator.
12+
* Added `ydb_go_sdk_ydb_query_pool_size_index` metrics
13+
14+
## v3.80.7
15+
* Fixed bug with doesn't rollback the transaction on the operation error in table service
16+
17+
## v3.80.6
18+
* Fixed concurrent map writes in metrics
19+
* Renamed method at experimental API `reader.PopBatchTx` to `reader.PopMessagesBatchTx`
220

321
## v3.80.5
422
* Fixed connections pool leak on failed `ydb.Open` call

examples/basic/native/query/series.go

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
ydb "github.com/ydb-platform/ydb-go-sdk/v3"
1313
"github.com/ydb-platform/ydb-go-sdk/v3/query"
14+
"github.com/ydb-platform/ydb-go-sdk/v3/sugar"
1415
)
1516

1617
func read(ctx context.Context, c query.Client, prefix string) error {
@@ -43,26 +44,18 @@ func read(ctx context.Context, c query.Client, prefix string) error {
4344

4445
return err
4546
}
46-
for {
47-
row, err := resultSet.NextRow(ctx)
47+
type info struct {
48+
SeriesID string `sql:"series_id"`
49+
Title string `sql:"title"`
50+
ReleaseDate time.Time `sql:"release_date"`
51+
}
52+
for row, err := range sugar.UnmarshalRows[info](resultSet.Rows(ctx)) {
4853
if err != nil {
49-
if errors.Is(err, io.EOF) {
50-
break
51-
}
52-
5354
return err
5455
}
5556

56-
var info struct {
57-
SeriesID string `sql:"series_id"`
58-
Title string `sql:"title"`
59-
ReleaseDate time.Time `sql:"release_date"`
60-
}
61-
err = row.ScanStruct(&info)
62-
if err != nil {
63-
return err
64-
}
65-
log.Printf("%+v", info)
57+
log.Printf("id: %v, title: %v, release: %v",
58+
row.SeriesID, row.Title, row.ReleaseDate)
6659
}
6760
}
6861

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
//go:build go1.23
2+
3+
package topicreaderexamples
4+
5+
import (
6+
"context"
7+
"fmt"
8+
9+
"github.com/ydb-platform/ydb-go-sdk/v3/topic/topicreader"
10+
"github.com/ydb-platform/ydb-go-sdk/v3/topic/topicsugar"
11+
firestore "google.golang.org/genproto/firestore/bundle"
12+
)
13+
14+
// IterateOverMessagesAsString is simple example for easy start read messages
15+
// it is not recommend way for heavy-load processing, batch processing usually will faster
16+
func IterateOverMessagesAsString(ctx context.Context, reader *topicreader.Reader) error {
17+
for msg, err := range topicsugar.StringIterator(ctx, reader) {
18+
if err != nil {
19+
return err
20+
}
21+
fmt.Println(msg.Data)
22+
_ = reader.Commit(msg.Context(), msg)
23+
}
24+
25+
return nil
26+
}
27+
28+
// IterateOverStructUnmarshalledFromJSON is example for effective way for unmarshal json message content to value
29+
func IterateOverStructUnmarshalledFromJSON(ctx context.Context, r *topicreader.Reader) error {
30+
//nolint:tagliatelle
31+
type S struct {
32+
MyField int `json:"my_field"`
33+
}
34+
35+
for msg, err := range topicsugar.JSONIterator[S](ctx, r) {
36+
if err != nil {
37+
return err
38+
}
39+
fmt.Println(msg.Data.MyField)
40+
}
41+
42+
return nil
43+
}
44+
45+
// IterateOverProtobufMessages is example for effective way for unmarshal protobuf message content to value
46+
func IterateOverProtobufMessages(ctx context.Context, r *topicreader.Reader) error {
47+
for msg, err := range topicsugar.ProtobufIterator[*firestore.BundledDocumentMetadata](ctx, r) {
48+
if err != nil {
49+
return err
50+
}
51+
fmt.Println(msg.Data.GetName())
52+
}
53+
54+
return nil
55+
}

internal/params/optional.go

Lines changed: 50 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -27,152 +27,152 @@ func (b *optionalBuilder) EndOptional() Builder {
2727
return b.opt.parent
2828
}
2929

30-
func (p *optional) Text(v string) *optionalBuilder {
31-
p.value = value.TextValue(v)
30+
func (p *optional) Text(v *string) *optionalBuilder {
31+
p.value = value.NullableTextValue(v)
3232

3333
return &optionalBuilder{opt: p}
3434
}
3535

36-
func (p *optional) Bytes(v []byte) *optionalBuilder {
37-
p.value = value.BytesValue(v)
36+
func (p *optional) Bytes(v *[]byte) *optionalBuilder {
37+
p.value = value.NullableBytesValue(v)
3838

3939
return &optionalBuilder{opt: p}
4040
}
4141

42-
func (p *optional) Bool(v bool) *optionalBuilder {
43-
p.value = value.BoolValue(v)
42+
func (p *optional) Bool(v *bool) *optionalBuilder {
43+
p.value = value.NullableBoolValue(v)
4444

4545
return &optionalBuilder{opt: p}
4646
}
4747

48-
func (p *optional) Uint64(v uint64) *optionalBuilder {
49-
p.value = value.Uint64Value(v)
48+
func (p *optional) Uint64(v *uint64) *optionalBuilder {
49+
p.value = value.NullableUint64Value(v)
5050

5151
return &optionalBuilder{opt: p}
5252
}
5353

54-
func (p *optional) Int64(v int64) *optionalBuilder {
55-
p.value = value.Int64Value(v)
54+
func (p *optional) Int64(v *int64) *optionalBuilder {
55+
p.value = value.NullableInt64Value(v)
5656

5757
return &optionalBuilder{opt: p}
5858
}
5959

60-
func (p *optional) Uint32(v uint32) *optionalBuilder {
61-
p.value = value.Uint32Value(v)
60+
func (p *optional) Uint32(v *uint32) *optionalBuilder {
61+
p.value = value.NullableUint32Value(v)
6262

6363
return &optionalBuilder{opt: p}
6464
}
6565

66-
func (p *optional) Int32(v int32) *optionalBuilder {
67-
p.value = value.Int32Value(v)
66+
func (p *optional) Int32(v *int32) *optionalBuilder {
67+
p.value = value.NullableInt32Value(v)
6868

6969
return &optionalBuilder{opt: p}
7070
}
7171

72-
func (p *optional) Uint16(v uint16) *optionalBuilder {
73-
p.value = value.Uint16Value(v)
72+
func (p *optional) Uint16(v *uint16) *optionalBuilder {
73+
p.value = value.NullableUint16Value(v)
7474

7575
return &optionalBuilder{opt: p}
7676
}
7777

78-
func (p *optional) Int16(v int16) *optionalBuilder {
79-
p.value = value.Int16Value(v)
78+
func (p *optional) Int16(v *int16) *optionalBuilder {
79+
p.value = value.NullableInt16Value(v)
8080

8181
return &optionalBuilder{opt: p}
8282
}
8383

84-
func (p *optional) Uint8(v uint8) *optionalBuilder {
85-
p.value = value.Uint8Value(v)
84+
func (p *optional) Uint8(v *uint8) *optionalBuilder {
85+
p.value = value.NullableUint8Value(v)
8686

8787
return &optionalBuilder{opt: p}
8888
}
8989

90-
func (p *optional) Int8(v int8) *optionalBuilder {
91-
p.value = value.Int8Value(v)
90+
func (p *optional) Int8(v *int8) *optionalBuilder {
91+
p.value = value.NullableInt8Value(v)
9292

9393
return &optionalBuilder{opt: p}
9494
}
9595

96-
func (p *optional) Float(v float32) *optionalBuilder {
97-
p.value = value.FloatValue(v)
96+
func (p *optional) Float(v *float32) *optionalBuilder {
97+
p.value = value.NullableFloatValue(v)
9898

9999
return &optionalBuilder{opt: p}
100100
}
101101

102-
func (p *optional) Double(v float64) *optionalBuilder {
103-
p.value = value.DoubleValue(v)
102+
func (p *optional) Double(v *float64) *optionalBuilder {
103+
p.value = value.NullableDoubleValue(v)
104104

105105
return &optionalBuilder{opt: p}
106106
}
107107

108-
func (p *optional) Decimal(v [16]byte, precision, scale uint32) *optionalBuilder {
109-
p.value = value.DecimalValue(v, precision, scale)
108+
func (p *optional) Decimal(v *[16]byte, precision, scale uint32) *optionalBuilder {
109+
p.value = value.NullableDecimalValue(v, precision, scale)
110110

111111
return &optionalBuilder{opt: p}
112112
}
113113

114-
func (p *optional) Timestamp(v time.Time) *optionalBuilder {
115-
p.value = value.TimestampValueFromTime(v)
114+
func (p *optional) Timestamp(v *time.Time) *optionalBuilder {
115+
p.value = value.NullableTimestampValueFromTime(v)
116116

117117
return &optionalBuilder{opt: p}
118118
}
119119

120-
func (p *optional) Date(v time.Time) *optionalBuilder {
121-
p.value = value.DateValueFromTime(v)
120+
func (p *optional) Date(v *time.Time) *optionalBuilder {
121+
p.value = value.NullableDateValueFromTime(v)
122122

123123
return &optionalBuilder{opt: p}
124124
}
125125

126-
func (p *optional) Datetime(v time.Time) *optionalBuilder {
127-
p.value = value.DatetimeValueFromTime(v)
126+
func (p *optional) Datetime(v *time.Time) *optionalBuilder {
127+
p.value = value.NullableDatetimeValueFromTime(v)
128128

129129
return &optionalBuilder{opt: p}
130130
}
131131

132-
func (p *optional) Interval(v time.Duration) *optionalBuilder {
133-
p.value = value.IntervalValueFromDuration(v)
132+
func (p *optional) Interval(v *time.Duration) *optionalBuilder {
133+
p.value = value.NullableIntervalValueFromDuration(v)
134134

135135
return &optionalBuilder{opt: p}
136136
}
137137

138-
func (p *optional) JSON(v string) *optionalBuilder {
139-
p.value = value.JSONValue(v)
138+
func (p *optional) JSON(v *string) *optionalBuilder {
139+
p.value = value.NullableJSONValue(v)
140140

141141
return &optionalBuilder{opt: p}
142142
}
143143

144-
func (p *optional) JSONDocument(v string) *optionalBuilder {
145-
p.value = value.JSONDocumentValue(v)
144+
func (p *optional) JSONDocument(v *string) *optionalBuilder {
145+
p.value = value.NullableJSONDocumentValue(v)
146146

147147
return &optionalBuilder{opt: p}
148148
}
149149

150-
func (p *optional) YSON(v []byte) *optionalBuilder {
151-
p.value = value.YSONValue(v)
150+
func (p *optional) YSON(v *[]byte) *optionalBuilder {
151+
p.value = value.NullableYSONValueFromBytes(v)
152152

153153
return &optionalBuilder{opt: p}
154154
}
155155

156-
func (p *optional) UUID(v [16]byte) *optionalBuilder {
157-
p.value = value.UUIDValue(v)
156+
func (p *optional) UUID(v *[16]byte) *optionalBuilder {
157+
p.value = value.NullableUUIDValue(v)
158158

159159
return &optionalBuilder{opt: p}
160160
}
161161

162-
func (p *optional) TzDate(v time.Time) *optionalBuilder {
163-
p.value = value.TzDateValueFromTime(v)
162+
func (p *optional) TzDate(v *time.Time) *optionalBuilder {
163+
p.value = value.NullableTzDateValueFromTime(v)
164164

165165
return &optionalBuilder{opt: p}
166166
}
167167

168-
func (p *optional) TzTimestamp(v time.Time) *optionalBuilder {
169-
p.value = value.TzTimestampValueFromTime(v)
168+
func (p *optional) TzTimestamp(v *time.Time) *optionalBuilder {
169+
p.value = value.NullableTzTimestampValueFromTime(v)
170170

171171
return &optionalBuilder{opt: p}
172172
}
173173

174-
func (p *optional) TzDatetime(v time.Time) *optionalBuilder {
175-
p.value = value.TzDatetimeValueFromTime(v)
174+
func (p *optional) TzDatetime(v *time.Time) *optionalBuilder {
175+
p.value = value.NullableTzDatetimeValueFromTime(v)
176176

177177
return &optionalBuilder{opt: p}
178178
}

0 commit comments

Comments
 (0)