Skip to content

Commit bfb5b28

Browse files
authored
Add XmlDataTypeReference, ClusteredExplicit, and enable 6 more tests (#11)
1 parent 2949531 commit bfb5b28

File tree

17 files changed

+1032
-40
lines changed

17 files changed

+1032
-40
lines changed

ast/backup_statement.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package ast
2+
3+
// BackupDatabaseStatement represents a BACKUP DATABASE statement
4+
type BackupDatabaseStatement struct {
5+
DatabaseName *IdentifierOrValueExpression
6+
Devices []*DeviceInfo
7+
Options []*BackupOption
8+
}
9+
10+
func (s *BackupDatabaseStatement) statementNode() {}
11+
func (s *BackupDatabaseStatement) statement() {}
12+
func (s *BackupDatabaseStatement) node() {}
13+
14+
// BackupOption represents a backup option
15+
type BackupOption struct {
16+
OptionKind string // Compression, NoCompression, StopOnError, ContinueAfterError, etc.
17+
Value ScalarExpression
18+
}

ast/create_columnstore_index_statement.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package ast
22

33
// CreateColumnStoreIndexStatement represents a CREATE COLUMNSTORE INDEX statement
44
type CreateColumnStoreIndexStatement struct {
5-
Name *Identifier
6-
Clustered bool
7-
OnName *SchemaObjectName
8-
Columns []*ColumnReferenceExpression
9-
OrderedColumns []*ColumnReferenceExpression
10-
IndexOptions []IndexOption
11-
FilterClause ScalarExpression
12-
OnPartition *PartitionSpecifier
5+
Name *Identifier
6+
Clustered bool
7+
ClusteredExplicit bool // true if CLUSTERED or NONCLUSTERED was explicitly specified
8+
OnName *SchemaObjectName
9+
Columns []*ColumnReferenceExpression
10+
OrderedColumns []*ColumnReferenceExpression
11+
IndexOptions []IndexOption
12+
FilterClause ScalarExpression
13+
OnPartition *PartitionSpecifier
1314
}
1415

1516
func (s *CreateColumnStoreIndexStatement) statement() {}

ast/declare_variable_statement.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,13 @@ type SqlDataTypeReference struct {
2525

2626
func (s *SqlDataTypeReference) node() {}
2727
func (s *SqlDataTypeReference) dataTypeReference() {}
28+
29+
// XmlDataTypeReference represents an XML data type with optional schema collection
30+
type XmlDataTypeReference struct {
31+
XmlDataTypeOption string `json:"XmlDataTypeOption,omitempty"`
32+
XmlSchemaCollection *SchemaObjectName `json:"XmlSchemaCollection,omitempty"`
33+
Name *SchemaObjectName `json:"Name,omitempty"`
34+
}
35+
36+
func (x *XmlDataTypeReference) node() {}
37+
func (x *XmlDataTypeReference) dataTypeReference() {}

ast/event_statements.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package ast
2+
3+
// CreateEventSessionStatement represents CREATE EVENT SESSION statement
4+
type CreateEventSessionStatement struct {
5+
Name *Identifier
6+
ServerName *Identifier
7+
Events []*EventDeclaration
8+
Targets []*EventTarget
9+
Options []*EventSessionOption
10+
}
11+
12+
func (s *CreateEventSessionStatement) node() {}
13+
func (s *CreateEventSessionStatement) statement() {}
14+
15+
// EventDeclaration represents an event in the event session
16+
type EventDeclaration struct {
17+
PackageName *Identifier
18+
EventName *Identifier
19+
Actions []*EventAction
20+
WhereClause ScalarExpression
21+
}
22+
23+
// EventAction represents an action for an event
24+
type EventAction struct {
25+
PackageName *Identifier
26+
ActionName *Identifier
27+
}
28+
29+
// EventTarget represents a target for the event session
30+
type EventTarget struct {
31+
PackageName *Identifier
32+
TargetName *Identifier
33+
Options []*EventTargetOption
34+
}
35+
36+
// EventTargetOption represents an option for an event target
37+
type EventTargetOption struct {
38+
Name *Identifier
39+
Value ScalarExpression
40+
}
41+
42+
// EventSessionOption represents an option for the event session
43+
type EventSessionOption struct {
44+
OptionKind string
45+
Value ScalarExpression
46+
}

ast/external_statements.go

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package ast
2+
3+
// CreateExternalDataSourceStatement represents CREATE EXTERNAL DATA SOURCE statement
4+
type CreateExternalDataSourceStatement struct {
5+
Name *Identifier
6+
Options []*ExternalDataSourceOption
7+
}
8+
9+
func (s *CreateExternalDataSourceStatement) node() {}
10+
func (s *CreateExternalDataSourceStatement) statement() {}
11+
12+
// ExternalDataSourceOption represents an option for external data source
13+
type ExternalDataSourceOption struct {
14+
OptionKind string
15+
Value ScalarExpression
16+
}
17+
18+
// CreateExternalFileFormatStatement represents CREATE EXTERNAL FILE FORMAT statement
19+
type CreateExternalFileFormatStatement struct {
20+
Name *Identifier
21+
Options []*ExternalFileFormatOption
22+
}
23+
24+
func (s *CreateExternalFileFormatStatement) node() {}
25+
func (s *CreateExternalFileFormatStatement) statement() {}
26+
27+
// ExternalFileFormatOption represents an option for external file format
28+
type ExternalFileFormatOption struct {
29+
OptionKind string
30+
Value ScalarExpression
31+
SubOptions []*ExternalFileFormatOption
32+
}
33+
34+
// CreateExternalTableStatement represents CREATE EXTERNAL TABLE statement
35+
type CreateExternalTableStatement struct {
36+
SchemaObjectName *SchemaObjectName
37+
Definition *TableDefinition
38+
DataSource *Identifier
39+
Location ScalarExpression
40+
FileFormat *Identifier
41+
Options []*ExternalTableOption
42+
}
43+
44+
func (s *CreateExternalTableStatement) node() {}
45+
func (s *CreateExternalTableStatement) statement() {}
46+
47+
// ExternalTableOption represents an option for external table
48+
type ExternalTableOption struct {
49+
OptionKind string
50+
Value ScalarExpression
51+
}
52+
53+
// CreateExternalLanguageStatement represents CREATE EXTERNAL LANGUAGE statement
54+
type CreateExternalLanguageStatement struct {
55+
Name *Identifier
56+
Options []*ExternalLanguageOption
57+
}
58+
59+
func (s *CreateExternalLanguageStatement) node() {}
60+
func (s *CreateExternalLanguageStatement) statement() {}
61+
62+
// ExternalLanguageOption represents an option for external language
63+
type ExternalLanguageOption struct {
64+
OptionKind string
65+
Value ScalarExpression
66+
}
67+
68+
// CreateExternalLibraryStatement represents CREATE EXTERNAL LIBRARY statement
69+
type CreateExternalLibraryStatement struct {
70+
Name *Identifier
71+
Options []*ExternalLibraryOption
72+
}
73+
74+
func (s *CreateExternalLibraryStatement) node() {}
75+
func (s *CreateExternalLibraryStatement) statement() {}
76+
77+
// ExternalLibraryOption represents an option for external library
78+
type ExternalLibraryOption struct {
79+
OptionKind string
80+
Value ScalarExpression
81+
}

ast/trivial_statements.go

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,53 @@ type LineNoStatement struct {
5050

5151
func (l *LineNoStatement) node() {}
5252
func (l *LineNoStatement) statement() {}
53+
54+
// CloseSymmetricKeyStatement represents CLOSE SYMMETRIC KEY statement
55+
type CloseSymmetricKeyStatement struct {
56+
Name *Identifier
57+
All bool
58+
}
59+
60+
func (s *CloseSymmetricKeyStatement) node() {}
61+
func (s *CloseSymmetricKeyStatement) statement() {}
62+
63+
// CloseMasterKeyStatement represents CLOSE MASTER KEY statement
64+
type CloseMasterKeyStatement struct{}
65+
66+
func (s *CloseMasterKeyStatement) node() {}
67+
func (s *CloseMasterKeyStatement) statement() {}
68+
69+
// OpenMasterKeyStatement represents OPEN MASTER KEY statement
70+
type OpenMasterKeyStatement struct {
71+
Password ScalarExpression
72+
}
73+
74+
func (s *OpenMasterKeyStatement) node() {}
75+
func (s *OpenMasterKeyStatement) statement() {}
76+
77+
// OpenSymmetricKeyStatement represents OPEN SYMMETRIC KEY statement
78+
type OpenSymmetricKeyStatement struct {
79+
Name *Identifier
80+
DecryptionMechanism string // "Key", "Certificate", "Password", "AsymmetricKey"
81+
DecryptionKey ScalarExpression
82+
}
83+
84+
func (s *OpenSymmetricKeyStatement) node() {}
85+
func (s *OpenSymmetricKeyStatement) statement() {}
86+
87+
// KillStatsJobStatement represents KILL STATS JOB statement
88+
type KillStatsJobStatement struct {
89+
JobId ScalarExpression
90+
}
91+
92+
func (s *KillStatsJobStatement) node() {}
93+
func (s *KillStatsJobStatement) statement() {}
94+
95+
// KillQueryNotificationSubscriptionStatement represents KILL QUERY NOTIFICATION SUBSCRIPTION statement
96+
type KillQueryNotificationSubscriptionStatement struct {
97+
SubscriptionId ScalarExpression
98+
All bool
99+
}
100+
101+
func (s *KillQueryNotificationSubscriptionStatement) node() {}
102+
func (s *KillQueryNotificationSubscriptionStatement) statement() {}

parser/lexer.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,17 @@ const (
197197
TokenBackup
198198
TokenFilestream
199199
TokenReturns
200+
TokenClose
201+
TokenOpen
202+
TokenSymmetric
203+
TokenStats
204+
TokenJob
205+
TokenQuery
206+
TokenNotification
207+
TokenSubscription
208+
TokenDecryption
209+
TokenAsymmetric
210+
TokenCertificate
200211
)
201212

202213
// Token represents a lexical token.
@@ -682,6 +693,17 @@ var keywords = map[string]TokenType{
682693
"BACKUP": TokenBackup,
683694
"FILESTREAM": TokenFilestream,
684695
"RETURNS": TokenReturns,
696+
"CLOSE": TokenClose,
697+
"OPEN": TokenOpen,
698+
"SYMMETRIC": TokenSymmetric,
699+
"STATS": TokenStats,
700+
"JOB": TokenJob,
701+
"QUERY": TokenQuery,
702+
"NOTIFICATION": TokenNotification,
703+
"SUBSCRIPTION": TokenSubscription,
704+
"DECRYPTION": TokenDecryption,
705+
"ASYMMETRIC": TokenAsymmetric,
706+
"CERTIFICATE": TokenCertificate,
685707
}
686708

687709
func lookupKeyword(ident string) TokenType {

0 commit comments

Comments
 (0)