-
Notifications
You must be signed in to change notification settings - Fork 21
/
index.go
126 lines (107 loc) · 2.48 KB
/
index.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
package shared
import (
"bytes"
"fmt"
"strings"
)
type Index struct {
Name string
Fields []*Field
FieldNames []string
IsUnique bool
IsSparse bool
}
func (i *Index) GetFindInIds(idx int, bufName, name string) string {
return toIds(bufName, i.Fields[idx].Type, name)
}
func (i *Index) GetFirstField() *Field {
return i.Fields[0]
}
func (i *Index) IsFindInType(field *Field) bool {
switch field.Type {
case "int", "int32", "string", "int64":
return true
default:
return false
}
}
func (i *Index) CanUseFindList() bool {
return len(i.Fields) == 1 && i.CanUseFindIn()
}
func (i *Index) CanUseFindIn() bool {
for _, field := range i.Fields {
if !i.IsFindInType(field) {
return false
}
}
return true
}
func (i *Index) GetFieldList() string {
return strings.Join(i.FieldNames, `","`)
}
func (i *Index) GetFuncParamIn() string {
var params []string
for _, f := range i.Fields {
params = append(params, f.Name+" []"+f.GetGoType())
}
return strings.Join(params, ", ")
}
func (i *Index) GetFuncParam() string {
var params []string
for _, f := range i.Fields {
params = append(params, f.Name+" "+f.GetGoType())
}
return strings.Join(params, ", ")
}
func (i *Index) GetFuncParamOriNames() string {
var params []string
for _, f := range i.Fields {
params = append(params, f.Name)
}
return strings.Join(params, ", ")
}
func (i *Index) GetFuncParamNames(prefixs ...string) string {
buf := bytes.NewBuffer(nil)
prefix := ""
if len(prefixs) > 0 {
prefix = prefixs[0]
}
for _, f := range i.Fields {
tf := f.GetTransformType()
if tf == nil {
buf.WriteString(prefix + f.Name)
} else {
buf.WriteString(fmt.Sprintf(tf.ConvertBack, prefix+f.Name))
}
buf.WriteString(",")
}
length := buf.Len()
if length == 0 {
return ""
}
return string(buf.Bytes()[:length-1])
}
func (i *Index) MysqlCreation(obj *Obj) string {
var buffer bytes.Buffer
if i.IsUnique {
buffer.WriteString(" UNIQUE ")
}
buffer.WriteString(" KEY ")
fnames := make([]string, len(i.Fields))
for idx, f := range i.Fields {
fnames[idx] = camel2name(f.Name)
}
idxName := fmt.Sprintf("idx_%s_%s", obj.Table,
strings.Join(fnames, "_"))
idxName = fmt.Sprintf("`%s`", idxName)
buffer.WriteString(idxName)
buffer.WriteString(" " + "(")
for idx, f := range fnames {
fnames[idx] = fmt.Sprintf("`%s`", f)
}
buffer.WriteString(strings.Join(fnames, ", "))
buffer.WriteByte(')')
line := buffer.String()
line = strings.TrimSpace(line)
return strings.Join(strings.Fields(line), " ")
}