Skip to content

Commit 158bc6a

Browse files
authored
Merge pull request #1150 from dlc-01/master
Added `Struct` support for `ydb.ParamsBuilder()`
2 parents 9200740 + 365b96d commit 158bc6a

File tree

4 files changed

+1198
-0
lines changed

4 files changed

+1198
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
* Added `Struct` support for `ydb.ParamsBuilder()`
12
* Added support of `TzDate`,`TzDateTime`,`TzTimestamp` types in `ydb.ParamsBuilder()`
23
* Added `trace.Query.OnTransactionExecute` event
34
* Added query pool metrics

internal/params/parameters.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,13 @@ func (p *Parameter) BeginTuple() *tuple {
134134
}
135135
}
136136

137+
func (p *Parameter) BeginStruct() *structure {
138+
return &structure{
139+
parent: p.parent,
140+
name: p.name,
141+
}
142+
}
143+
137144
func (p *Parameter) Text(v string) Builder {
138145
p.value = value.TextValue(v)
139146
p.parent.params = append(p.parent.params, p)

internal/params/struct.go

Lines changed: 268 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,268 @@
1+
package params
2+
3+
import (
4+
"time"
5+
6+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/value"
7+
)
8+
9+
type (
10+
structure struct {
11+
parent Builder
12+
name string
13+
values []value.StructValueField
14+
}
15+
16+
structValue struct {
17+
parent *structure
18+
name string
19+
}
20+
)
21+
22+
func (s *structure) AddItems(items ...value.StructValueField) *structure {
23+
s.values = append(s.values, items...)
24+
25+
return s
26+
}
27+
28+
func (s *structure) Field(v string) *structValue {
29+
return &structValue{
30+
parent: s,
31+
name: v,
32+
}
33+
}
34+
35+
func (s *structure) EndStruct() Builder {
36+
s.parent.params = append(s.parent.params, &Parameter{
37+
parent: s.parent,
38+
name: s.name,
39+
value: value.StructValue(s.values...),
40+
})
41+
42+
return s.parent
43+
}
44+
45+
func (s *structValue) Text(v string) *structure {
46+
s.parent.values = append(s.parent.values, value.StructValueField{
47+
Name: s.name,
48+
V: value.TextValue(v),
49+
})
50+
51+
return s.parent
52+
}
53+
54+
func (s *structValue) Bytes(v []byte) *structure {
55+
s.parent.values = append(s.parent.values, value.StructValueField{
56+
Name: s.name,
57+
V: value.BytesValue(v),
58+
})
59+
60+
return s.parent
61+
}
62+
63+
func (s *structValue) Bool(v bool) *structure {
64+
s.parent.values = append(s.parent.values, value.StructValueField{
65+
Name: s.name,
66+
V: value.BoolValue(v),
67+
})
68+
69+
return s.parent
70+
}
71+
72+
func (s *structValue) Uint64(v uint64) *structure {
73+
s.parent.values = append(s.parent.values, value.StructValueField{
74+
Name: s.name,
75+
V: value.Uint64Value(v),
76+
})
77+
78+
return s.parent
79+
}
80+
81+
func (s *structValue) Int64(v int64) *structure {
82+
s.parent.values = append(s.parent.values, value.StructValueField{
83+
Name: s.name,
84+
V: value.Int64Value(v),
85+
})
86+
87+
return s.parent
88+
}
89+
90+
func (s *structValue) Uint32(v uint32) *structure {
91+
s.parent.values = append(s.parent.values, value.StructValueField{
92+
Name: s.name,
93+
V: value.Uint32Value(v),
94+
})
95+
96+
return s.parent
97+
}
98+
99+
func (s *structValue) Int32(v int32) *structure {
100+
s.parent.values = append(s.parent.values, value.StructValueField{
101+
Name: s.name,
102+
V: value.Int32Value(v),
103+
})
104+
105+
return s.parent
106+
}
107+
108+
func (s *structValue) Uint16(v uint16) *structure {
109+
s.parent.values = append(s.parent.values, value.StructValueField{
110+
Name: s.name,
111+
V: value.Uint16Value(v),
112+
})
113+
114+
return s.parent
115+
}
116+
117+
func (s *structValue) Int16(v int16) *structure {
118+
s.parent.values = append(s.parent.values, value.StructValueField{
119+
Name: s.name,
120+
V: value.Int16Value(v),
121+
})
122+
123+
return s.parent
124+
}
125+
126+
func (s *structValue) Uint8(v uint8) *structure {
127+
s.parent.values = append(s.parent.values, value.StructValueField{
128+
Name: s.name,
129+
V: value.Uint8Value(v),
130+
})
131+
132+
return s.parent
133+
}
134+
135+
func (s *structValue) Int8(v int8) *structure {
136+
s.parent.values = append(s.parent.values, value.StructValueField{
137+
Name: s.name,
138+
V: value.Int8Value(v),
139+
})
140+
141+
return s.parent
142+
}
143+
144+
func (s *structValue) Float(v float32) *structure {
145+
s.parent.values = append(s.parent.values, value.StructValueField{
146+
Name: s.name,
147+
V: value.FloatValue(v),
148+
})
149+
150+
return s.parent
151+
}
152+
153+
func (s *structValue) Double(v float64) *structure {
154+
s.parent.values = append(s.parent.values, value.StructValueField{
155+
Name: s.name,
156+
V: value.DoubleValue(v),
157+
})
158+
159+
return s.parent
160+
}
161+
162+
func (s *structValue) Decimal(v [16]byte, precision, scale uint32) *structure {
163+
s.parent.values = append(s.parent.values, value.StructValueField{
164+
Name: s.name,
165+
V: value.DecimalValue(v, precision, scale),
166+
})
167+
168+
return s.parent
169+
}
170+
171+
func (s *structValue) Timestamp(v time.Time) *structure {
172+
s.parent.values = append(s.parent.values, value.StructValueField{
173+
Name: s.name,
174+
V: value.TimestampValueFromTime(v),
175+
})
176+
177+
return s.parent
178+
}
179+
180+
func (s *structValue) Date(v time.Time) *structure {
181+
s.parent.values = append(s.parent.values, value.StructValueField{
182+
Name: s.name,
183+
V: value.DateValueFromTime(v),
184+
})
185+
186+
return s.parent
187+
}
188+
189+
func (s *structValue) Datetime(v time.Time) *structure {
190+
s.parent.values = append(s.parent.values, value.StructValueField{
191+
Name: s.name,
192+
V: value.DatetimeValueFromTime(v),
193+
})
194+
195+
return s.parent
196+
}
197+
198+
func (s *structValue) Interval(v time.Duration) *structure {
199+
s.parent.values = append(s.parent.values, value.StructValueField{
200+
Name: s.name,
201+
V: value.IntervalValueFromDuration(v),
202+
})
203+
204+
return s.parent
205+
}
206+
207+
func (s *structValue) JSON(v string) *structure {
208+
s.parent.values = append(s.parent.values, value.StructValueField{
209+
Name: s.name,
210+
V: value.JSONValue(v),
211+
})
212+
213+
return s.parent
214+
}
215+
216+
func (s *structValue) JSONDocument(v string) *structure {
217+
s.parent.values = append(s.parent.values, value.StructValueField{
218+
Name: s.name,
219+
V: value.JSONDocumentValue(v),
220+
})
221+
222+
return s.parent
223+
}
224+
225+
func (s *structValue) YSON(v []byte) *structure {
226+
s.parent.values = append(s.parent.values, value.StructValueField{
227+
Name: s.name,
228+
V: value.YSONValue(v),
229+
})
230+
231+
return s.parent
232+
}
233+
234+
func (s *structValue) UUID(v [16]byte) *structure {
235+
s.parent.values = append(s.parent.values, value.StructValueField{
236+
Name: s.name,
237+
V: value.UUIDValue(v),
238+
})
239+
240+
return s.parent
241+
}
242+
243+
func (s *structValue) TzDatetime(v time.Time) *structure {
244+
s.parent.values = append(s.parent.values, value.StructValueField{
245+
Name: s.name,
246+
V: value.TzDatetimeValueFromTime(v),
247+
})
248+
249+
return s.parent
250+
}
251+
252+
func (s *structValue) TzTimestamp(v time.Time) *structure {
253+
s.parent.values = append(s.parent.values, value.StructValueField{
254+
Name: s.name,
255+
V: value.TzTimestampValueFromTime(v),
256+
})
257+
258+
return s.parent
259+
}
260+
261+
func (s *structValue) TzDate(v time.Time) *structure {
262+
s.parent.values = append(s.parent.values, value.StructValueField{
263+
Name: s.name,
264+
V: value.TzDateValueFromTime(v),
265+
})
266+
267+
return s.parent
268+
}

0 commit comments

Comments
 (0)