-
Notifications
You must be signed in to change notification settings - Fork 0
/
table_column_references.go
83 lines (73 loc) · 1.63 KB
/
table_column_references.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
package gosql
import "strings"
// references column
type referencesColumn struct {
// target table
target string
// target columns
column expression
// match full partial simple
match string
// on update
update string
// on delete
delete string
}
// RefTable set reference table
func (r *referencesColumn) RefTable(table string) *referencesColumn {
r.target = table
return r
}
// Columns reference columns
func (r *referencesColumn) Columns() *expression {
return &r.column
}
// Column reference columns
func (r *referencesColumn) Column(col ...string) *referencesColumn {
r.column.Add(col...)
return r
}
// Match set match
func (r *referencesColumn) Match(match string) *referencesColumn {
r.match = match
return r
}
// OnUpdate set on update
func (r *referencesColumn) OnUpdate(update string) *referencesColumn {
r.update = update
return r
}
// OnDelete set on delete
func (r *referencesColumn) OnDelete(delete string) *referencesColumn {
r.delete = delete
return r
}
// IsEmpty check if empty
func (r *referencesColumn) IsEmpty() bool {
return r == nil || (r.column.Len() == 0 &&
r.target == "" &&
r.update == "" &&
r.delete == "" &&
r.match == "")
}
// String create reference for column
func (r *referencesColumn) String() string {
if r.IsEmpty() {
return ""
}
b := strings.Builder{}
b.WriteString("REFERENCES " + r.target)
if r.column.Len() > 0 {
b.WriteString(" (" + r.column.String(", ") + ")")
}
if r.match != "" {
b.WriteString(" MATCH " + r.match)
}
if r.delete != "" {
b.WriteString(" ON DELETE " + r.delete)
}
if r.update != "" {
b.WriteString(" ON UPDATE " + r.update)
}
return b.String()
}