Skip to content

Commit 1198ca6

Browse files
author
Gleb Brozhe
committed
refactor funlen linter
1 parent bb1ee3b commit 1198ca6

File tree

6 files changed

+215
-172
lines changed

6 files changed

+215
-172
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: 44 additions & 38 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,38 +248,16 @@ func New(
257248
pool: pool,
258249
localDCDetector: detectLocalDC,
259250
}
260-
d, err := internalDiscovery.New(ctx, pool.Get(
261-
endpoint.New(driverConfig.Endpoint()),
262-
), discoveryConfig)
263-
if err != nil {
264-
return nil, err
265-
}
266-
267-
b.discoveryClient = d
268251

269252
if config := driverConfig.Balancer(); config == nil {
270253
b.config = balancerConfig.Config{}
271254
} else {
272255
b.config = *config
273256
}
274257

275-
if b.config.SingleConn {
276-
b.applyDiscoveredEndpoints(ctx, []endpoint.Endpoint{
277-
endpoint.New(driverConfig.Endpoint()),
278-
}, "")
279-
} else {
280-
// initialization of balancer state
281-
if err := b.clusterDiscovery(ctx); err != nil {
282-
return nil, xerrors.WithStackTrace(err)
283-
}
284-
// run background discovering
285-
if d := discoveryConfig.Interval(); d > 0 {
286-
b.discoveryRepeater = repeater.New(xcontext.WithoutDeadline(ctx),
287-
d, b.clusterDiscoveryAttempt,
288-
repeater.WithName("discovery"),
289-
repeater.WithTrace(b.driverConfig.Trace()),
290-
)
291-
}
258+
err := setupDiscoveryConfigAndClusterDiscovery(ctx, b, opts)
259+
if err != nil {
260+
return nil, err
292261
}
293262

294263
return b, nil
@@ -409,6 +378,43 @@ func (b *Balancer) getConn(ctx context.Context) (c conn.Conn, err error) {
409378
return c, nil
410379
}
411380

381+
func setupDiscoveryConfigAndClusterDiscovery(ctx context.Context, b *Balancer, opts []discoveryConfig.Option) error {
382+
discoveryConfig := discoveryConfig.New(append(opts,
383+
discoveryConfig.With(b.driverConfig.Common),
384+
discoveryConfig.WithEndpoint(b.driverConfig.Endpoint()),
385+
discoveryConfig.WithDatabase(b.driverConfig.Database()),
386+
discoveryConfig.WithSecure(b.driverConfig.Secure()),
387+
discoveryConfig.WithMeta(b.driverConfig.Meta()),
388+
)...)
389+
d, err := internalDiscovery.New(ctx, b.pool.Get(
390+
endpoint.New(b.driverConfig.Endpoint()),
391+
), discoveryConfig)
392+
if err != nil {
393+
return err
394+
}
395+
396+
b.discoveryClient = d
397+
398+
if b.config.SingleConn {
399+
b.applyDiscoveredEndpoints(ctx, []endpoint.Endpoint{
400+
endpoint.New(b.driverConfig.Endpoint()),
401+
}, "")
402+
} else {
403+
if err := b.clusterDiscovery(ctx); err != nil {
404+
return err
405+
}
406+
if d := discoveryConfig.Interval(); d > 0 {
407+
b.discoveryRepeater = repeater.New(xcontext.WithoutDeadline(ctx),
408+
d, b.clusterDiscoveryAttempt,
409+
repeater.WithName("discovery"),
410+
repeater.WithTrace(b.driverConfig.Trace()),
411+
)
412+
}
413+
}
414+
415+
return nil
416+
}
417+
412418
func endpointsToConnections(p *conn.Pool, endpoints []endpoint.Endpoint) []conn.Conn {
413419
conns := make([]conn.Conn, 0, len(endpoints))
414420
for _, e := range endpoints {

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: 53 additions & 36 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,57 +174,44 @@ 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 newParams []*params.Parameter
181+
var err error
180182
switch x := arg.(type) {
181183
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-
}
184+
newParams, err = handleNamedValue(x, i, len(args))
206185
case sql.NamedArg:
207186
if x.Name == "" {
208187
return nil, xerrors.WithStackTrace(errUnnamedParam)
209188
}
210-
param, err := toYdbParam(x.Name, x.Value)
211-
if err != nil {
212-
return nil, xerrors.WithStackTrace(err)
189+
param, pErr := toYdbParam(x.Name, x.Value)
190+
if pErr != nil {
191+
return nil, xerrors.WithStackTrace(pErr)
213192
}
214-
parameters = append(parameters, param)
193+
newParams = append(newParams, param)
215194
case *params.Parameters:
216195
if len(args) > 1 {
217196
return nil, xerrors.WithStackTrace(errMultipleQueryParameters)
218197
}
219198
parameters = *x
220199
case *params.Parameter:
221-
parameters = append(parameters, x)
200+
newParams = append(newParams, x)
222201
default:
223-
param, err := toYdbParam(fmt.Sprintf("$p%d", i), x)
224-
if err != nil {
225-
return nil, xerrors.WithStackTrace(err)
202+
param, pErr := toYdbParam(fmt.Sprintf("$p%d", i), x)
203+
if pErr != nil {
204+
return nil, xerrors.WithStackTrace(pErr)
226205
}
227-
parameters = append(parameters, param)
206+
newParams = append(newParams, param)
207+
}
208+
if err != nil {
209+
return nil, err
210+
}
211+
if parameters == nil {
212+
parameters = newParams
213+
} else {
214+
parameters = append(parameters, newParams...)
228215
}
229216
}
230217
sort.Slice(parameters, func(i, j int) bool {
@@ -233,3 +220,33 @@ func Params(args ...interface{}) (parameters []*params.Parameter, _ error) {
233220

234221
return parameters, nil
235222
}
223+
224+
func handleNamedValue(arg driver.NamedValue, i, argsLen int) ([]*params.Parameter, error) {
225+
if arg.Name == "" {
226+
switch x := arg.Value.(type) {
227+
case *params.Parameters:
228+
if argsLen > 1 {
229+
return nil, xerrors.WithStackTrace(errMultipleQueryParameters)
230+
}
231+
232+
return *x, nil
233+
case *params.Parameter:
234+
return []*params.Parameter{x}, nil
235+
default:
236+
arg.Name = fmt.Sprintf("$p%d", i)
237+
param, err := toYdbParam(arg.Name, arg.Value)
238+
if err != nil {
239+
return nil, xerrors.WithStackTrace(err)
240+
}
241+
242+
return []*params.Parameter{param}, nil
243+
}
244+
} else {
245+
param, err := toYdbParam(arg.Name, arg.Value)
246+
if err != nil {
247+
return nil, xerrors.WithStackTrace(err)
248+
}
249+
250+
return []*params.Parameter{param}, nil
251+
}
252+
}

0 commit comments

Comments
 (0)