-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcreate_table_statement.go
More file actions
168 lines (139 loc) · 5.2 KB
/
create_table_statement.go
File metadata and controls
168 lines (139 loc) · 5.2 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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
package ast
// CreateTableStatement represents a CREATE TABLE statement
type CreateTableStatement struct {
SchemaObjectName *SchemaObjectName
AsEdge bool
AsFileTable bool
AsNode bool
Definition *TableDefinition
OnFileGroupOrPartitionScheme *FileGroupOrPartitionScheme
TextImageOn *IdentifierOrValueExpression
FileStreamOn *IdentifierOrValueExpression
Options []TableOption
}
// TableDataCompressionOption represents a DATA_COMPRESSION option
type TableDataCompressionOption struct {
DataCompressionOption *DataCompressionOption
OptionKind string
}
func (t *TableDataCompressionOption) node() {}
func (t *TableDataCompressionOption) tableOption() {}
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
ComputedColumnExpression ScalarExpression
Collation *Identifier
DefaultConstraint *DefaultConstraintDefinition
IdentityOptions *IdentityOptions
Constraints []ConstraintDefinition
Index *IndexDefinition
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
IsEnforced *bool // nil = not specified (default enforced), true = ENFORCED, false = NOT ENFORCED
Columns []*ColumnWithSortOrder
IndexType *IndexType
IndexOptions []IndexOption
OnFileGroupOrPartitionScheme *FileGroupOrPartitionScheme
}
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
IsEnforced *bool // nil = not specified (default enforced), true = ENFORCED, false = NOT ENFORCED
}
func (f *ForeignKeyConstraintDefinition) node() {}
func (f *ForeignKeyConstraintDefinition) tableConstraint() {}