Skip to content

Commit a0abd92

Browse files
authored
Merge pull request #1126 from brojeg/master
Enable funlen linter
2 parents e66f15b + b837471 commit a0abd92

File tree

4 files changed

+79
-70
lines changed

4 files changed

+79
-70
lines changed

.golangci.yml

+1
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/bind/numeric_args.go

+31-32
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,20 @@ 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())
65-
}
66-
}
67-
}
68-
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-
)
58+
paramIndex := int(p - 1)
59+
buffer.WriteString(newArgs[paramIndex].(table.ParameterOption).Name())
7460
}
7561
}
7662

63+
yql = buffer.String()
7764
if len(newArgs) > 0 {
78-
const prefix = "-- origin query with numeric args replacement\n"
79-
80-
return prefix + buffer.String(), newArgs, nil
65+
yql = "-- origin query with numeric args replacement\n" + yql
8166
}
8267

83-
return buffer.String(), newArgs, nil
68+
return yql, newArgs, nil
8469
}
8570

8671
func numericArgsStateFn(l *sqlLexer) stateFn {
@@ -130,6 +115,20 @@ func numericArgsStateFn(l *sqlLexer) stateFn {
130115
}
131116
}
132117

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

internal/bind/params.go

+46-38
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

+1
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,7 @@ func (c *conn) Invoke(
386386
return err
387387
}
388388

389+
//nolint:funlen
389390
func (c *conn) NewStream(
390391
ctx context.Context,
391392
desc *grpc.StreamDesc,

0 commit comments

Comments
 (0)