@dbml/core 2.3.1 → 2.4.2
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/lib/export/DbmlExporter.js +11 -6
- package/lib/export/MysqlExporter.js +127 -48
- package/lib/export/PostgresExporter.js +142 -55
- package/lib/export/SqlServerExporter.js +130 -52
- package/lib/export/utils.js +40 -0
- package/lib/model_structure/database.js +53 -12
- package/lib/model_structure/endpoint.js +2 -2
- package/lib/model_structure/field.js +31 -1
- package/lib/model_structure/ref.js +1 -2
- package/lib/model_structure/schema.js +3 -19
- package/lib/model_structure/tableGroup.js +1 -1
- package/lib/model_structure/utils.js +5 -0
- package/lib/parse/dbml/parser.pegjs +74 -24
- package/lib/parse/dbmlParser.js +1275 -886
- package/lib/parse/mssql/fk_definition/actions.js +10 -3
- package/lib/parse/mssql/keyword_parsers.js +12 -1
- package/lib/parse/mssql/statements/actions.js +37 -6
- package/lib/parse/mssql/statements/index.js +1 -1
- package/lib/parse/mssql/statements/statement_types/alter_table/actions.js +11 -5
- package/lib/parse/mssql/statements/statement_types/comments/actions.js +57 -0
- package/lib/parse/mssql/statements/statement_types/comments/index.js +97 -0
- package/lib/parse/mssql/statements/statement_types/create_index/actions.js +6 -1
- package/lib/parse/mssql/statements/statement_types/create_table/actions.js +11 -9
- package/lib/parse/mssql/statements/statement_types/index.js +4 -1
- package/lib/parse/mssql/utils.js +15 -0
- package/lib/parse/mysql/parser.pegjs +55 -20
- package/lib/parse/mysqlParser.js +479 -308
- package/lib/parse/postgresParser.js +15 -14
- package/lib/parse/postgresql/Base_rules.pegjs +24 -3
- package/lib/parse/postgresql/Commands/Alter_table/Alter_table.pegjs +49 -4
- package/lib/parse/postgresql/Commands/Comment.pegjs +18 -6
- package/lib/parse/postgresql/Commands/Create_table/Create_table_normal.pegjs +5 -3
- package/lib/parse/postgresql/Commands/Create_table/Create_table_of.pegjs +1 -1
- package/lib/parse/postgresql/Commands/Create_table/Create_table_partition_of.pegjs +1 -1
- package/lib/parse/postgresql/Commands/Create_type/Create_type_enum.pegjs +2 -2
- package/lib/parse/postgresql/Commands/Ignore_syntax.pegjs +10 -1
- package/lib/parse/postgresql/InitializerUtils.pegjs +14 -2
- package/lib/parse/postgresql/Keywords.pegjs +5 -1
- package/lib/parse/postgresql/parser.pegjs +22 -8
- package/package.json +2 -2
|
@@ -5,9 +5,16 @@
|
|
|
5
5
|
refs: [],
|
|
6
6
|
enums: [],
|
|
7
7
|
tableGroups: [],
|
|
8
|
+
aliases: [],
|
|
8
9
|
project: {},
|
|
9
10
|
};
|
|
10
11
|
let projectCnt = 0;
|
|
12
|
+
function getRelations(operator) {
|
|
13
|
+
if(operator === '<>') return ['*','*'];
|
|
14
|
+
if(operator === '>') return ['*','1'];
|
|
15
|
+
if(operator === '<') return ['1','*'];
|
|
16
|
+
if(operator === '-') return ['1','1'];
|
|
17
|
+
}
|
|
11
18
|
}
|
|
12
19
|
|
|
13
20
|
rules
|
|
@@ -122,23 +129,31 @@ ProjectField
|
|
|
122
129
|
}
|
|
123
130
|
}
|
|
124
131
|
|
|
125
|
-
TableGroupSyntax = table_group sp+ name:name _ "{" _ body:table_group_body _ "}" {
|
|
132
|
+
TableGroupSyntax = table_group sp+ schemaName:schema_name? name:name _ "{" _ body:table_group_body _ "}" {
|
|
126
133
|
return {
|
|
127
134
|
name: name,
|
|
135
|
+
schemaName,
|
|
128
136
|
tables: body,
|
|
129
137
|
token: location()
|
|
130
138
|
}
|
|
131
139
|
}
|
|
132
140
|
|
|
133
|
-
table_group_body = tables:(name __)* {
|
|
141
|
+
table_group_body = tables:(schema_name? name __)* {
|
|
134
142
|
return tables.map(t => ({
|
|
135
|
-
name: t[
|
|
143
|
+
name: t[1],
|
|
144
|
+
schemaName: t[0]
|
|
136
145
|
}));
|
|
137
146
|
}
|
|
138
147
|
|
|
139
148
|
// References
|
|
140
149
|
RefSyntax
|
|
141
|
-
= r: (ref_long / ref_short) {
|
|
150
|
+
= r: (ref_long / ref_short) {
|
|
151
|
+
const schemaName = r.endpoints[0].schemaName;
|
|
152
|
+
return {
|
|
153
|
+
...r,
|
|
154
|
+
schemaName,
|
|
155
|
+
};
|
|
156
|
+
}
|
|
142
157
|
|
|
143
158
|
ref_long
|
|
144
159
|
= ref name:(__ name)? _ "{" _ body:ref_body _ "}" {
|
|
@@ -163,18 +178,21 @@ ref_short
|
|
|
163
178
|
}
|
|
164
179
|
|
|
165
180
|
ref_body
|
|
166
|
-
=
|
|
181
|
+
= field1:field_identifier sp+ relation:relation sp+ field2:field_identifier sp* ref_settings:RefSettings? {
|
|
182
|
+
const rel = getRelations(relation);
|
|
167
183
|
const endpoints = [
|
|
168
184
|
{
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
185
|
+
schemaName: field1.schemaName,
|
|
186
|
+
tableName: field1.tableName,
|
|
187
|
+
fieldNames: field1.fieldNames,
|
|
188
|
+
relation: rel[0],
|
|
172
189
|
token: location()
|
|
173
190
|
},
|
|
174
191
|
{
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
192
|
+
schemaName: field2.schemaName,
|
|
193
|
+
tableName: field2.tableName,
|
|
194
|
+
fieldNames: field2.fieldNames,
|
|
195
|
+
relation: rel[1],
|
|
178
196
|
token: location()
|
|
179
197
|
}
|
|
180
198
|
];
|
|
@@ -224,7 +242,7 @@ OnDelete
|
|
|
224
242
|
|
|
225
243
|
// Tables
|
|
226
244
|
TableSyntax
|
|
227
|
-
= table sp+ name:name alias:alias_def? sp* table_settings:TableSettings? _ "{" body:TableBody "}" {
|
|
245
|
+
= table sp+ schemaName:schema_name? name:name alias:alias_def? sp* table_settings:TableSettings? _ "{" body:TableBody "}" {
|
|
228
246
|
let fields = body.fields || [];
|
|
229
247
|
let indexes = body.indexes || [];
|
|
230
248
|
// Handle list of partial inline_refs
|
|
@@ -232,21 +250,25 @@ TableSyntax
|
|
|
232
250
|
|
|
233
251
|
fields.forEach((field) => {
|
|
234
252
|
(field.inline_refs || []).forEach((iref) => {
|
|
253
|
+
const rel = getRelations(iref.relation);
|
|
235
254
|
const endpoints = [
|
|
236
255
|
{
|
|
256
|
+
schemaName: iref.schemaName,
|
|
237
257
|
tableName: iref.tableName,
|
|
238
258
|
fieldNames: iref.fieldNames,
|
|
239
|
-
relation:
|
|
259
|
+
relation: rel[1],
|
|
240
260
|
token: iref.token
|
|
241
261
|
},
|
|
242
262
|
{
|
|
263
|
+
schemaName: schemaName,
|
|
243
264
|
tableName: name,
|
|
244
265
|
fieldNames: [field.name],
|
|
245
|
-
relation:
|
|
266
|
+
relation: rel[0],
|
|
246
267
|
token: iref.token
|
|
247
268
|
}];
|
|
248
269
|
|
|
249
270
|
let ref = {
|
|
271
|
+
schemaName,
|
|
250
272
|
name: null, // no name
|
|
251
273
|
endpoints: endpoints,
|
|
252
274
|
token: iref.token
|
|
@@ -255,8 +277,21 @@ TableSyntax
|
|
|
255
277
|
})
|
|
256
278
|
});
|
|
257
279
|
|
|
280
|
+
if (alias) {
|
|
281
|
+
if (data.aliases.find(a => a.name === alias)) error(`Alias "${alias}" is already defined`);
|
|
282
|
+
data.aliases.push({
|
|
283
|
+
name: alias,
|
|
284
|
+
kind: 'table',
|
|
285
|
+
value: {
|
|
286
|
+
tableName: name,
|
|
287
|
+
schemaName: schemaName,
|
|
288
|
+
}
|
|
289
|
+
})
|
|
290
|
+
}
|
|
291
|
+
|
|
258
292
|
let res = {
|
|
259
293
|
name: name,
|
|
294
|
+
schemaName,
|
|
260
295
|
alias: alias,
|
|
261
296
|
fields: fields,
|
|
262
297
|
token: location(),
|
|
@@ -323,10 +358,13 @@ TableElement
|
|
|
323
358
|
}
|
|
324
359
|
|
|
325
360
|
Field
|
|
326
|
-
= _ name:name sp+ type:type constrains:(sp+ constrain)* field_settings:(sp+ FieldSettings)? sp* comment? newline {
|
|
361
|
+
= _ name:name sp+ typeSchemaName:schema_name? type:type constrains:(sp+ constrain)* field_settings:(sp+ FieldSettings)? sp* comment? newline {
|
|
327
362
|
const field = {
|
|
328
363
|
name: name,
|
|
329
|
-
type:
|
|
364
|
+
type: {
|
|
365
|
+
schemaName: typeSchemaName,
|
|
366
|
+
...type,
|
|
367
|
+
},
|
|
330
368
|
token: location(),
|
|
331
369
|
inline_refs: []
|
|
332
370
|
}
|
|
@@ -338,9 +376,10 @@ Field
|
|
|
338
376
|
}
|
|
339
377
|
|
|
340
378
|
EnumSyntax
|
|
341
|
-
= enum sp+ name:name _ "{" body: EnumBody "}" {
|
|
379
|
+
= enum sp+ schemaName:schema_name? name:name _ "{" body: EnumBody "}" {
|
|
342
380
|
return {
|
|
343
381
|
name: name,
|
|
382
|
+
schemaName,
|
|
344
383
|
token: location(),
|
|
345
384
|
values: body.enum_values
|
|
346
385
|
};
|
|
@@ -437,7 +476,7 @@ FieldSetting
|
|
|
437
476
|
/ _ a:"unique"i _ { return a }
|
|
438
477
|
/ _ a:"increment" _ { return a }
|
|
439
478
|
/ _ v:ObjectNote _ { return { type: 'note', value: v } }
|
|
440
|
-
/ _ v:RefInline { return { type: 'ref_inline', value: v } }
|
|
479
|
+
/ _ v:RefInline _ { return { type: 'ref_inline', value: v } }
|
|
441
480
|
/ _ v:Default _ {return {type: 'default', value: v} }
|
|
442
481
|
|
|
443
482
|
Indexes
|
|
@@ -523,10 +562,11 @@ ObjectNote
|
|
|
523
562
|
IndexType
|
|
524
563
|
= "type:"i _ val:(btree/hash) { return val }
|
|
525
564
|
RefInline
|
|
526
|
-
= "ref:" sp* relation:relation sp+
|
|
565
|
+
= "ref:" sp* relation:relation sp+ field:inline_field_identifier{
|
|
527
566
|
return {
|
|
528
|
-
|
|
529
|
-
|
|
567
|
+
schemaName: field.schemaName,
|
|
568
|
+
tableName: field.tableName,
|
|
569
|
+
fieldNames: [field.fieldName],
|
|
530
570
|
relation: relation,
|
|
531
571
|
token: location(),
|
|
532
572
|
}
|
|
@@ -579,11 +619,21 @@ set_null "set null" = "set null"i
|
|
|
579
619
|
set_default "set default" = "set default"i
|
|
580
620
|
|
|
581
621
|
// Commonly used tokens
|
|
582
|
-
relation ">, - or <" =
|
|
622
|
+
relation "<>, >, - or <" = '<>' / '>' / '<' / '-'
|
|
583
623
|
name "valid name"
|
|
584
624
|
= c:(character+) { return c.join("") }
|
|
585
625
|
/ quote c:[^\"\n]+ quote { return c.join("") }
|
|
586
626
|
|
|
627
|
+
schema_name "schema name" = name:name "." { return name }
|
|
628
|
+
|
|
629
|
+
field_identifier =
|
|
630
|
+
schemaName:name "." tableName:name "." fieldNames:RefField { return { schemaName, tableName, fieldNames } } /
|
|
631
|
+
tableName:name "." fieldNames:RefField { return { schemaName: null, tableName, fieldNames } }
|
|
632
|
+
|
|
633
|
+
inline_field_identifier =
|
|
634
|
+
schemaName:name "." tableName:name "." fieldName:name { return { schemaName, tableName, fieldName } } /
|
|
635
|
+
tableName:name "." fieldName:name { return { schemaName: null, tableName, fieldName } }
|
|
636
|
+
|
|
587
637
|
type_name "valid name"
|
|
588
638
|
= c:(type_character+) { return c.join("") }
|
|
589
639
|
/ quote c:[^\"\n]+ quote { return c.join("") }
|
|
@@ -707,10 +757,10 @@ BooleanLiteral = boolean: ('true'i/'false'i/'null'i) {
|
|
|
707
757
|
value: boolean
|
|
708
758
|
};
|
|
709
759
|
}
|
|
710
|
-
NumberLiteral = number:(float / integer) {
|
|
760
|
+
NumberLiteral = minus:"-"? number:(float / integer) {
|
|
711
761
|
return {
|
|
712
762
|
type: 'number',
|
|
713
|
-
value: number
|
|
763
|
+
value: minus ? -number : number
|
|
714
764
|
};
|
|
715
765
|
}
|
|
716
766
|
float
|