/
builder.go
99 lines (87 loc) · 2.09 KB
/
builder.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
package sql
import (
"github.com/rueian/pgcapture/pkg/pb"
"strconv"
"strings"
)
func DeleteQuery(namespace, table string, fields []*pb.Field) string {
var query strings.Builder
query.WriteString("delete from \"")
query.WriteString(namespace)
query.WriteString("\".\"")
query.WriteString(table)
query.WriteString("\" where \"")
for i, field := range fields {
query.WriteString(field.Name)
query.WriteString("\"=$" + strconv.Itoa(i+1))
if i != len(fields)-1 {
query.WriteString(" and \"")
}
}
return query.String()
}
func UpdateQuery(namespace, table string, sets, keys []*pb.Field) string {
var query strings.Builder
query.WriteString("update \"")
query.WriteString(namespace)
query.WriteString("\".\"")
query.WriteString(table)
query.WriteString("\" set \"")
var j int
for ; j < len(sets); j++ {
field := sets[j]
query.WriteString(field.Name)
query.WriteString("\"=$" + strconv.Itoa(j+1))
if j != len(sets)-1 {
query.WriteString(",\"")
}
}
query.WriteString(" where \"")
for i := 0; i < len(keys); i++ {
j = i + j
field := keys[i]
query.WriteString(field.Name)
query.WriteString("\"=$" + strconv.Itoa(j+1))
if i != len(keys)-1 {
query.WriteString(" and \"")
}
}
return query.String()
}
func InsertQuery(namespace, table string, keys []string, fields []*pb.Field, count int) string {
var query strings.Builder
query.WriteString("insert into \"")
query.WriteString(namespace)
query.WriteString("\".\"")
query.WriteString(table)
query.WriteString("\"(\"")
for i, field := range fields {
query.WriteString(field.Name)
if i == len(fields)-1 {
query.WriteString("\") values (")
} else {
query.WriteString("\",\"")
}
}
i := 1
for j := 0; j < count; j++ {
for range fields {
query.WriteString("$" + strconv.Itoa(i))
if i%len(fields) == 0 {
query.WriteString(")")
} else {
query.WriteString(",")
}
i++
}
if j < count-1 {
query.WriteString(",(")
}
}
if len(keys) != 0 {
query.WriteString(" ON CONFLICT (")
query.WriteString(strings.Join(keys, ","))
query.WriteString(") DO NOTHING")
}
return query.String()
}