@sap/cds-compiler 2.13.8 → 3.0.0

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.
Files changed (127) hide show
  1. package/CHANGELOG.md +155 -1594
  2. package/bin/cdsc.js +144 -66
  3. package/doc/CHANGELOG_ARCHIVE.md +1592 -0
  4. package/doc/CHANGELOG_BETA.md +3 -4
  5. package/doc/CHANGELOG_DEPRECATED.md +35 -1
  6. package/doc/{DeprecatedOptions.md → DeprecatedOptions_v2.md} +3 -1
  7. package/doc/Versioning.md +20 -1
  8. package/lib/api/.eslintrc.json +2 -2
  9. package/lib/api/main.js +237 -122
  10. package/lib/api/options.js +17 -88
  11. package/lib/api/validate.js +12 -16
  12. package/lib/base/keywords.js +216 -109
  13. package/lib/base/message-registry.js +152 -37
  14. package/lib/base/messages.js +145 -83
  15. package/lib/base/model.js +44 -2
  16. package/lib/base/optionProcessorHelper.js +19 -0
  17. package/lib/checks/actionsFunctions.js +7 -5
  18. package/lib/checks/annotationsOData.js +11 -32
  19. package/lib/checks/arrayOfs.js +1 -34
  20. package/lib/checks/cdsPersistence.js +1 -0
  21. package/lib/checks/elements.js +6 -6
  22. package/lib/checks/invalidTarget.js +1 -1
  23. package/lib/checks/nonexpandableStructured.js +1 -1
  24. package/lib/checks/queryNoDbArtifacts.js +2 -1
  25. package/lib/checks/selectItems.js +5 -1
  26. package/lib/checks/types.js +4 -2
  27. package/lib/checks/utils.js +2 -2
  28. package/lib/checks/validator.js +4 -5
  29. package/lib/compiler/assert-consistency.js +16 -10
  30. package/lib/compiler/base.js +1 -0
  31. package/lib/compiler/builtins.js +98 -9
  32. package/lib/compiler/checks.js +22 -70
  33. package/lib/compiler/define.js +61 -13
  34. package/lib/compiler/extend.js +79 -14
  35. package/lib/compiler/finalize-parse-cdl.js +46 -29
  36. package/lib/compiler/index.js +100 -37
  37. package/lib/compiler/moduleLayers.js +7 -0
  38. package/lib/compiler/populate.js +19 -18
  39. package/lib/compiler/propagator.js +7 -4
  40. package/lib/compiler/resolve.js +297 -234
  41. package/lib/compiler/shared.js +107 -102
  42. package/lib/compiler/tweak-assocs.js +16 -11
  43. package/lib/compiler/utils.js +5 -0
  44. package/lib/edm/annotations/genericTranslation.js +93 -21
  45. package/lib/edm/csn2edm.js +230 -115
  46. package/lib/edm/edm.js +305 -226
  47. package/lib/edm/edmPreprocessor.js +509 -438
  48. package/lib/edm/edmUtils.js +31 -45
  49. package/lib/gen/Dictionary.json +98 -22
  50. package/lib/gen/language.checksum +1 -1
  51. package/lib/gen/language.interp +10 -30
  52. package/lib/gen/language.tokens +105 -114
  53. package/lib/gen/languageLexer.interp +1 -34
  54. package/lib/gen/languageLexer.js +889 -1007
  55. package/lib/gen/languageLexer.tokens +95 -106
  56. package/lib/gen/languageParser.js +20786 -22199
  57. package/lib/json/csnVersion.js +10 -11
  58. package/lib/json/from-csn.js +59 -51
  59. package/lib/json/to-csn.js +10 -10
  60. package/lib/language/antlrParser.js +2 -2
  61. package/lib/language/docCommentParser.js +62 -39
  62. package/lib/language/errorStrategy.js +52 -40
  63. package/lib/language/genericAntlrParser.js +348 -229
  64. package/lib/language/language.g4 +629 -653
  65. package/lib/language/multiLineStringParser.js +14 -42
  66. package/lib/language/textUtils.js +44 -0
  67. package/lib/main.d.ts +46 -43
  68. package/lib/main.js +108 -79
  69. package/lib/model/csnRefs.js +34 -7
  70. package/lib/model/csnUtils.js +337 -332
  71. package/lib/model/enrichCsn.js +1 -0
  72. package/lib/model/revealInternalProperties.js +30 -10
  73. package/lib/model/sortViews.js +32 -31
  74. package/lib/modelCompare/compare.js +6 -6
  75. package/lib/optionProcessor.js +73 -46
  76. package/lib/render/.eslintrc.json +1 -1
  77. package/lib/render/DuplicateChecker.js +4 -7
  78. package/lib/render/manageConstraints.js +70 -2
  79. package/lib/render/toCdl.js +1042 -882
  80. package/lib/render/toHdbcds.js +195 -245
  81. package/lib/render/toRename.js +44 -22
  82. package/lib/render/toSql.js +225 -241
  83. package/lib/render/utils/common.js +145 -15
  84. package/lib/render/utils/sql.js +20 -19
  85. package/lib/sql-identifier.js +6 -0
  86. package/lib/transform/db/.eslintrc.json +4 -3
  87. package/lib/transform/db/associations.js +2 -2
  88. package/lib/transform/db/cdsPersistence.js +5 -15
  89. package/lib/transform/db/constraints.js +4 -2
  90. package/lib/transform/db/expansion.js +22 -16
  91. package/lib/transform/db/flattening.js +109 -80
  92. package/lib/transform/db/transformExists.js +7 -7
  93. package/lib/transform/db/views.js +9 -6
  94. package/lib/transform/draft/.eslintrc.json +2 -2
  95. package/lib/transform/draft/db.js +6 -6
  96. package/lib/transform/draft/odata.js +6 -7
  97. package/lib/transform/forHanaNew.js +62 -48
  98. package/lib/transform/forOdataNew.js +49 -50
  99. package/lib/transform/localized.js +31 -20
  100. package/lib/transform/odata/toFinalBaseType.js +16 -14
  101. package/lib/transform/odata/typesExposure.js +146 -198
  102. package/lib/transform/odata/utils.js +1 -38
  103. package/lib/transform/transformUtilsNew.js +67 -84
  104. package/lib/transform/translateAssocsToJoins.js +7 -3
  105. package/lib/transform/universalCsn/.eslintrc.json +2 -2
  106. package/lib/transform/universalCsn/coreComputed.js +16 -9
  107. package/lib/transform/universalCsn/universalCsnEnricher.js +60 -10
  108. package/lib/utils/file.js +3 -3
  109. package/lib/utils/moduleResolve.js +13 -6
  110. package/lib/utils/timetrace.js +20 -21
  111. package/package.json +35 -4
  112. package/share/messages/message-explanations.json +2 -1
  113. package/share/messages/syntax-expected-integer.md +37 -0
  114. package/doc/ApiMigration.md +0 -237
  115. package/doc/CommandLineMigration.md +0 -58
  116. package/doc/ErrorMessages.md +0 -175
  117. package/doc/FioriAnnotations.md +0 -94
  118. package/doc/ODataTransformation.md +0 -273
  119. package/lib/backends.js +0 -529
  120. package/lib/fix_antlr4-8_warning.js +0 -56
  121. package/lib/transform/odata/attachPath.js +0 -96
  122. package/lib/transform/odata/expandStructKeysInAssociations.js +0 -59
  123. package/lib/transform/odata/generateForeignKeyElements.js +0 -261
  124. package/lib/transform/odata/referenceFlattener.js +0 -296
  125. package/lib/transform/odata/sortByAssociationDependency.js +0 -105
  126. package/lib/transform/odata/structuralPath.js +0 -72
  127. package/lib/transform/odata/structureFlattener.js +0 -171
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- const { functionsWithoutParens } = require("../compiler/builtins");
3
+ const { functionsWithoutParens } = require('../compiler/builtins');
4
4
 
