-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_table_statement.go
More file actions
149 lines (122 loc) · 4.11 KB
/
create_table_statement.go
File metadata and controls
149 lines (122 loc) · 4.11 KB
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
package ast
// CreateTableStatement represents a CREATE TABLE statement
type CreateTableStatement struct {
SchemaObjectName *SchemaObjectName
AsEdge bool
AsFileTable bool
AsNode bool
Definition *TableDefinition
}
func (s *CreateTableStatement) node() {}
func (s *CreateTableStatement) statement() {}
// TableDefinition represents a table definition
type TableDefinition struct {
ColumnDefinitions []*ColumnDefinition
TableConstraints []TableConstraint
Indexes []*IndexDefinition
}
func (t *TableDefinition) node() {}
// ColumnDefinition represents a column definition in CREATE TABLE
type ColumnDefinition struct {
ColumnIdentifier *Identifier
DataType DataTypeReference
Collation *Identifier
DefaultConstraint *DefaultConstraintDefinition
IdentityOptions *IdentityOptions
Constraints []ConstraintDefinition
IsPersisted bool
IsRowGuidCol bool
IsHidden bool
IsMasked bool
Nullable *NullableConstraintDefinition
}
func (c *ColumnDefinition) node() {}
// DataTypeReference is an interface for data type references
type DataTypeReference interface {
Node
dataTypeReference()
}
// DefaultConstraintDefinition represents a DEFAULT constraint
type DefaultConstraintDefinition struct {
ConstraintIdentifier *Identifier
Expression ScalarExpression
}
func (d *DefaultConstraintDefinition) node() {}
// IdentityOptions represents IDENTITY options
type IdentityOptions struct {
IdentitySeed ScalarExpression
IdentityIncrement ScalarExpression
NotForReplication bool
}
func (i *IdentityOptions) node() {}
// ConstraintDefinition is an interface for constraint definitions
type ConstraintDefinition interface {
Node
constraintDefinition()
}
// NullableConstraintDefinition represents a NULL or NOT NULL constraint
type NullableConstraintDefinition struct {
Nullable bool
}
func (n *NullableConstraintDefinition) node() {}
func (n *NullableConstraintDefinition) constraintDefinition() {}
// TableConstraint is an interface for table-level constraints
type TableConstraint interface {
Node
tableConstraint()
}
// IndexDefinition represents an index definition within CREATE TABLE
type IndexDefinition struct {
Name *Identifier
Columns []*ColumnWithSortOrder
Unique bool
IndexType *IndexType
IndexOptions []*IndexExpressionOption
IncludeColumns []*ColumnReferenceExpression
}
func (i *IndexDefinition) node() {}
// ColumnWithSortOrder represents a column with optional sort order
type ColumnWithSortOrder struct {
Column *ColumnReferenceExpression
SortOrder SortOrder
}
func (c *ColumnWithSortOrder) node() {}
// SortOrder represents sort order (ASC/DESC)
type SortOrder int
const (
SortOrderNotSpecified SortOrder = iota
SortOrderAscending
SortOrderDescending
)
// CheckConstraintDefinition represents a CHECK constraint
type CheckConstraintDefinition struct {
ConstraintIdentifier *Identifier
CheckCondition BooleanExpression
NotForReplication bool
}
func (c *CheckConstraintDefinition) node() {}
func (c *CheckConstraintDefinition) tableConstraint() {}
func (c *CheckConstraintDefinition) constraintDefinition() {}
// UniqueConstraintDefinition represents a UNIQUE or PRIMARY KEY constraint
type UniqueConstraintDefinition struct {
ConstraintIdentifier *Identifier
Clustered bool
IsPrimaryKey bool
Columns []*ColumnWithSortOrder
IndexType *IndexType
}
func (u *UniqueConstraintDefinition) node() {}
func (u *UniqueConstraintDefinition) tableConstraint() {}
func (u *UniqueConstraintDefinition) constraintDefinition() {}
// ForeignKeyConstraintDefinition represents a FOREIGN KEY constraint
type ForeignKeyConstraintDefinition struct {
ConstraintIdentifier *Identifier
Columns []*Identifier
ReferenceTableName *SchemaObjectName
ReferencedColumns []*Identifier
DeleteAction string
UpdateAction string
NotForReplication bool
}
func (f *ForeignKeyConstraintDefinition) node() {}
func (f *ForeignKeyConstraintDefinition) tableConstraint() {}