-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmodel.go
91 lines (72 loc) · 1.41 KB
/
model.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
package spannermodel
type Table interface {
Name() string
Columns() []Column
PrimaryKey() *PrimaryKeySpec
Interleave() *InterleaveSpec
}
type Column interface {
Name() string
Type() ColumnType
}
type column struct {
name string
typ ColumnType
}
func (c column) Name() string {
return c.name
}
func (c column) Type() ColumnType {
return c.typ
}
type SortOrder int
const (
SortDefault SortOrder = iota
SortAscending
SortDescending
)
type PrimaryKeyColumn struct {
name string
sortOrder SortOrder
}
func (c *PrimaryKeyColumn) Name() string {
return c.name
}
func (c *PrimaryKeyColumn) SortOrder() SortOrder {
return c.sortOrder
}
type PrimaryKeySpec struct {
columns []*PrimaryKeyColumn
}
func (s *PrimaryKeySpec) Columns() []*PrimaryKeyColumn {
return s.columns
}
func NewPrimaryKeySpec() *PrimaryKeySpec {
return &PrimaryKeySpec{}
}
func (s *PrimaryKeySpec) AddColumn(name string, sortOrder SortOrder) *PrimaryKeySpec {
s.columns = append(s.columns, &PrimaryKeyColumn{
name: name,
sortOrder: sortOrder,
})
return s
}
type OnDelete int
const (
OnDeleteDefault OnDelete = iota
OnDeleteNoAction
OnDeleteCascade
)
type InterleaveSpec struct {
parent string
onDelete OnDelete
}
func NewInterleaveSpec(parent string, policy OnDelete) *InterleaveSpec {
return &InterleaveSpec{
parent: parent,
onDelete: policy,
}
}
func (s *InterleaveSpec) Parent() string {
return s.parent
}