@dbml/core 5.3.1 → 5.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -1
- package/lib/export/DbmlExporter.js +5 -1
- package/lib/index.js +7 -0
- package/lib/parse/ANTLR/ASTGeneration/mssql/README.md +263 -157
- package/lib/parse/ANTLR/ASTGeneration/mysql/README.md +262 -157
- package/lib/parse/ANTLR/ASTGeneration/oraclesql/README.md +261 -157
- package/lib/parse/ANTLR/ASTGeneration/postgres/README.md +252 -157
- package/lib/parse/ANTLR/ASTGeneration/snowflake/README.md +236 -157
- package/lib/transform/index.js +30 -0
- package/package.json +6 -16
- package/types/export/ModelExporter.d.ts +1 -1
- package/types/index.d.ts +2 -1
- package/types/parse/Parser.d.ts +1 -1
- package/types/transform/index.d.ts +7 -0
|
@@ -1,157 +1,263 @@
|
|
|
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
|
-
|
|
|
1
|
+
# Microsoft SQL Server Parser Support
|
|
2
|
+
|
|
3
|
+
> Comprehensive documentation for the MSSQL (SQL Server) model structure generator based on the ANTLR4 parser.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This module provides SQL parsing capabilities for Microsoft SQL Server databases, enabling conversion of T-SQL DDL statements to DBML format. The parser supports SQL Server-specific syntax including `IDENTITY` columns with increment ranges, temporary tables via the `#` prefix convention, and comprehensive `ALTER TABLE ADD CONSTRAINT` operations. Note that there is a known issue with column-level `FOREIGN KEY` constraint parsing.
|
|
8
|
+
|
|
9
|
+
## Support Legend
|
|
10
|
+
|
|
11
|
+
| Symbol | Meaning |
|
|
12
|
+
|--------|---------|
|
|
13
|
+
| ✓ | Fully supported and correctly parsed |
|
|
14
|
+
| ◐ | Valid SQL that is parsed, but some options/clauses are ignored |
|
|
15
|
+
| ✗ | Valid T-SQL syntax, but the parser fails to generate output |
|
|
16
|
+
| — | Syntax not valid in SQL Server |
|
|
17
|
+
|
|
18
|
+
## Key Capabilities
|
|
19
|
+
|
|
20
|
+
- **Data Definition**
|
|
21
|
+
- `CREATE TABLE` with full syntax support
|
|
22
|
+
- Data types: parameterized types (e.g., `VARCHAR(255)`, `DECIMAL(10,2)`)
|
|
23
|
+
- Temporary tables via `#` prefix (e.g., `#temp_table`)
|
|
24
|
+
- **Constraints**
|
|
25
|
+
- `PRIMARY KEY` (column-level, table-level, multi-column, with explicit name)
|
|
26
|
+
- `FOREIGN KEY` (table-level supported; column-level has a bug)
|
|
27
|
+
- `UNIQUE`, `CHECK`, `DEFAULT`, `NOT NULL`
|
|
28
|
+
- **Auto-increment**
|
|
29
|
+
- `IDENTITY` with seed and increment (e.g., `IDENTITY(1,1)`)
|
|
30
|
+
- **Indexes**
|
|
31
|
+
- `CREATE INDEX` (basic, multi-column, unique)
|
|
32
|
+
- CLUSTERED / NONCLUSTERED (parsed but ignored)
|
|
33
|
+
- **Comments**
|
|
34
|
+
- `sp_addextendedproperty` (unreliable parsing)
|
|
35
|
+
- **Schema Modification**
|
|
36
|
+
- `ALTER TABLE ADD CONSTRAINT`
|
|
37
|
+
- Supports: `DEFAULT`, `CHECK`, `UNIQUE`, `PRIMARY KEY`, `FOREIGN KEY`
|
|
38
|
+
- **Data Manipulation**
|
|
39
|
+
- Basic `INSERT` and multi-row `INSERT`
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Feature Support Matrix
|
|
44
|
+
|
|
45
|
+
### `CREATE TABLE`
|
|
46
|
+
|
|
47
|
+
| Feature | Status | Notes |
|
|
48
|
+
|---------|---------|-------|
|
|
49
|
+
| Basic `CREATE TABLE` syntax | ✓ | |
|
|
50
|
+
| Enumerated data types | — | SQL Server doesn't have ENUM type |
|
|
51
|
+
| Parameterized types `name(...)` | ✓ | e.g., `VARCHAR(255)`, `DECIMAL(10,2)` |
|
|
52
|
+
| Array types `name[...]` | — | Not supported in SQL Server |
|
|
53
|
+
| TEMPORARY tables (`#` prefix) | ✓ | Tables with `#` prefix recognized as temporary |
|
|
54
|
+
| `CREATE TABLE` AS SELECT (SELECT INTO) | ✗ | |
|
|
55
|
+
| Table options (FILEGROUP, etc.) | ◐ | Options are ignored |
|
|
56
|
+
|
|
57
|
+
### Constraints
|
|
58
|
+
|
|
59
|
+
#### `PRIMARY KEY`
|
|
60
|
+
|
|
61
|
+
| Feature | Status | Notes |
|
|
62
|
+
|---------|---------|-------|
|
|
63
|
+
| Column-level `PRIMARY KEY` | ✓ | Defined with column: `id INT PRIMARY KEY` |
|
|
64
|
+
| Table-level `PRIMARY KEY` | ✓ | Defined separately: `PRIMARY KEY (id)` |
|
|
65
|
+
| Multi-column `PRIMARY KEY` | ✓ | Multiple columns: `PRIMARY KEY (a, b)` |
|
|
66
|
+
| Explicitly named (CONSTRAINT name) | ✓ | `CONSTRAINT pk_name PRIMARY KEY (id)` |
|
|
67
|
+
| CLUSTERED/NONCLUSTERED | ◐ | Index type options are ignored |
|
|
68
|
+
| Constraint options | ◐ | Other options are ignored |
|
|
69
|
+
|
|
70
|
+
#### `FOREIGN KEY`
|
|
71
|
+
|
|
72
|
+
| Feature | Status | Notes |
|
|
73
|
+
|---------|---------|-------|
|
|
74
|
+
| Column-level `FOREIGN KEY` | ✗ | Known bug - use table-level syntax instead |
|
|
75
|
+
| Table-level `FOREIGN KEY` | ✓ | `FOREIGN KEY (col) REFERENCES other(id)` |
|
|
76
|
+
| Multi-column `FOREIGN KEY` | ✓ | `FOREIGN KEY (a, b) REFERENCES other(x, y)` |
|
|
77
|
+
| Explicitly named (CONSTRAINT name) | ✓ | `CONSTRAINT fk_name FOREIGN KEY ...` |
|
|
78
|
+
| `ON UPDATE` action | ✓ | CASCADE, SET NULL, SET DEFAULT, NO ACTION |
|
|
79
|
+
| `ON DELETE` action | ✓ | CASCADE, SET NULL, SET DEFAULT, NO ACTION |
|
|
80
|
+
| Constraint options | ◐ | Other options are ignored |
|
|
81
|
+
|
|
82
|
+
#### `UNIQUE`
|
|
83
|
+
|
|
84
|
+
| Feature | Status | Notes |
|
|
85
|
+
|---------|---------|-------|
|
|
86
|
+
| Column-level `UNIQUE` | ✓ | `col INT UNIQUE` |
|
|
87
|
+
| Table-level `UNIQUE` | ✓ | `UNIQUE (col)` |
|
|
88
|
+
| Multi-column `UNIQUE` | ✓ | `UNIQUE (a, b)` |
|
|
89
|
+
| Explicitly named (CONSTRAINT name) | ◐ | `CONSTRAINT uq_name UNIQUE (col)` - name is ignored |
|
|
90
|
+
| CLUSTERED/NONCLUSTERED | ◐ | Index type options are ignored |
|
|
91
|
+
| Constraint options | ◐ | Other options are ignored |
|
|
92
|
+
| NULLS NOT DISTINCT | — | Not valid in SQL Server |
|
|
93
|
+
| `UNIQUE KEY`/`UNIQUE INDEX` | — | MySQL syntax - not valid in SQL Server |
|
|
94
|
+
|
|
95
|
+
#### `CHECK`
|
|
96
|
+
|
|
97
|
+
| Feature | Status | Notes |
|
|
98
|
+
|---------|---------|-------|
|
|
99
|
+
| Column-level `CHECK` | ✓ | `col INT CHECK (col > 0)` |
|
|
100
|
+
| Table-level `CHECK` | ✓ | `CHECK (col > 0)` |
|
|
101
|
+
| Explicitly named (CONSTRAINT name) | ✓ | `CONSTRAINT chk_name CHECK (col > 0)` |
|
|
102
|
+
| WITH CHECK / WITH NOCHECK | ◐ | Enforcement options are ignored |
|
|
103
|
+
|
|
104
|
+
#### `DEFAULT`
|
|
105
|
+
|
|
106
|
+
| Feature | Status | Notes |
|
|
107
|
+
|---------|---------|-------|
|
|
108
|
+
| Column-level `DEFAULT` | ✓ | `col INT DEFAULT 0` |
|
|
109
|
+
| Table-level `DEFAULT` | ✗ | Completely ignored |
|
|
110
|
+
| Function as `DEFAULT` | ✓ | `DEFAULT GETDATE()`, `DEFAULT NEWID()` |
|
|
111
|
+
| Explicitly named `DEFAULT` | ◐ | `CONSTRAINT df_name DEFAULT 0` - name is ignored |
|
|
112
|
+
|
|
113
|
+
#### `NOT NULL` / NULL
|
|
114
|
+
|
|
115
|
+
| Feature | Status | Notes |
|
|
116
|
+
|---------|---------|-------|
|
|
117
|
+
| Column-level `NOT NULL` | ✓ | `col INT NOT NULL` |
|
|
118
|
+
| NULL (explicitly nullable) | ✓ | `col INT NULL` |
|
|
119
|
+
| Table-level `NOT NULL` | — | SQL Server only supports column-level `NOT NULL` |
|
|
120
|
+
| Constraint options | ◐ | Other options are ignored |
|
|
121
|
+
|
|
122
|
+
### Auto-Increment Columns
|
|
123
|
+
|
|
124
|
+
| Feature | Status | Notes |
|
|
125
|
+
|---------|---------|-------|
|
|
126
|
+
| `IDENTITY` (column property) | ✓ | `id INT IDENTITY` |
|
|
127
|
+
| `IDENTITY` with seed and increment | ✓ | `id INT IDENTITY(1,1)` - starts at 1, increments by 1 |
|
|
128
|
+
| `AUTO_INCREMENT` (column attribute) | — | MySQL syntax - not valid in SQL Server |
|
|
129
|
+
| `SERIAL` (pseudo-type) | — | PostgreSQL syntax - not valid in SQL Server |
|
|
130
|
+
| `BIGSERIAL` (pseudo-type) | — | PostgreSQL syntax - not valid in SQL Server |
|
|
131
|
+
| `GENERATED AS IDENTITY` (column property) | ✗ | SQL standard syntax - parse failure |
|
|
132
|
+
|
|
133
|
+
### Inline Indexes (in `CREATE TABLE`)
|
|
134
|
+
|
|
135
|
+
| Feature | Status | Notes |
|
|
136
|
+
|---------|---------|-------|
|
|
137
|
+
| Column-level indexes | — | Except for `UNIQUE`/`PRIMARY KEY` constraints |
|
|
138
|
+
| Table-level indexes | — | Except for `UNIQUE`/`PRIMARY KEY` constraints |
|
|
139
|
+
| Named indexes | — | Use `CREATE INDEX` statement |
|
|
140
|
+
| Multi-column indexes | — | Use `CREATE INDEX` statement |
|
|
141
|
+
| CLUSTERED/NONCLUSTERED | ◐ | Index type options are ignored |
|
|
142
|
+
| Index options | — | Use `CREATE INDEX` statement |
|
|
143
|
+
|
|
144
|
+
### Table/Column Comments (in `CREATE TABLE`)
|
|
145
|
+
|
|
146
|
+
| Feature | Status | Notes |
|
|
147
|
+
|---------|---------|-------|
|
|
148
|
+
| Table comments | — | SQL Server uses `sp_addextendedproperty` |
|
|
149
|
+
| Column comments | — | SQL Server uses `sp_addextendedproperty` |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
### `CREATE INDEX`
|
|
154
|
+
|
|
155
|
+
| Feature | Status | Notes |
|
|
156
|
+
|---------|---------|-------|
|
|
157
|
+
| Basic `CREATE INDEX` | ✓ | `CREATE INDEX idx ON table (col)` |
|
|
158
|
+
| Multi-column index | ✓ | `CREATE INDEX idx ON table (a, b)` |
|
|
159
|
+
| Explicitly named index | ✓ | Index name is required in SQL Server |
|
|
160
|
+
| `UNIQUE` index | ✓ | `CREATE UNIQUE INDEX idx ON table (col)` |
|
|
161
|
+
| CLUSTERED index | ◐ | Index type is ignored |
|
|
162
|
+
| NONCLUSTERED index | ◐ | Index type is ignored |
|
|
163
|
+
| Function-based index | — | SQL Server uses computed columns instead |
|
|
164
|
+
| Partial/Filtered index (WHERE clause) | ◐ | WHERE condition is ignored |
|
|
165
|
+
| INCLUDE columns | ◐ | Covering index columns are ignored |
|
|
166
|
+
| BTREE/HASH | ✗ | PostgreSQL syntax - parse failure |
|
|
167
|
+
| COLLATE | — | Not applicable to SQL Server indexes |
|
|
168
|
+
| Index comments | — | Use `sp_addextendedproperty` |
|
|
169
|
+
| NULLS FIRST/LAST | — | Not valid in SQL Server |
|
|
170
|
+
| ASC/DESC | ◐ | Sort direction is ignored |
|
|
171
|
+
| FULLTEXT index | ✗ | Parse failure |
|
|
172
|
+
| SPATIAL index | ✗ | Parse failure |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### `INSERT` Statements
|
|
177
|
+
|
|
178
|
+
| Feature | Status | Notes |
|
|
179
|
+
|---------|---------|-------|
|
|
180
|
+
| Basic `INSERT` ... VALUES | ✓ | `INSERT INTO t (col) VALUES (1)` |
|
|
181
|
+
| Multi-row `INSERT` | ✓ | `INSERT INTO t VALUES (1), (2), (3)` |
|
|
182
|
+
| `INSERT` ... SELECT | ✗ | Subquery as data source |
|
|
183
|
+
| WITH clause (CTE) | ✗ | CTE before `INSERT` |
|
|
184
|
+
| Target table alias | — | Not valid in SQL Server |
|
|
185
|
+
| `INSERT` ... OUTPUT | ◐ | Returns inserted rows - clause is ignored |
|
|
186
|
+
| `INSERT` OVERWRITE | — | Snowflake/Hive syntax - not valid in SQL Server |
|
|
187
|
+
| Multi-table `INSERT` | ✗ | Insert into multiple tables at once |
|
|
188
|
+
| Conditional `INSERT` | ✗ | |
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
### `ALTER TABLE`
|
|
193
|
+
|
|
194
|
+
| Feature | Status | Notes |
|
|
195
|
+
|---------|---------|-------|
|
|
196
|
+
| **ADD COLUMN** | | |
|
|
197
|
+
| - All column properties | ✗ | |
|
|
198
|
+
| **DROP COLUMN** | ✗ | |
|
|
199
|
+
| **ALTER COLUMN** | | |
|
|
200
|
+
| - All modifications | ✗ | |
|
|
201
|
+
| **RENAME COLUMN** | ✗ | |
|
|
202
|
+
| **ADD CONSTRAINT** | | |
|
|
203
|
+
| - Named `DEFAULT` | ✓ | Name is ignored |
|
|
204
|
+
| - `NOT NULL` | ✗ | |
|
|
205
|
+
| - NULL | ✗ | |
|
|
206
|
+
| - Named `CHECK` | ✓ | |
|
|
207
|
+
| - Unnamed `CHECK` | ✓ | |
|
|
208
|
+
| - Named `UNIQUE` | ✓ | |
|
|
209
|
+
| - Unnamed `UNIQUE` | ✓ | |
|
|
210
|
+
| - Named `PRIMARY KEY` | ✓ | |
|
|
211
|
+
| - Unnamed `PRIMARY KEY` | ✓ | |
|
|
212
|
+
| - Named `FOREIGN KEY` | ✓ | |
|
|
213
|
+
| - Unnamed `FOREIGN KEY` | ✓ | |
|
|
214
|
+
| **DROP CONSTRAINT** | ✗ | |
|
|
215
|
+
| **ALTER CONSTRAINT** | ✗ | |
|
|
216
|
+
| **RENAME TABLE (`sp_rename`)** | ✗ | |
|
|
217
|
+
| **TRANSFER (schema change)** | ✗ | |
|
|
218
|
+
| **ADD INDEX** | ✗ | |
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
### Other DDL Statements
|
|
223
|
+
|
|
224
|
+
| Feature | Status | Notes |
|
|
225
|
+
|---------|---------|-------|
|
|
226
|
+
| `DROP TABLE` | ✗ | |
|
|
227
|
+
| `DROP INDEX` | ✗ | |
|
|
228
|
+
| `ALTER INDEX` | ✗ | |
|
|
229
|
+
| `CREATE VIEW` | ✗ | |
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
### Comments (Extended Properties)
|
|
234
|
+
|
|
235
|
+
| Feature | Status | Notes |
|
|
236
|
+
|---------|---------|-------|
|
|
237
|
+
| `sp_addextendedproperty` (table) | ✓ | `MS_Description` for tables - parsing is unreliable |
|
|
238
|
+
| `sp_addextendedproperty` (column) | ✓ | `MS_Description` for columns - parsing is unreliable |
|
|
239
|
+
| `sp_dropextendedproperty` | ✓ | Remove extended property - parsing is unreliable |
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Known Limitations
|
|
244
|
+
|
|
245
|
+
- **Column-level `FOREIGN KEY`**: Column-level (inline) `FOREIGN KEY` definitions have a known bug; use table-level syntax instead
|
|
246
|
+
- **`GENERATED AS IDENTITY`**: SQL standard syntax not supported; use `IDENTITY(seed, increment)` instead
|
|
247
|
+
- **Extended properties for comments**: Parsing is unreliable
|
|
248
|
+
- **`ALTER TABLE` operations**: Limited support outside of ADD CONSTRAINT
|
|
249
|
+
- **DDL modification statements**: `DROP TABLE`, `DROP INDEX`, `ALTER INDEX` not supported
|
|
250
|
+
- **`INSERT` ... SELECT**: Subqueries in `INSERT` statements not supported
|
|
251
|
+
- **`CREATE VIEW`**: View definitions are not parsed
|
|
252
|
+
- **Filtered indexes**: WHERE clause is parsed but ignored
|
|
253
|
+
- **Index types**: BTREE, FULLTEXT, SPATIAL fail to parse
|
|
254
|
+
|
|
255
|
+
## SQL Server-Specific Notes
|
|
256
|
+
|
|
257
|
+
1. **`IDENTITY` Columns**: SQL Server uses `IDENTITY(seed, increment)` syntax. Both seed and increment values are supported, e.g., `IDENTITY(1,1)` starts at 1 and increments by 1
|
|
258
|
+
2. **Temporary Tables**: Tables prefixed with `#` (local temp) or `##` (global temp) are recognized as temporary tables
|
|
259
|
+
3. **Column-level `FOREIGN KEY` Bug**: There is a known bug with column-level (inline) `FOREIGN KEY` syntax. Use table-level `FOREIGN KEY` constraints instead
|
|
260
|
+
4. **Comments via Extended Properties**: SQL Server doesn't have native comment syntax. Use `sp_addextendedproperty` for `MS_Description`, but parsing is unreliable
|
|
261
|
+
5. **`ALTER TABLE ADD CONSTRAINT`**: Works well for `CHECK`, `UNIQUE`, `PRIMARY KEY`, and `FOREIGN KEY` - use this as a workaround for `CREATE TABLE` limitations
|
|
262
|
+
6. **Square Bracket Identifiers**: SQL Server's `[identifier]` syntax is supported in addition to standard double quotes
|
|
263
|
+
7. **CLUSTERED vs NONCLUSTERED**: SQL Server-specific index options are parsed but ignored in DBML output
|