Skip to content

Commit 56a13bc

Browse files
committed
api: add separate types for constants
Part of #158
1 parent 7d8f33c commit 56a13bc

29 files changed

+271
-234
lines changed

CHANGELOG.md

+3
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,15 @@ Versioning](http://semver.org/spec/v2.0.0.html) except to the first release.
1515
- Support CRUD API (#108)
1616
- An ability to replace a base network connection to a Tarantool
1717
instance (#265)
18+
- Enumeration types for response codes and iterators (#158)
19+
- A separate type for a request code (#158)
1820

1921
### Changed
2022

2123
- connection_pool renamed to pool (#239)
2224
- msgpack/v5 is default at now (#236)
2325
- Call/NewCallRequest = Call17/NewCall17Request (#235)
26+
- Constants <Call>RequestCode renamed to RequestCode<Call> (#158)
2427

2528
### Removed
2629

connection.go

+18-10
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,19 @@ type connShard struct {
230230
enc *msgpack.Encoder
231231
}
232232

233+
// RLimitActions is an enumeration type for an action to do when a rate limit
234+
// is riched.
235+
type RLimitAction int
236+
237+
const (
238+
// RLimitDrop immediately aborts request,
239+
RLimitDrop RLimitAction = iota
240+
// RLimitWait waits during timeout period for some request to be answered.
241+
// If no request answered during timeout period, this request is aborted.
242+
// If no timeout period is set, it will wait forever.
243+
RLimitWait
244+
)
245+
233246
// Opts is a way to configure Connection
234247
type Opts struct {
235248
// Auth is an authentication method.
@@ -268,14 +281,9 @@ type Opts struct {
268281
// It is disabled by default.
269282
// See RLimitAction for possible actions when RateLimit.reached.
270283
RateLimit uint
271-
// RLimitAction tells what to do when RateLimit reached:
272-
// RLimitDrop - immediately abort request,
273-
// RLimitWait - wait during timeout period for some request to be answered.
274-
// If no request answered during timeout period, this request
275-
// is aborted.
276-
// If no timeout period is set, it will wait forever.
284+
// RLimitAction tells what to do when RateLimit is reached.
277285
// It is required if RateLimit is specified.
278-
RLimitAction uint
286+
RLimitAction RLimitAction
279287
// Concurrency is amount of separate mutexes for request
280288
// queues and buffers inside of connection.
281289
// It is rounded up to nearest power of 2.
@@ -845,14 +853,14 @@ func (conn *Connection) reader(r io.Reader, c Conn) {
845853
}
846854

847855
var fut *Future = nil
848-
if resp.Code == EventCode {
856+
if resp.Code == keyWatchEvent {
849857
if event, err := readWatchEvent(&resp.buf); err == nil {
850858
events <- event
851859
} else {
852860
conn.opts.Logger.Report(LogWatchEventReadFailed, conn, err)
853861
}
854862
continue
855-
} else if resp.Code == PushCode {
863+
} else if resp.Code == CodePush {
856864
if fut = conn.peekFuture(resp.RequestId); fut != nil {
857865
fut.AppendPush(resp)
858866
}
@@ -1072,7 +1080,7 @@ func (conn *Connection) putFuture(fut *Future, req Request, streamId uint64) {
10721080
if fut = conn.fetchFuture(reqid); fut != nil {
10731081
resp := &Response{
10741082
RequestId: reqid,
1075-
Code: OkCode,
1083+
Code: CodeOk,
10761084
}
10771085
fut.SetResponse(resp)
10781086
conn.markDone(fut)

connector.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ type Connector interface {
88
Ping() (resp *Response, err error)
99
ConfiguredTimeout() time.Duration
1010

11-
Select(space, index interface{}, offset, limit, iterator uint32, key interface{}) (resp *Response, err error)
11+
Select(space, index interface{}, offset, limit uint32, iterator Iter, key interface{}) (resp *Response, err error)
1212
Insert(space interface{}, tuple interface{}) (resp *Response, err error)
1313
Replace(space interface{}, tuple interface{}) (resp *Response, err error)
1414
Delete(space, index interface{}, key interface{}) (resp *Response, err error)
@@ -21,7 +21,7 @@ type Connector interface {
2121
Execute(expr string, args interface{}) (resp *Response, err error)
2222

2323
GetTyped(space, index interface{}, key interface{}, result interface{}) (err error)
24-
SelectTyped(space, index interface{}, offset, limit, iterator uint32, key interface{}, result interface{}) (err error)
24+
SelectTyped(space, index interface{}, offset, limit uint32, iterator Iter, key interface{}, result interface{}) (err error)
2525
InsertTyped(space interface{}, tuple interface{}, result interface{}) (err error)
2626
ReplaceTyped(space interface{}, tuple interface{}, result interface{}) (err error)
2727
DeleteTyped(space, index interface{}, key interface{}, result interface{}) (err error)
@@ -32,7 +32,7 @@ type Connector interface {
3232
EvalTyped(expr string, args interface{}, result interface{}) (err error)
3333
ExecuteTyped(expr string, args interface{}, result interface{}) (SQLInfo, []ColumnMetaData, error)
3434

35-
SelectAsync(space, index interface{}, offset, limit, iterator uint32, key interface{}) *Future
35+
SelectAsync(space, index interface{}, offset, limit uint32, iterator Iter, key interface{}) *Future
3636
InsertAsync(space interface{}, tuple interface{}) *Future
3737
ReplaceAsync(space interface{}, tuple interface{}) *Future
3838
DeleteAsync(space, index interface{}, key interface{}) *Future

const.go

+1-44
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const (
3131
keySQLBind = 0x41
3232
keySQLInfo = 0x42
3333
keyStmtID = 0x43
34+
keyWatchEvent = 0x4c
3435
keyError = 0x52 /* Extended error in >= 2.4 format. */
3536
keyVersion = 0x54
3637
keyFeatures = 0x55
@@ -40,47 +41,3 @@ const (
4041
keyTxnIsolation = 0x59
4142
keyAuthType = 0x5b
4243
)
43-
44-
const (
45-
SelectRequestCode = 1
46-
InsertRequestCode = 2
47-
ReplaceRequestCode = 3
48-
UpdateRequestCode = 4
49-
DeleteRequestCode = 5
50-
Call16RequestCode = 6 /* call in 1.6 format */
51-
AuthRequestCode = 7
52-
EvalRequestCode = 8
53-
UpsertRequestCode = 9
54-
Call17RequestCode = 10 /* call in >= 1.7 format */
55-
ExecuteRequestCode = 11
56-
PrepareRequestCode = 13
57-
BeginRequestCode = 14
58-
CommitRequestCode = 15
59-
RollbackRequestCode = 16
60-
PingRequestCode = 64
61-
SubscribeRequestCode = 66
62-
IdRequestCode = 73
63-
WatchRequestCode = 74
64-
UnwatchRequestCode = 75
65-
CallRequestCode = Call17RequestCode
66-
67-
// https://github.com/fl00r/go-tarantool-1.6/issues/2
68-
69-
IterEq = uint32(0) // key == x ASC order
70-
IterReq = uint32(1) // key == x DESC order
71-
IterAll = uint32(2) // all tuples
72-
IterLt = uint32(3) // key < x
73-
IterLe = uint32(4) // key <= x
74-
IterGe = uint32(5) // key >= x
75-
IterGt = uint32(6) // key > x
76-
IterBitsAllSet = uint32(7) // all bits from x are set in key
77-
IterBitsAnySet = uint32(8) // at least one x's bit is set
78-
IterBitsAllNotSet = uint32(9) // all bits are not set
79-
80-
RLimitDrop = 1
81-
RLimitWait = 2
82-
83-
OkCode = uint32(0)
84-
EventCode = uint32(0x4c)
85-
PushCode = uint32(0x80)
86-
)

crud/common.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func newCall(method string) *tarantool.CallRequest {
6868
}
6969

7070
// Code returns IPROTO code for CRUD request.
71-
func (req baseRequest) Code() int32 {
71+
func (req baseRequest) Code() tarantool.RequestCode {
7272
return req.impl.Code()
7373
}
7474

crud/request_test.go

+25-25
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ const validSpace = "test" // Any valid value != default.
2222
const defaultSpace = 0 // And valid too.
2323
const defaultIndex = 0 // And valid too.
2424

25-
const CrudRequestCode = tarantool.Call17RequestCode
25+
const RequestCodeCrud = tarantool.RequestCodeCall17
2626

2727
var reqObject = crud.MapObject{
2828
"id": uint(24),
@@ -167,31 +167,31 @@ func BenchmarkSelectRequest(b *testing.B) {
167167
func TestRequestsCodes(t *testing.T) {
168168
tests := []struct {
169169
req tarantool.Request
170-
code int32
170+
code tarantool.RequestCode
171171
}{
172-
{req: crud.MakeInsertRequest(validSpace), code: CrudRequestCode},
173-
{req: crud.MakeInsertObjectRequest(validSpace), code: CrudRequestCode},
174-
{req: crud.MakeInsertManyRequest(validSpace), code: CrudRequestCode},
175-
{req: crud.MakeInsertObjectManyRequest(validSpace), code: CrudRequestCode},
176-
{req: crud.MakeGetRequest(validSpace), code: CrudRequestCode},
177-
{req: crud.MakeUpdateRequest(validSpace), code: CrudRequestCode},
178-
{req: crud.MakeDeleteRequest(validSpace), code: CrudRequestCode},
179-
{req: crud.MakeReplaceRequest(validSpace), code: CrudRequestCode},
180-
{req: crud.MakeReplaceObjectRequest(validSpace), code: CrudRequestCode},
181-
{req: crud.MakeReplaceManyRequest(validSpace), code: CrudRequestCode},
182-
{req: crud.MakeReplaceObjectManyRequest(validSpace), code: CrudRequestCode},
183-
{req: crud.MakeUpsertRequest(validSpace), code: CrudRequestCode},
184-
{req: crud.MakeUpsertObjectRequest(validSpace), code: CrudRequestCode},
185-
{req: crud.MakeUpsertManyRequest(validSpace), code: CrudRequestCode},
186-
{req: crud.MakeUpsertObjectManyRequest(validSpace), code: CrudRequestCode},
187-
{req: crud.MakeMinRequest(validSpace), code: CrudRequestCode},
188-
{req: crud.MakeMaxRequest(validSpace), code: CrudRequestCode},
189-
{req: crud.MakeSelectRequest(validSpace), code: CrudRequestCode},
190-
{req: crud.MakeTruncateRequest(validSpace), code: CrudRequestCode},
191-
{req: crud.MakeLenRequest(validSpace), code: CrudRequestCode},
192-
{req: crud.MakeCountRequest(validSpace), code: CrudRequestCode},
193-
{req: crud.MakeStorageInfoRequest(), code: CrudRequestCode},
194-
{req: crud.MakeStatsRequest(), code: CrudRequestCode},
172+
{req: crud.MakeInsertRequest(validSpace), code: RequestCodeCrud},
173+
{req: crud.MakeInsertObjectRequest(validSpace), code: RequestCodeCrud},
174+
{req: crud.MakeInsertManyRequest(validSpace), code: RequestCodeCrud},
175+
{req: crud.MakeInsertObjectManyRequest(validSpace), code: RequestCodeCrud},
176+
{req: crud.MakeGetRequest(validSpace), code: RequestCodeCrud},
177+
{req: crud.MakeUpdateRequest(validSpace), code: RequestCodeCrud},
178+
{req: crud.MakeDeleteRequest(validSpace), code: RequestCodeCrud},
179+
{req: crud.MakeReplaceRequest(validSpace), code: RequestCodeCrud},
180+
{req: crud.MakeReplaceObjectRequest(validSpace), code: RequestCodeCrud},
181+
{req: crud.MakeReplaceManyRequest(validSpace), code: RequestCodeCrud},
182+
{req: crud.MakeReplaceObjectManyRequest(validSpace), code: RequestCodeCrud},
183+
{req: crud.MakeUpsertRequest(validSpace), code: RequestCodeCrud},
184+
{req: crud.MakeUpsertObjectRequest(validSpace), code: RequestCodeCrud},
185+
{req: crud.MakeUpsertManyRequest(validSpace), code: RequestCodeCrud},
186+
{req: crud.MakeUpsertObjectManyRequest(validSpace), code: RequestCodeCrud},
187+
{req: crud.MakeMinRequest(validSpace), code: RequestCodeCrud},
188+
{req: crud.MakeMaxRequest(validSpace), code: RequestCodeCrud},
189+
{req: crud.MakeSelectRequest(validSpace), code: RequestCodeCrud},
190+
{req: crud.MakeTruncateRequest(validSpace), code: RequestCodeCrud},
191+
{req: crud.MakeLenRequest(validSpace), code: RequestCodeCrud},
192+
{req: crud.MakeCountRequest(validSpace), code: RequestCodeCrud},
193+
{req: crud.MakeStorageInfoRequest(), code: RequestCodeCrud},
194+
{req: crud.MakeStatsRequest(), code: RequestCodeCrud},
195195
}
196196

197197
for _, test := range tests {

crud/tarantool_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ func getCrudError(req tarantool.Request, crudError interface{}) (interface{}, er
374374

375375
code := req.Code()
376376
if crudError != nil {
377-
if code == tarantool.Call17RequestCode {
377+
if code == tarantool.RequestCodeCall17 {
378378
return crudError, nil
379379
}
380380

errors.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import "fmt"
44

55
// Error is wrapper around error returned by Tarantool.
66
type Error struct {
7-
Code uint32
7+
Code Code
88
Msg string
99
ExtendedInfo *BoxError
1010
}

example_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -591,10 +591,10 @@ func ExampleFuture_GetIterator() {
591591
var it tarantool.ResponseIterator
592592
for it = fut.GetIterator().WithTimeout(timeout); it.Next(); {
593593
resp := it.Value()
594-
if resp.Code == tarantool.PushCode {
594+
if resp.Code == tarantool.CodePush {
595595
// It is a push message.
596596
fmt.Printf("push message: %v\n", resp.Data[0])
597-
} else if resp.Code == tarantool.OkCode {
597+
} else if resp.Code == tarantool.CodeOk {
598598
// It is a regular response.
599599
fmt.Printf("response: %v", resp.Data[0])
600600
} else {

export_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ func RefImplPingBody(enc *msgpack.Encoder) error {
2424

2525
// RefImplSelectBody is reference implementation for filling of a select
2626
// request's body.
27-
func RefImplSelectBody(enc *msgpack.Encoder, space, index, offset, limit, iterator uint32,
28-
key, after interface{}, fetchPos bool) error {
27+
func RefImplSelectBody(enc *msgpack.Encoder, space, index, offset, limit uint32,
28+
iterator Iter, key, after interface{}, fetchPos bool) error {
2929
return fillSelect(enc, space, index, offset, limit, iterator, key, after, fetchPos)
3030
}
3131

future.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ func (fut *Future) AppendPush(resp *Response) {
135135
if fut.isDone() {
136136
return
137137
}
138-
resp.Code = PushCode
138+
resp.Code = CodePush
139139
fut.pushes = append(fut.pushes, resp)
140140

141141
fut.ready <- struct{}{}

future_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
)
1111

1212
func assertResponseIteratorValue(t testing.TB, it ResponseIterator,
13-
code uint32, resp *Response) {
13+
code Code, resp *Response) {
1414
t.Helper()
1515

1616
if it.Err() != nil {
@@ -56,7 +56,7 @@ func TestFutureGetIteratorNoResponse(t *testing.T) {
5656
fut.AppendPush(push)
5757

5858
if it := fut.GetIterator(); it.Next() {
59-
assertResponseIteratorValue(t, it, PushCode, push)
59+
assertResponseIteratorValue(t, it, CodePush, push)
6060
if it.Next() == true {
6161
t.Errorf("An unexpected next value.")
6262
}
@@ -72,7 +72,7 @@ func TestFutureGetIteratorNoResponseTimeout(t *testing.T) {
7272
fut.AppendPush(push)
7373

7474
if it := fut.GetIterator().WithTimeout(1 * time.Nanosecond); it.Next() {
75-
assertResponseIteratorValue(t, it, PushCode, push)
75+
assertResponseIteratorValue(t, it, CodePush, push)
7676
if it.Next() == true {
7777
t.Errorf("An unexpected next value.")
7878
}
@@ -99,10 +99,10 @@ func TestFutureGetIteratorResponseOnTimeout(t *testing.T) {
9999
var it ResponseIterator
100100
var cnt = 0
101101
for it = fut.GetIterator().WithTimeout(5 * time.Second); it.Next(); {
102-
code := PushCode
102+
code := CodePush
103103
r := push
104104
if cnt == 1 {
105-
code = OkCode
105+
code = CodeOk
106106
r = resp
107107
}
108108
assertResponseIteratorValue(t, it, code, r)
@@ -131,7 +131,7 @@ func TestFutureGetIteratorFirstResponse(t *testing.T) {
131131
fut.SetResponse(resp2)
132132

133133
if it := fut.GetIterator(); it.Next() {
134-
assertResponseIteratorValue(t, it, OkCode, resp1)
134+
assertResponseIteratorValue(t, it, CodeOk, resp1)
135135
if it.Next() == true {
136136
t.Errorf("An unexpected next value.")
137137
}
@@ -163,7 +163,7 @@ func TestFutureGetIteratorResponse(t *testing.T) {
163163
responses := []*Response{
164164
{},
165165
{},
166-
{Code: OkCode},
166+
{Code: CodeOk},
167167
}
168168
fut := NewFuture()
169169
for i, resp := range responses {
@@ -181,9 +181,9 @@ func TestFutureGetIteratorResponse(t *testing.T) {
181181
for _, it := range its {
182182
var cnt = 0
183183
for it.Next() {
184-
code := PushCode
184+
code := CodePush
185185
if cnt == len(responses)-1 {
186-
code = OkCode
186+
code = CodeOk
187187
}
188188
assertResponseIteratorValue(t, it, code, responses[cnt])
189189
cnt += 1
@@ -216,7 +216,7 @@ func TestFutureGetIteratorError(t *testing.T) {
216216
for _, it := range its {
217217
var cnt = 0
218218
for it.Next() {
219-
code := PushCode
219+
code := CodePush
220220
assertResponseIteratorValue(t, it, code, responses[cnt])
221221
cnt += 1
222222
}

iterator.go

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package tarantool
2+
3+
// Iter is an enumeration type of a select iterator.
4+
type Iter uint32
5+
6+
// https://github.com/fl00r/go-tarantool-1.6/issues/2
7+
8+
const (
9+
IterEq Iter = 0 // key == x ASC order
10+
IterReq Iter = 1 // key == x DESC order
11+
IterAll Iter = 2 // all tuples
12+
IterLt Iter = 3 // key < x
13+
IterLe Iter = 4 // key <= x
14+
IterGe Iter = 5 // key >= x
15+
IterGt Iter = 6 // key > x
16+
IterBitsAllSet Iter = 7 // all bits from x are set in key
17+
IterBitsAnySet Iter = 8 // at least one x's bit is set
18+
IterBitsAllNotSet Iter = 9 // all bits are not set
19+
)

0 commit comments

Comments
 (0)