/
tarantool.go
101 lines (82 loc) · 1.91 KB
/
tarantool.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package bridge
import tnt "github.com/viciious/go-tarantool"
func makeInsertQuery(req *request) tnt.Query {
if req.action != actionInsert {
return nil
}
tuple := make([]interface{}, 0, len(req.keys)+len(req.args))
for _, key := range req.keys {
tuple = append(tuple, key.value)
}
for _, arg := range req.args {
tuple = append(tuple, arg.value)
}
return &tnt.Insert{
Space: req.space,
Tuple: tuple,
}
}
func makeInsertQueries(reqs []*request) []tnt.Query {
queries := make([]tnt.Query, 0, len(reqs))
for _, req := range reqs {
q := makeInsertQuery(req)
if q != nil {
queries = append(queries, q)
}
}
return queries
}
func makeUpdateQueries(reqs []*request) []tnt.Query {
queries := make([]tnt.Query, 0, len(reqs))
for _, req := range reqs {
if req.action == actionDelete {
queries = append(queries, makeDeleteQuery(req))
continue
}
if req.action == actionInsert {
queries = append(queries, makeInsertQuery(req))
continue
}
keyTuple := make([]interface{}, 0, len(req.keys))
for _, key := range req.keys {
keyTuple = append(keyTuple, key.value)
}
set := make([]tnt.Operator, 0, len(req.args))
for _, arg := range req.args {
set = append(set, &tnt.OpAssign{
Field: arg.field,
Argument: arg.value,
})
}
q := &tnt.Update{
Space: req.space,
KeyTuple: keyTuple,
Set: set,
}
queries = append(queries, q)
}
return queries
}
func makeDeleteQuery(req *request) tnt.Query {
if req.action != actionDelete {
return nil
}
tuple := make([]interface{}, 0, len(req.keys))
for _, key := range req.keys {
tuple = append(tuple, key.value)
}
return &tnt.Delete{
Space: req.space,
KeyTuple: tuple,
}
}
func makeDeleteQueries(reqs []*request) []tnt.Query {
queries := make([]tnt.Query, 0, len(reqs))
for _, req := range reqs {
q := makeDeleteQuery(req)
if q != nil {
queries = append(queries, q)
}
}
return queries
}