Skip to content

Commit d7a422b

Browse files
committedMar 20, 2023
crud: make requests immutable
Closes #271
1 parent 009084f commit d7a422b

20 files changed

+394
-361
lines changed
 

‎crud/count.go

+7-7
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,9 @@ type countArgs struct {
7676
Opts CountOpts
7777
}
7878

79-
// NewCountRequest returns a new empty CountRequest.
80-
func NewCountRequest(space string) *CountRequest {
81-
req := new(CountRequest)
79+
// MakeCountRequest returns a new empty CountRequest.
80+
func MakeCountRequest(space string) CountRequest {
81+
req := CountRequest{}
8282
req.impl = newCall("crud.count")
8383
req.space = space
8484
req.conditions = nil
@@ -88,27 +88,27 @@ func NewCountRequest(space string) *CountRequest {
8888

8989
// Conditions sets the conditions for the CountRequest request.
9090
// Note: default value is nil.
91-
func (req *CountRequest) Conditions(conditions []Condition) *CountRequest {
91+
func (req CountRequest) Conditions(conditions []Condition) CountRequest {
9292
req.conditions = conditions
9393
return req
9494
}
9595

9696
// Opts sets the options for the CountRequest request.
9797
// Note: default value is nil.
98-
func (req *CountRequest) Opts(opts CountOpts) *CountRequest {
98+
func (req CountRequest) Opts(opts CountOpts) CountRequest {
9999
req.opts = opts
100100
return req
101101
}
102102

103103
// Body fills an encoder with the call request body.
104-
func (req *CountRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
104+
func (req CountRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
105105
args := countArgs{Space: req.space, Conditions: req.conditions, Opts: req.opts}
106106
req.impl = req.impl.Args(args)
107107
return req.impl.Body(res, enc)
108108
}
109109

110110
// Context sets a passed context to CRUD request.
111-
func (req *CountRequest) Context(ctx context.Context) *CountRequest {
111+
func (req CountRequest) Context(ctx context.Context) CountRequest {
112112
req.impl = req.impl.Context(ctx)
113113

114114
return req

‎crud/delete.go

+10-8
Original file line numberDiff line numberDiff line change
@@ -24,39 +24,41 @@ type deleteArgs struct {
2424
Opts DeleteOpts
2525
}
2626

27-
// NewDeleteRequest returns a new empty DeleteRequest.
28-
func NewDeleteRequest(space string) *DeleteRequest {
29-
req := new(DeleteRequest)
27+
// MakeDeleteRequest returns a new empty DeleteRequest.
28+
func MakeDeleteRequest(space string) DeleteRequest {
29+
req := DeleteRequest{}
3030
req.impl = newCall("crud.delete")
3131
req.space = space
32-
req.key = []interface{}{}
3332
req.opts = DeleteOpts{}
3433
return req
3534
}
3635

3736
// Key sets the key for the DeleteRequest request.
3837
// Note: default value is nil.
39-
func (req *DeleteRequest) Key(key Tuple) *DeleteRequest {
38+
func (req DeleteRequest) Key(key Tuple) DeleteRequest {
4039
req.key = key
4140
return req
4241
}
4342

4443
// Opts sets the options for the DeleteRequest request.
4544
// Note: default value is nil.
46-
func (req *DeleteRequest) Opts(opts DeleteOpts) *DeleteRequest {
45+
func (req DeleteRequest) Opts(opts DeleteOpts) DeleteRequest {
4746
req.opts = opts
4847
return req
4948
}
5049

5150
// Body fills an encoder with the call request body.
52-
func (req *DeleteRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
51+
func (req DeleteRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
52+
if req.key == nil {
53+
req.key = []interface{}{}
54+
}
5355
args := deleteArgs{Space: req.space, Key: req.key, Opts: req.opts}
5456
req.impl = req.impl.Args(args)
5557
return req.impl.Body(res, enc)
5658
}
5759

5860
// Context sets a passed context to CRUD request.
59-
func (req *DeleteRequest) Context(ctx context.Context) *DeleteRequest {
61+
func (req DeleteRequest) Context(ctx context.Context) DeleteRequest {
6062
req.impl = req.impl.Context(ctx)
6163

6264
return req

‎crud/example_test.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func exampleConnect() *tarantool.Connection {
3333
// interface{} type.
3434
func ExampleResult_rowsInterface() {
3535
conn := exampleConnect()
36-
req := crud.NewReplaceRequest(exampleSpace).
36+
req := crud.MakeReplaceRequest(exampleSpace).
3737
Tuple([]interface{}{uint(2010), nil, "bla"})
3838

3939
ret := crud.Result{}
@@ -54,7 +54,7 @@ func ExampleResult_rowsInterface() {
5454
// custom type.
5555
func ExampleResult_rowsCustomType() {
5656
conn := exampleConnect()
57-
req := crud.NewReplaceRequest(exampleSpace).
57+
req := crud.MakeReplaceRequest(exampleSpace).
5858
Tuple([]interface{}{uint(2010), nil, "bla"})
5959

6060
type Tuple struct {
@@ -82,7 +82,7 @@ func ExampleResult_rowsCustomType() {
8282
// response from *ManyRequest.
8383
func ExampleResult_many() {
8484
conn := exampleConnect()
85-
req := crud.NewReplaceManyRequest(exampleSpace).
85+
req := crud.MakeReplaceManyRequest(exampleSpace).
8686
Tuples([]crud.Tuple{
8787
[]interface{}{uint(2010), nil, "bla"},
8888
[]interface{}{uint(2011), nil, "bla"},
@@ -105,7 +105,7 @@ func ExampleResult_many() {
105105
// to handle a crud error.
106106
func ExampleResult_error() {
107107
conn := exampleConnect()
108-
req := crud.NewReplaceRequest("not_exist").
108+
req := crud.MakeReplaceRequest("not_exist").
109109
Tuple([]interface{}{uint(2010), nil, "bla"})
110110

111111
ret := crud.Result{}
@@ -124,13 +124,13 @@ func ExampleResult_error() {
124124
// to handle a crud error for a *ManyRequest.
125125
func ExampleResult_errorMany() {
126126
conn := exampleConnect()
127-
initReq := crud.NewReplaceRequest("not_exist").
127+
initReq := crud.MakeReplaceRequest("not_exist").
128128
Tuple([]interface{}{uint(2010), nil, "bla"})
129129
if _, err := conn.Do(initReq).Get(); err != nil {
130130
fmt.Printf("Failed to initialize the example: %s\n", err)
131131
}
132132

133-
req := crud.NewInsertManyRequest(exampleSpace).
133+
req := crud.MakeInsertManyRequest(exampleSpace).
134134
Tuples([]crud.Tuple{
135135
[]interface{}{uint(2010), nil, "bla"},
136136
[]interface{}{uint(2010), nil, "bla"},

‎crud/get.go

+10-8
Original file line numberDiff line numberDiff line change
@@ -63,39 +63,41 @@ type getArgs struct {
6363
Opts GetOpts
6464
}
6565

66-
// NewGetRequest returns a new empty GetRequest.
67-
func NewGetRequest(space string) *GetRequest {
68-
req := new(GetRequest)
66+
// MakeGetRequest returns a new empty GetRequest.
67+
func MakeGetRequest(space string) GetRequest {
68+
req := GetRequest{}
6969
req.impl = newCall("crud.get")
7070
req.space = space
71-
req.key = []interface{}{}
7271
req.opts = GetOpts{}
7372
return req
7473
}
7574

7675
// Key sets the key for the GetRequest request.
7776
// Note: default value is nil.
78-
func (req *GetRequest) Key(key Tuple) *GetRequest {
77+
func (req GetRequest) Key(key Tuple) GetRequest {
7978
req.key = key
8079
return req
8180
}
8281

8382
// Opts sets the options for the GetRequest request.
8483
// Note: default value is nil.
85-
func (req *GetRequest) Opts(opts GetOpts) *GetRequest {
84+
func (req GetRequest) Opts(opts GetOpts) GetRequest {
8685
req.opts = opts
8786
return req
8887
}
8988

9089
// Body fills an encoder with the call request body.
91-
func (req *GetRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
90+
func (req GetRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
91+
if req.key == nil {
92+
req.key = []interface{}{}
93+
}
9294
args := getArgs{Space: req.space, Key: req.key, Opts: req.opts}
9395
req.impl = req.impl.Args(args)
9496
return req.impl.Body(res, enc)
9597
}
9698

9799
// Context sets a passed context to CRUD request.
98-
func (req *GetRequest) Context(ctx context.Context) *GetRequest {
100+
func (req GetRequest) Context(ctx context.Context) GetRequest {
99101
req.impl = req.impl.Context(ctx)
100102

101103
return req

‎crud/insert.go

+20-16
Original file line numberDiff line numberDiff line change
@@ -24,39 +24,41 @@ type insertArgs struct {
2424
Opts InsertOpts
2525
}
2626

27-
// NewInsertRequest returns a new empty InsertRequest.
28-
func NewInsertRequest(space string) *InsertRequest {
29-
req := new(InsertRequest)
27+
// MakeInsertRequest returns a new empty InsertRequest.
28+
func MakeInsertRequest(space string) InsertRequest {
29+
req := InsertRequest{}
3030
req.impl = newCall("crud.insert")
3131
req.space = space
32-
req.tuple = []interface{}{}
3332
req.opts = InsertOpts{}
3433
return req
3534
}
3635

3736
// Tuple sets the tuple for the InsertRequest request.
3837
// Note: default value is nil.
39-
func (req *InsertRequest) Tuple(tuple Tuple) *InsertRequest {
38+
func (req InsertRequest) Tuple(tuple Tuple) InsertRequest {
4039
req.tuple = tuple
4140
return req
4241
}
4342

4443
// Opts sets the options for the insert request.
4544
// Note: default value is nil.
46-
func (req *InsertRequest) Opts(opts InsertOpts) *InsertRequest {
45+
func (req InsertRequest) Opts(opts InsertOpts) InsertRequest {
4746
req.opts = opts
4847
return req
4948
}
5049

5150
// Body fills an encoder with the call request body.
52-
func (req *InsertRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
51+
func (req InsertRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
52+
if req.tuple == nil {
53+
req.tuple = []interface{}{}
54+
}
5355
args := insertArgs{Space: req.space, Tuple: req.tuple, Opts: req.opts}
5456
req.impl = req.impl.Args(args)
5557
return req.impl.Body(res, enc)
5658
}
5759

5860
// Context sets a passed context to CRUD request.
59-
func (req *InsertRequest) Context(ctx context.Context) *InsertRequest {
61+
func (req InsertRequest) Context(ctx context.Context) InsertRequest {
6062
req.impl = req.impl.Context(ctx)
6163

6264
return req
@@ -80,39 +82,41 @@ type insertObjectArgs struct {
8082
Opts InsertObjectOpts
8183
}
8284

83-
// NewInsertObjectRequest returns a new empty InsertObjectRequest.
84-
func NewInsertObjectRequest(space string) *InsertObjectRequest {
85-
req := new(InsertObjectRequest)
85+
// MakeInsertObjectRequest returns a new empty InsertObjectRequest.
86+
func MakeInsertObjectRequest(space string) InsertObjectRequest {
87+
req := InsertObjectRequest{}
8688
req.impl = newCall("crud.insert_object")
8789
req.space = space
88-
req.object = MapObject{}
8990
req.opts = InsertObjectOpts{}
9091
return req
9192
}
9293

9394
// Object sets the tuple for the InsertObjectRequest request.
9495
// Note: default value is nil.
95-
func (req *InsertObjectRequest) Object(object Object) *InsertObjectRequest {
96+
func (req InsertObjectRequest) Object(object Object) InsertObjectRequest {
9697
req.object = object
9798
return req
9899
}
99100

100101
// Opts sets the options for the InsertObjectRequest request.
101102
// Note: default value is nil.
102-
func (req *InsertObjectRequest) Opts(opts InsertObjectOpts) *InsertObjectRequest {
103+
func (req InsertObjectRequest) Opts(opts InsertObjectOpts) InsertObjectRequest {
103104
req.opts = opts
104105
return req
105106
}
106107

107108
// Body fills an encoder with the call request body.
108-
func (req *InsertObjectRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
109+
func (req InsertObjectRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
110+
if req.object == nil {
111+
req.object = MapObject{}
112+
}
109113
args := insertObjectArgs{Space: req.space, Object: req.object, Opts: req.opts}
110114
req.impl = req.impl.Args(args)
111115
return req.impl.Body(res, enc)
112116
}
113117

114118
// Context sets a passed context to CRUD request.
115-
func (req *InsertObjectRequest) Context(ctx context.Context) *InsertObjectRequest {
119+
func (req InsertObjectRequest) Context(ctx context.Context) InsertObjectRequest {
116120
req.impl = req.impl.Context(ctx)
117121

118122
return req

‎crud/insert_many.go

+20-16
Original file line numberDiff line numberDiff line change
@@ -24,39 +24,41 @@ type insertManyArgs struct {
2424
Opts InsertManyOpts
2525
}
2626

27-
// NewInsertManyRequest returns a new empty InsertManyRequest.
28-
func NewInsertManyRequest(space string) *InsertManyRequest {
29-
req := new(InsertManyRequest)
27+
// MakeInsertManyRequest returns a new empty InsertManyRequest.
28+
func MakeInsertManyRequest(space string) InsertManyRequest {
29+
req := InsertManyRequest{}
3030
req.impl = newCall("crud.insert_many")
3131
req.space = space
32-
req.tuples = []Tuple{}
3332
req.opts = InsertManyOpts{}
3433
return req
3534
}
3635

3736
// Tuples sets the tuples for the InsertManyRequest request.
3837
// Note: default value is nil.
39-
func (req *InsertManyRequest) Tuples(tuples []Tuple) *InsertManyRequest {
38+
func (req InsertManyRequest) Tuples(tuples []Tuple) InsertManyRequest {
4039
req.tuples = tuples
4140
return req
4241
}
4342

4443
// Opts sets the options for the InsertManyRequest request.
4544
// Note: default value is nil.
46-
func (req *InsertManyRequest) Opts(opts InsertManyOpts) *InsertManyRequest {
45+
func (req InsertManyRequest) Opts(opts InsertManyOpts) InsertManyRequest {
4746
req.opts = opts
4847
return req
4948
}
5049

5150
// Body fills an encoder with the call request body.
52-
func (req *InsertManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
51+
func (req InsertManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
52+
if req.tuples == nil {
53+
req.tuples = []Tuple{}
54+
}
5355
args := insertManyArgs{Space: req.space, Tuples: req.tuples, Opts: req.opts}
5456
req.impl = req.impl.Args(args)
5557
return req.impl.Body(res, enc)
5658
}
5759

5860
// Context sets a passed context to CRUD request.
59-
func (req *InsertManyRequest) Context(ctx context.Context) *InsertManyRequest {
61+
func (req InsertManyRequest) Context(ctx context.Context) InsertManyRequest {
6062
req.impl = req.impl.Context(ctx)
6163

6264
return req
@@ -80,39 +82,41 @@ type insertObjectManyArgs struct {
8082
Opts InsertObjectManyOpts
8183
}
8284

83-
// NewInsertObjectManyRequest returns a new empty InsertObjectManyRequest.
84-
func NewInsertObjectManyRequest(space string) *InsertObjectManyRequest {
85-
req := new(InsertObjectManyRequest)
85+
// MakeInsertObjectManyRequest returns a new empty InsertObjectManyRequest.
86+
func MakeInsertObjectManyRequest(space string) InsertObjectManyRequest {
87+
req := InsertObjectManyRequest{}
8688
req.impl = newCall("crud.insert_object_many")
8789
req.space = space
88-
req.objects = []Object{}
8990
req.opts = InsertObjectManyOpts{}
9091
return req
9192
}
9293

9394
// Objects sets the objects for the InsertObjectManyRequest request.
9495
// Note: default value is nil.
95-
func (req *InsertObjectManyRequest) Objects(objects []Object) *InsertObjectManyRequest {
96+
func (req InsertObjectManyRequest) Objects(objects []Object) InsertObjectManyRequest {
9697
req.objects = objects
9798
return req
9899
}
99100

100101
// Opts sets the options for the InsertObjectManyRequest request.
101102
// Note: default value is nil.
102-
func (req *InsertObjectManyRequest) Opts(opts InsertObjectManyOpts) *InsertObjectManyRequest {
103+
func (req InsertObjectManyRequest) Opts(opts InsertObjectManyOpts) InsertObjectManyRequest {
103104
req.opts = opts
104105
return req
105106
}
106107

107108
// Body fills an encoder with the call request body.
108-
func (req *InsertObjectManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
109+
func (req InsertObjectManyRequest) Body(res tarantool.SchemaResolver, enc *encoder) error {
110+
if req.objects == nil {
111+
req.objects = []Object{}
112+
}
109113
args := insertObjectManyArgs{Space: req.space, Objects: req.objects, Opts: req.opts}
110114
req.impl = req.impl.Args(args)
111115
return req.impl.Body(res, enc)
112116
}
113117

114118
// Context sets a passed context to CRUD request.
115-
func (req *InsertObjectManyRequest) Context(ctx context.Context) *InsertObjectManyRequest {
119+
func (req InsertObjectManyRequest) Context(ctx context.Context) InsertObjectManyRequest {
116120
req.impl = req.impl.Context(ctx)
117121

118122
return req

0 commit comments

Comments
 (0)
Please sign in to comment.