Skip to content

Commit 56ac5fb

Browse files
author
Gleb Brozhe
committed
refactor after PR review
1 parent 9200740 commit 56ac5fb

File tree

6 files changed

+161
-134
lines changed

6 files changed

+161
-134
lines changed

.golangci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -295,6 +295,7 @@ issues:
295295
- predeclared
296296
- path: _test\.go
297297
linters:
298+
- funlen
298299
- unused
299300
- unparam
300301
- gocritic

internal/balancer/balancer.go

Lines changed: 29 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -234,19 +234,10 @@ func New(
234234
pool *conn.Pool,
235235
opts ...discoveryConfig.Option,
236236
) (b *Balancer, finalErr error) {
237-
var (
238-
onDone = trace.DriverOnBalancerInit(
239-
driverConfig.Trace(), &ctx,
240-
stack.FunctionID(""),
241-
driverConfig.Balancer().String(),
242-
)
243-
discoveryConfig = discoveryConfig.New(append(opts,
244-
discoveryConfig.With(driverConfig.Common),
245-
discoveryConfig.WithEndpoint(driverConfig.Endpoint()),
246-
discoveryConfig.WithDatabase(driverConfig.Database()),
247-
discoveryConfig.WithSecure(driverConfig.Secure()),
248-
discoveryConfig.WithMeta(driverConfig.Meta()),
249-
)...)
237+
onDone := trace.DriverOnBalancerInit(
238+
driverConfig.Trace(), &ctx,
239+
stack.FunctionID(""),
240+
driverConfig.Balancer().String(),
250241
)
251242
defer func() {
252243
onDone(finalErr)
@@ -257,28 +248,43 @@ func New(
257248
pool: pool,
258249
localDCDetector: detectLocalDC,
259250
}
260-
d := internalDiscovery.New(ctx, pool.Get(
261-
endpoint.New(driverConfig.Endpoint()),
262-
), discoveryConfig)
263-
264-
b.discoveryClient = d
265251

266252
if config := driverConfig.Balancer(); config == nil {
267253
b.config = balancerConfig.Config{}
268254
} else {
269255
b.config = *config
270256
}
271257

258+
err := startDiscovery(ctx, b, opts)
259+
if err != nil {
260+
return nil, err
261+
}
262+
263+
return b, nil
264+
}
265+
266+
func startDiscovery(ctx context.Context, b *Balancer, opts []discoveryConfig.Option) error {
267+
discoveryConfig := discoveryConfig.New(append(opts,
268+
discoveryConfig.With(b.driverConfig.Common),
269+
discoveryConfig.WithEndpoint(b.driverConfig.Endpoint()),
270+
discoveryConfig.WithDatabase(b.driverConfig.Database()),
271+
discoveryConfig.WithSecure(b.driverConfig.Secure()),
272+
discoveryConfig.WithMeta(b.driverConfig.Meta()),
273+
)...)
274+
d := internalDiscovery.New(ctx, b.pool.Get(
275+
endpoint.New(b.driverConfig.Endpoint()),
276+
), discoveryConfig)
277+
278+
b.discoveryClient = d
279+
272280
if b.config.SingleConn {
273281
b.applyDiscoveredEndpoints(ctx, []endpoint.Endpoint{
274-
endpoint.New(driverConfig.Endpoint()),
282+
endpoint.New(b.driverConfig.Endpoint()),
275283
}, "")
276284
} else {
277-
// initialization of balancer state
278285
if err := b.clusterDiscovery(ctx); err != nil {
279-
return nil, xerrors.WithStackTrace(err)
286+
return err
280287
}
281-
// run background discovering
282288
if d := discoveryConfig.Interval(); d > 0 {
283289
b.discoveryRepeater = repeater.New(xcontext.ValueOnly(ctx),
284290
d, b.clusterDiscoveryAttempt,
@@ -288,7 +294,7 @@ func New(
288294
}
289295
}
290296

291-
return b, nil
297+
return nil
292298
}
293299

294300
func (b *Balancer) Invoke(

internal/bind/numeric_args.go

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"strconv"
66
"unicode/utf8"
77

8+
"github.com/ydb-platform/ydb-go-sdk/v3/internal/params"
89
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xerrors"
910
"github.com/ydb-platform/ydb-go-sdk/v3/internal/xstring"
1011
"github.com/ydb-platform/ydb-go-sdk/v3/table"
@@ -16,9 +17,7 @@ func (m NumericArgs) blockID() blockID {
1617
return blockYQL
1718
}
1819

19-
func (m NumericArgs) RewriteQuery(sql string, args ...interface{}) (
20-
yql string, newArgs []interface{}, err error,
21-
) {
20+
func (m NumericArgs) RewriteQuery(sql string, args ...interface{}) (yql string, newArgs []interface{}, err error) {
2221
l := &sqlLexer{
2322
src: sql,
2423
stateFn: numericArgsStateFn,
@@ -29,14 +28,18 @@ func (m NumericArgs) RewriteQuery(sql string, args ...interface{}) (
2928
l.stateFn = l.stateFn(l)
3029
}
3130

32-
var (
33-
buffer = xstring.Buffer()
34-
param table.ParameterOption
35-
)
31+
buffer := xstring.Buffer()
3632
defer buffer.Free()
3733

3834
if len(args) > 0 {
39-
newArgs = make([]interface{}, len(args))
35+
parameters, err := parsePositionalParameters(args)
36+
if err != nil {
37+
return "", nil, err
38+
}
39+
newArgs = make([]interface{}, len(parameters))
40+
for i, param := range parameters {
41+
newArgs[i] = param
42+
}
4043
}
4144

4245
for _, p := range l.parts {
@@ -49,38 +52,23 @@ func (m NumericArgs) RewriteQuery(sql string, args ...interface{}) (
4952
}
5053
if int(p) > len(args) {
5154
return "", nil, xerrors.WithStackTrace(
52-
fmt.Errorf("%w: $p%d, len(args) = %d", ErrInconsistentArgs, p, len(args)),
55+
fmt.Errorf("%w: $%d, len(args) = %d", ErrInconsistentArgs, p, len(args)),
5356
)
5457
}
55-
paramName := "$p" + strconv.Itoa(int(p-1)) //nolint:goconst
56-
if newArgs[p-1] == nil {
57-
param, err = toYdbParam(paramName, args[p-1])
58-
if err != nil {
59-
return "", nil, xerrors.WithStackTrace(err)
60-
}
61-
newArgs[p-1] = param
62-
buffer.WriteString(param.Name())
63-
} else {
64-
buffer.WriteString(newArgs[p-1].(table.ParameterOption).Name())
58+
paramIndex := int(p - 1)
59+
if newArgs[paramIndex] == nil {
60+
return "", nil, xerrors.WithStackTrace(ErrInconsistentArgs)
6561
}
62+
buffer.WriteString(newArgs[paramIndex].(table.ParameterOption).Name())
6663
}
6764
}
6865

69-
for i, p := range newArgs {
70-
if p == nil {
71-
return "", nil, xerrors.WithStackTrace(
72-
fmt.Errorf("%w: $p%d, len(args) = %d", ErrInconsistentArgs, i+1, len(args)),
73-
)
74-
}
75-
}
76-
66+
yql = buffer.String()
7767
if len(newArgs) > 0 {
78-
const prefix = "-- origin query with numeric args replacement\n"
79-
80-
return prefix + buffer.String(), newArgs, nil
68+
yql = "-- origin query with numeric args replacement\n" + yql
8169
}
8270

83-
return buffer.String(), newArgs, nil
71+
return yql, newArgs, nil
8472
}
8573

8674
func numericArgsStateFn(l *sqlLexer) stateFn {
@@ -130,6 +118,20 @@ func numericArgsStateFn(l *sqlLexer) stateFn {
130118
}
131119
}
132120

121+
func parsePositionalParameters(args []interface{}) ([]*params.Parameter, error) {
122+
newArgs := make([]*params.Parameter, len(args))
123+
for i, arg := range args {
124+
paramName := fmt.Sprintf("$p%d", i)
125+
param, err := toYdbParam(paramName, arg)
126+
if err != nil {
127+
return nil, err
128+
}
129+
newArgs[i] = param
130+
}
131+
132+
return newArgs, nil
133+
}
134+
133135
func numericArgState(l *sqlLexer) stateFn {
134136
numbers := ""
135137
defer func() {

internal/bind/params.go

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ var (
2121
errMultipleQueryParameters = errors.New("only one query arg *table.QueryParameters allowed")
2222
)
2323

24-
//nolint:gocyclo
24+
//nolint:gocyclo,funlen
2525
func toValue(v interface{}) (_ types.Value, err error) {
2626
if valuer, ok := v.(driver.Valuer); ok {
2727
v, err = valuer.Value()
@@ -174,62 +174,70 @@ func toYdbParam(name string, value interface{}) (*params.Parameter, error) {
174174
return params.Named(name, v), nil
175175
}
176176

177-
func Params(args ...interface{}) (parameters []*params.Parameter, _ error) {
178-
parameters = make([]*params.Parameter, 0, len(args))
177+
func Params(args ...interface{}) ([]*params.Parameter, error) {
178+
parameters := make([]*params.Parameter, 0, len(args))
179179
for i, arg := range args {
180+
var newParam *params.Parameter
181+
var newParams []*params.Parameter
182+
var err error
180183
switch x := arg.(type) {
181184
case driver.NamedValue:
182-
if x.Name == "" {
183-
switch xx := x.Value.(type) {
184-
case *params.Parameters:
185-
if len(args) > 1 {
186-
return nil, xerrors.WithStackTrace(errMultipleQueryParameters)
187-
}
188-
parameters = *xx
189-
case *params.Parameter:
190-
parameters = append(parameters, xx)
191-
default:
192-
x.Name = fmt.Sprintf("$p%d", i)
193-
param, err := toYdbParam(x.Name, x.Value)
194-
if err != nil {
195-
return nil, xerrors.WithStackTrace(err)
196-
}
197-
parameters = append(parameters, param)
198-
}
199-
} else {
200-
param, err := toYdbParam(x.Name, x.Value)
201-
if err != nil {
202-
return nil, xerrors.WithStackTrace(err)
203-
}
204-
parameters = append(parameters, param)
205-
}
185+
newParams, err = paramHandleNamedValue(x, i, len(args))
206186
case sql.NamedArg:
207187
if x.Name == "" {
208188
return nil, xerrors.WithStackTrace(errUnnamedParam)
209189
}
210-
param, err := toYdbParam(x.Name, x.Value)
211-
if err != nil {
212-
return nil, xerrors.WithStackTrace(err)
213-
}
214-
parameters = append(parameters, param)
190+
newParam, err = toYdbParam(x.Name, x.Value)
191+
newParams = append(newParams, newParam)
215192
case *params.Parameters:
216193
if len(args) > 1 {
217194
return nil, xerrors.WithStackTrace(errMultipleQueryParameters)
218195
}
219196
parameters = *x
220197
case *params.Parameter:
221-
parameters = append(parameters, x)
198+
newParams = append(newParams, x)
222199
default:
223-
param, err := toYdbParam(fmt.Sprintf("$p%d", i), x)
224-
if err != nil {
225-
return nil, xerrors.WithStackTrace(err)
226-
}
227-
parameters = append(parameters, param)
200+
newParam, err = toYdbParam(fmt.Sprintf("$p%d", i), x)
201+
newParams = append(newParams, newParam)
202+
}
203+
if err != nil {
204+
return nil, xerrors.WithStackTrace(err)
228205
}
206+
parameters = append(parameters, newParams...)
229207
}
230208
sort.Slice(parameters, func(i, j int) bool {
231209
return parameters[i].Name() < parameters[j].Name()
232210
})
233211

234212
return parameters, nil
235213
}
214+
215+
func paramHandleNamedValue(arg driver.NamedValue, paramNumber, argsLen int) ([]*params.Parameter, error) {
216+
if arg.Name == "" {
217+
switch x := arg.Value.(type) {
218+
case *params.Parameters:
219+
if argsLen > 1 {
220+
return nil, xerrors.WithStackTrace(errMultipleQueryParameters)
221+
}
222+
223+
return *x, nil
224+
case *params.Parameter:
225+
return []*params.Parameter{x}, nil
226+
default:
227+
arg.Name = fmt.Sprintf("$p%d", paramNumber)
228+
param, err := toYdbParam(arg.Name, arg.Value)
229+
if err != nil {
230+
return nil, xerrors.WithStackTrace(err)
231+
}
232+
233+
return []*params.Parameter{param}, nil
234+
}
235+
} else {
236+
param, err := toYdbParam(arg.Name, arg.Value)
237+
if err != nil {
238+
return nil, xerrors.WithStackTrace(err)
239+
}
240+
241+
return []*params.Parameter{param}, nil
242+
}
243+
}

internal/conn/conn.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,7 @@ func (c *conn) Invoke(
362362
return err
363363
}
364364

365+
//nolint:funlen
365366
func (c *conn) NewStream(
366367
ctx context.Context,
367368
desc *grpc.StreamDesc,

0 commit comments

Comments
 (0)