5
5
  module.exports = {
6
6
  // CDL reserved keywords, used for automatic quoting in 'toCdl' renderer
@@ -26,9 +26,9 @@ module.exports = {
26
26
  'ON',
27
27
  'SELECT',
28
28
  'SOME',
29
- 'WHEN',
30
29
  'TRIM',
31
30
  'TRUE', // boolean
31
+ 'WHEN',
32
32
  'WHERE',
33
33
  'WITH',
34
34
  ],
@@ -45,6 +45,7 @@ module.exports = {
45
45
  'AFTER',
46
46
  'ALL',
47
47
  'ALTER',
48
+ 'ALWAYS',
48
49
  'ANALYZE',
49
50
  'AND',
50
51
  'AS',
@@ -85,18 +86,22 @@ module.exports = {
85
86
  'END',
86
87
  'ESCAPE',
87
88
  'EXCEPT',
89
+ 'EXCLUDE',
88
90
  'EXCLUSIVE',
89
91
  'EXISTS',
90
92
  'EXPLAIN',
91
93
  'FAIL',
92
94
  'FILTER',
95
+ 'FIRST',
93
96
  'FOLLOWING',
94
97
  'FOR',
95
98
  'FOREIGN',
96
99
  'FROM',
97
100
  'FULL',
101
+ 'GENERATED',
98
102
  'GLOB',
99
103
  'GROUP',
104
+ 'GROUPS',
100
105
  'HAVING',
101
106
  'IF',
102
107
  'IGNORE',
@@ -114,21 +119,25 @@ module.exports = {
114
119
  'ISNULL',
115
120
  'JOIN',
116
121
  'KEY',
122
+ 'LAST',
117
123
  'LEFT',
118
124
  'LIKE',
119
125
  'LIMIT',
120
126
  'MATCH',
127
+ 'MATERIALIZED',
121
128
  'NATURAL',
122
129
  'NO',
123
130
  'NOT',
124
131
  'NOTHING',
125
132
  'NOTNULL',
126
133
  'NULL',
134
+ 'NULLS',
127
135
  'OF',
128
136
  'OFFSET',
129
137
  'ON',
130
138
  'OR',
131
139
  'ORDER',
140
+ 'OTHERS',
132
141
  'OUTER',
133
142
  'OVER',
134
143
  'PARTITION',
@@ -147,6 +156,7 @@ module.exports = {
147
156
  'RENAME',
148
157
  'REPLACE',
149
158
  'RESTRICT',
159
+ 'RETURNING',
150
160
  'RIGHT',
151
161
  'ROLLBACK',
152
162
  'ROW',
@@ -158,6 +168,7 @@ module.exports = {
158
168
  'TEMP',
159
169
  'TEMPORARY',
160
170
  'THEN',
171
+ 'TIES',
161
172
  'TO',
162
173
  'TRANSACTION',
163
174
  'TRIGGER',
@@ -174,16 +185,7 @@ module.exports = {
174
185
  'WHERE',
175
186
  'WINDOW',
176
187
  'WITH',
177
- 'WITHOUT',
178
- 'ALWAYS',
179
- 'EXCLUDE',
180
- 'FIRST',
181
- 'GENERATED',
182
- 'GROUPS',
183
- 'LAST',
184
- 'NULLS',
185
- 'OTHERS',
186
- 'TIES',
188
+ 'WITHOUT'
187
189
  ],
188
190
  // SAP HANA keywords, used for smart quoting in to-hdi.plain
189
191
  // Taken from https://help.sap.com/viewer/7c78579ce9b14a669c1f3295b0d8ca16/Cloud/en-US/28bcd6af3eb6437892719f7c27a8a285.html
@@ -191,90 +193,8 @@ module.exports = {
191
193
  // in rule unreserved_keyword_column (=…_common - "CONSTRAINT") in
192
194
  // ptime/query/parser/syntax/qp_gram.y of the HANA sources.
193
195
  hana: [
194
- 'ALL',
195
- 'ALTER',
196
- 'AS',
197
- 'BEFORE',
198
- 'BEGIN',
199
- 'BOTH',
200
- 'CASE',
201
- 'CHAR',
202
- 'CONDITION',
203
- 'CONNECT',
204
- 'CROSS',
205
- 'CUBE',
206
- 'CURRENT_CONNECTION',
207
- 'CURRENT_DATE',
208
- 'CURRENT_SCHEMA',
209
- 'CURRENT_TIME',
210
- 'CURRENT_TIMESTAMP',
211
- 'CURRENT_TRANSACTION_ISOLATION_LEVEL',
212
- 'CURRENT_USER',
213
- 'CURRENT_UTCDATE',
214
- 'CURRENT_UTCTIME',
215
- 'CURRENT_UTCTIMESTAMP',
216
- 'CURRVAL',
217
- 'CURSOR',
218
- 'DECLARE',
219
- 'DISTINCT',
220
- 'ELSE',
221
- 'ELSEIF',
222
- 'END',
223
- 'EXCEPT',
224
- 'EXCEPTION',
225
- 'EXEC',
226
- 'FALSE',
227
- 'FOR',
228
- 'FROM',
229
- 'FULL',
230
- 'GROUP',
231
- 'HAVING',
232
- 'IF',
233
- 'IN',
234
- 'INNER',
235
- 'INOUT',
236
- 'INTERSECT',
237
- 'INTO',
238
- 'IS',
239
- 'JOIN',
240
- 'LEADING',
241
- 'LEFT',
242
- 'LIMIT',
243
- 'LOOP',
244
- 'MINUS',
245
- 'NATURAL',
246
- 'NCHAR',
247
- 'NEXTVAL',
248
- 'NULL',
249
- 'ON',
250
- 'ORDER',
251
- 'OUT',
252
- 'PRIOR',
253
- 'RETURN',
254
- 'RETURNS',
255
- 'REVERSE',
256
- 'RIGHT',
257
- 'ROLLUP',
258
- 'ROWID',
259
- 'SELECT',
260
- 'SESSION_USER',
261
- 'SET',
262
- 'SQL',
263
- 'START',
264
- 'SYSUUID',
265
- 'TABLESAMPLE',
266
- 'TOP',
267
- 'TRAILING',
268
- 'TRUE',
269
- 'UNION',
270
- 'UNKNOWN',
271
- 'USING',
272
- 'UTCTIMESTAMP',
273
- 'VALUES',
274
- 'WHEN',
275
- 'WHERE',
276
- 'WHILE',
277
- 'WITH',
196
+ 'ABAPITAB',
197
+ 'ABAPSTRUCT',
278
198
  'ABAP_CHAR',
279
199
  'ABAP_DATE',
280
200
  'ABAP_DECFLOAT16',
@@ -289,23 +209,26 @@ module.exports = {
289
209
  'ABAP_STRING',
290
210
  'ABAP_TIME',
291
211
  'ABAP_XSTRING',
292
- 'ABAPITAB',
293
- 'ABAPSTRUCT',
294
212
  'ADD_DAYS',
295
213
  'ADD_MONTHS',
296
214
  'ADD_SECONDS',
297
215
  'ADD_YEARS',
298
216
  'ADOPT',
217
+ 'ALL',
218
+ 'ALTER',
299
219
  'ANALYTIC',
300
220
  'ANY',
301
221
  'APPLY_FILTER',
302
222
  'ARRAY',
303
223
  'ARRAY_AGG',
224
+ 'AS',
304
225
  'AT',
305
226
  'AUTHORIZATION',
306
227
  'AUTO',
307
228
  'AVG',
308
229
  'BASIC',
230
+ 'BEFORE',
231
+ 'BEGIN',
309
232
  'BETWEEN',
310
233
  'BIGINT',
311
234
  'BINARY',
@@ -319,22 +242,28 @@ module.exports = {
319
242
  'BIND_REAL',
320
243
  'BLOB',
321
244
  'BOOLEAN',
245
+ 'BOTH',
322
246
  'BOUNDARY',
323
247
  'BREAKUP',
324
248
  'BULK',
325
249
  'BY',
250
+ 'CASE',
326
251
  'CAST',
327
252
  'CE_CALC',
328
253
  'CE_JOIN',
329
254
  'CE_PROJECTION',
255
+ 'CHAR',
330
256
  'CHARACTER',
331
257
  'CLOB',
332
258
  'COALESCE',
333
259
  'COLLATE',
334
260
  'CONCAT',
261
+ 'CONDITION',
262
+ 'CONNECT',
335
263
  'CONSTANT',
336
264
  'CONSTRAINT',
337
265
  'COUNT',
266
+ 'CROSS',
338
267
  'CS_DATE',
339
268
  'CS_DAYDATE',
340
269
  'CS_DECIMAL_FLOAT',
@@ -356,9 +285,22 @@ module.exports = {
356
285
  'CS_TEXT',
357
286
  'CS_TEXT_AE',
358
287
  'CS_TIME',
288
+ 'CUBE',
359
289
  'CUME_DIST',
360
290
  'CURDATE',
291
+ 'CURRENT_CONNECTION',
361
292
  'CURRENT_DATABASE',
293
+ 'CURRENT_DATE',
294
+ 'CURRENT_SCHEMA',
295
+ 'CURRENT_TIME',
296
+ 'CURRENT_TIMESTAMP',
297
+ 'CURRENT_TRANSACTION_ISOLATION_LEVEL',
298
+ 'CURRENT_USER',
299
+ 'CURRENT_UTCDATE',
300
+ 'CURRENT_UTCTIME',
301
+ 'CURRENT_UTCTIMESTAMP',
302
+ 'CURRVAL',
303
+ 'CURSOR',
362
304
  'CURTIME',
363
305
  'CURVE',
364
306
  'DATABASE',
@@ -416,27 +358,41 @@ module.exports = {
416
358
  'DDIC_WEEK',
417
359
  'DEC',
418
360
  'DECIMAL',
361
+ 'DECLARE',
419
362
  'DENSE_RANK',
420
363
  'DEPTH',
421
364
  'DISTANCE',
365
+ 'DISTINCT',
422
366
  'DOUBLE',
423
367
  'DW_OPTIMIZED',
368
+ 'ELSE',
369
+ 'ELSEIF',
424
370
  'EMPTY',
371
+ 'END',
372
+ 'EXCEPT',
373
+ 'EXCEPTION',
374
+ 'EXEC',
425
375
  'EXISTS',
426
376
  'EXTRACT',
377
+ 'FALSE',
427
378
  'FILTER',
428
379
  'FIRST_VALUE',
429
380
  'FLATTEN',
430
381
  'FLOAT',
382
+ 'FOR',
431
383
  'FORCE_FIRST_PASSWORD_CHANGE',
432
384
  'FREESTYLESEARCHATTRIBUTE',
385
+ 'FROM',
386
+ 'FULL',
433
387
  'GET_NUM_SERVERS',
434
388
  'GREATEST',
389
+ 'GROUP',
435
390
  'GROUPING',
436
391
  'GROUPING_FILTER',
437
392
  'GROUPING_ID',
438
393
  'HASANYPRIVILEGES',
439
394
  'HASSYSTEMPRIVILEGE',
395
+ 'HAVING',
440
396
  'HEXTOBIN',
441
397
  'HIERARCHY',
442
398
  'HIERARCHY_ANCESTORS',
@@ -450,14 +406,22 @@ module.exports = {
450
406
  'HILBERT',
451
407
  'HOST',
452
408
  'HOUR',
409
+ 'IF',
453
410
  'IFNULL',
411
+ 'IN',
412
+ 'INNER',
413
+ 'INOUT',
454
414
  'INSTR',
455
415
  'INT',
456
416
  'INTEGER',
457
417
  'INTERNAL',
458
- 'IS_EMPTY',
418
+ 'INTERSECT',
419
+ 'INTO',
420
+ 'IS',
459
421
  'ISAUTHORIZED',
460
422
  'ISTOTAL',
423
+ 'IS_EMPTY',
424
+ 'JOIN',
461
425
  'JSON_QUERY',
462
426
  'JSON_TABLE',
463
427
  'JSON_VALUE',
@@ -467,14 +431,18 @@ module.exports = {
467
431
  'LATERAL',
468
432
  'LAYOUT',
469
433
  'LEAD',
434
+ 'LEADING',
470
435
  'LEAST',
471
436
  'LEAVES',
437
+ 'LEFT',
472
438
  'LENGTH',
473
439
  'LENGTHB',
474
440
  'LEVELS',
441
+ 'LIMIT',
475
442
  'LOCATE',
476
443
  'LOCATE_REGEXPR',
477
444
  'LONGDATE',
445
+ 'LOOP',
478
446
  'LPAD',
479
447
  'LTRIM',
480
448
  'MAP',
@@ -483,10 +451,14 @@ module.exports = {
483
451
  'MAX',
484
452
  'MEASURES',
485
453
  'MIN',
454
+ 'MINUS',
486
455
  'MINUTE',
487
456
  'MONTH',
488
457
  'MULTIPARENT',
458
+ 'NATURAL',
459
+ 'NCHAR',
489
460
  'NCLOB',
461
+ 'NEXTVAL',
490
462
  'NEXT_DAY',
491
463
  'NO',
492
464
  'NOT',
@@ -494,6 +466,7 @@ module.exports = {
494
466
  'NTEXT',
495
467
  'NTH_VALUE',
496
468
  'NTILE',
469
+ 'NULL',
497
470
  'NULLIF',
498
471
  'NUMBER',
499
472
  'NUMERIC',
@@ -502,14 +475,18 @@ module.exports = {
502
475
  'OCCURRENCES_REGEXPR',
503
476
  'OF',
504
477
  'OLYMP',
478
+ 'ON',
505
479
  'OPENCYPHER_TABLE',
480
+ 'ORDER',
506
481
  'ORDINALITY',
507
482
  'ORPHAN',
483
+ 'OUT',
508
484
  'OVER',
509
- 'PERCENT_RANK',
510
485
  'PERCENTILE_CONT',
511
486
  'PERCENTILE_DISC',
487
+ 'PERCENT_RANK',
512
488
  'PLAIN',
489
+ 'PRIOR',
513
490
  'PRODUCT',
514
491
  'RANGE',
515
492
  'RANK',
@@ -523,9 +500,15 @@ module.exports = {
523
500
  'REMOTE_EXECUTE_QUERY',
524
501
  'REPLACE',
525
502
  'REPLACE_REGEXPR',
503
+ 'RETURN',
504
+ 'RETURNS',
505
+ 'REVERSE',
506
+ 'RIGHT',
507
+ 'ROLLUP',
526
508
  'ROUND',
527
509
  'ROUNDROBIN',
528
510
  'ROW',
511
+ 'ROWID',
529
512
  'ROW_NUMBER',
530
513
  'RPAD',
531
514
  'RTREE',
@@ -535,14 +518,22 @@ module.exports = {
535
518
  'SECONDDATE',
536
519
  'SECONDS_BETWEEN',
537
520
  'SECONDTIME',
521
+ 'SELECT',
538
522
  'SERIES_ELEMENT_TO_PERIOD',
539
523
  'SERIES_PERIOD_TO_ELEMENT',
540
524
  'SERIES_ROUND',
541
525
  'SESSION_CONTEXT',
526
+ 'SESSION_USER',
527
+ 'SET',
542
528
  'SIBLING',
543
529
  'SMALLDECIMAL',
544
530
  'SMALLINT',
545
531
  'SOME',
532
+ 'SQL',
533
+ 'START',
534
+ 'STDDEV',
535
+ 'STRING',
536
+ 'STRING_AGG',
546
537
  'ST_ALPHASHAPEAGGR',
547
538
  'ST_ALPHASHAPEAREAAGGR',
548
539
  'ST_ALPHASHAPEEDGEAGGR',
@@ -583,19 +574,18 @@ module.exports = {
583
574
  'ST_POLYGON',
584
575
  'ST_RECTANGLE',
585
576
  'ST_UNIONAGGR',
586
- 'STDDEV',
587
- 'STRING',
588
- 'STRING_AGG',
589
577
  'SUBSTR',
578
+ 'SUBSTRING',
579
+ 'SUBSTRING_REGEXPR',
590
580
  'SUBSTR_AFTER',
591
581
  'SUBSTR_BEFORE',
592
582
  'SUBSTR_REGEXPR',
593
- 'SUBSTRING',
594
- 'SUBSTRING_REGEXPR',
595
583
  'SUM',
596
584
  'SYSTEM_TIME',
585
+ 'SYSUUID',
597
586
  'TABLE',
598
587
  'TABLES',
588
+ 'TABLESAMPLE',
599
589
  'TARGET',
600
590
  'TEMPORARY',
601
591
  'TEXT',
@@ -613,6 +603,11 @@ module.exports = {
613
603
  'TM_GET_RELEVANT_DOCUMENTS',
614
604
  'TM_GET_RELEVANT_TERMS',
615
605
  'TM_GET_SUGGESTED_TERMS',
606
+ 'TOKEN',
607
+ 'TOOLOPTION',
608
+ 'TOP',
609
+ 'TOPK',
610
+ 'TOTAL',
616
611
  'TO_BIGINT',
617
612
  'TO_BINARY',
618
613
  'TO_BLOB',
@@ -638,19 +633,22 @@ module.exports = {
638
633
  'TO_TINYINT',
639
634
  'TO_VARBINARY',
640
635
  'TO_VARCHAR',
641
- 'TOKEN',
642
- 'TOOLOPTION',
643
- 'TOPK',
644
- 'TOTAL',
645
636
  'TRACE',
646
637
  'TRACEPROFILE',
647
638
  'TRACES',
639
+ 'TRAILING',
648
640
  'TRANSACTION',
649
641
  'TREE',
650
642
  'TRIGGER_UPDATE_COLUMN',
651
643
  'TRIM',
644
+ 'TRUE',
645
+ 'UNION',
646
+ 'UNKNOWN',
652
647
  'UNNEST',
653
648
  'USER',
649
+ 'USING',
650
+ 'UTCTIMESTAMP',
651
+ 'VALUES',
654
652
  'VAR',
655
653
  'VARBINARY',
656
654
  'VARCHAR',
@@ -659,8 +657,12 @@ module.exports = {
659
657
  'VARCHAR3',
660
658
  'VERSIONING',
661
659
  'WEEKDAY',
660
+ 'WHEN',
661
+ 'WHERE',
662
+ 'WHILE',
662
663
  'WHY_FOUND',
663
664
  'WINDOW',
665
+ 'WITH',
664
666
  'WITHIN',
665
667
  'XMLTABLE',
666
668
  'YEAR'
@@ -694,5 +696,110 @@ module.exports = {
694
696
  'TOP', 'TRAILING', 'UNION',
695
697
  'USING', 'VALUES', 'WHEN',
696
698
  'WHERE', 'WHILE', 'WITH'
699
+ ],
700
+ // Postgres keywords, used for smart quoting in to-sql.plain.postgres
701
+ // Taken from https://www.postgresql.org/docs/current/sql-keywords-appendix.html
702
+ // Generated via scripts/keywords/postgres/generateKeywords.js
703
+ postgres: [
704
+ 'ALL',
705
+ 'ANALYSE',
706
+ 'ANALYZE',
707
+ 'AND',
708
+ 'ANY',
709
+ 'ARRAY',
710
+ 'AS',
711
+ 'ASC',
712
+ 'ASYMMETRIC',
713
+ 'AUTHORIZATION',
714
+ 'BINARY',
715
+ 'BOTH',
716
+ 'CASE',
717
+ 'CAST',
718
+ 'CHECK',
719
+ 'COLLATE',
720
+ 'COLLATION',
721
+ 'COLUMN',
722
+ 'CONCURRENTLY',
723
+ 'CONSTRAINT',
724
+ 'CREATE',
725
+ 'CROSS',
726
+ 'CURRENT_CATALOG',
727
+ 'CURRENT_DATE',
728
+ 'CURRENT_ROLE',
729
+ 'CURRENT_SCHEMA',
730
+ 'CURRENT_TIME',
731
+ 'CURRENT_TIMESTAMP',
732
+ 'CURRENT_USER',
733
+ 'DEFAULT',
734
+ 'DEFERRABLE',
735
+ 'DESC',
736
+ 'DISTINCT',
737
+ 'DO',
738
+ 'ELSE',
739
+ 'END',
740
+ 'EXCEPT',
741
+ 'FALSE',
742
+ 'FETCH',
743
+ 'FOR',
744
+ 'FOREIGN',
745
+ 'FREEZE',
746
+ 'FROM',
747
+ 'FULL',
748
+ 'GRANT',
749
+ 'GROUP',
750
+ 'HAVING',
751
+ 'ILIKE',
752
+ 'IN',
753
+ 'INITIALLY',
754
+ 'INNER',
755
+ 'INTERSECT',
756
+ 'INTO',
757
+ 'IS',
758
+ 'ISNULL',
759
+ 'JOIN',
760
+ 'LATERAL',
761
+ 'LEADING',
762
+ 'LEFT',
763
+ 'LIKE',
764
+ 'LIMIT',
765
+ 'LOCALTIME',
766
+ 'LOCALTIMESTAMP',
767
+ 'NATURAL',
768
+ 'NOT',
769
+ 'NOTNULL',
770
+ 'NULL',
771
+ 'OFFSET',
772
+ 'ON',
773
+ 'ONLY',
774
+ 'OR',
775
+ 'ORDER',
776
+ 'OUTER',
777
+ 'OVERLAPS',
778
+ 'PLACING',
779
+ 'PRIMARY',
780
+ 'REFERENCES',
781
+ 'RETURNING',
782
+ 'RIGHT',
783
+ 'SELECT',
784
+ 'SESSION_USER',
785
+ 'SIMILAR',
786
+ 'SOME',
787
+ 'SYMMETRIC',
788
+ 'TABLE',
789
+ 'TABLESAMPLE',
790
+ 'THEN',
791
+ 'TO',
792
+ 'TRAILING',
793
+ 'TRUE',
794
+ 'UNION',
795
+ 'UNIQUE',
796
+ 'USER',
797
+ 'USING',
798
+ 'VARIADIC',
799
+ 'VERBOSE',
800
+ 'WHEN',
801
+ 'WHERE',
802
+ 'WINDOW',
803
+ 'WITH'
697
804
  ]
698
805
  }