@sap/cds-compiler 4.0.2 → 4.2.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/CHANGELOG.md +200 -5
- package/bin/cdsc.js +18 -15
- package/doc/CHANGELOG_BETA.md +16 -0
- package/doc/CHANGELOG_DEPRECATED.md +15 -0
- package/lib/api/main.js +33 -13
- package/lib/api/options.js +2 -2
- package/lib/api/validate.js +25 -25
- package/lib/base/location.js +6 -7
- package/lib/base/message-registry.js +123 -42
- package/lib/base/messages.js +18 -10
- package/lib/base/model.js +43 -10
- package/lib/checks/defaultValues.js +6 -6
- package/lib/checks/elements.js +11 -10
- package/lib/checks/foreignKeys.js +0 -5
- package/lib/checks/manyNavigations.js +33 -0
- package/lib/checks/onConditions.js +22 -14
- package/lib/checks/queryNoDbArtifacts.js +132 -73
- package/lib/checks/selectItems.js +4 -55
- package/lib/checks/sql-snippets.js +15 -4
- package/lib/checks/types.js +3 -3
- package/lib/checks/utils.js +4 -3
- package/lib/checks/validator.js +3 -1
- package/lib/compiler/.eslintrc.json +2 -1
- package/lib/compiler/assert-consistency.js +71 -40
- package/lib/compiler/base.js +7 -2
- package/lib/compiler/builtins.js +40 -41
- package/lib/compiler/checks.js +415 -367
- package/lib/compiler/classes.js +62 -0
- package/lib/compiler/cycle-detector.js +9 -9
- package/lib/compiler/define.js +124 -90
- package/lib/compiler/extend.js +115 -88
- package/lib/compiler/finalize-parse-cdl.js +26 -25
- package/lib/compiler/generate.js +57 -49
- package/lib/compiler/index.js +56 -56
- package/lib/compiler/kick-start.js +10 -7
- package/lib/compiler/moduleLayers.js +1 -1
- package/lib/compiler/populate.js +180 -144
- package/lib/compiler/propagator.js +10 -9
- package/lib/compiler/resolve.js +321 -246
- package/lib/compiler/shared.js +812 -433
- package/lib/compiler/tweak-assocs.js +114 -50
- package/lib/compiler/utils.js +241 -46
- package/lib/edm/.eslintrc.json +40 -1
- package/lib/edm/annotations/genericTranslation.js +721 -707
- package/lib/edm/annotations/preprocessAnnotations.js +88 -77
- package/lib/edm/csn2edm.js +389 -378
- package/lib/edm/edm.js +679 -770
- package/lib/edm/edmAnnoPreprocessor.js +132 -146
- package/lib/edm/edmInboundChecks.js +29 -27
- package/lib/edm/edmPreprocessor.js +689 -648
- package/lib/edm/edmUtils.js +279 -300
- package/lib/gen/Dictionary.json +34 -10
- package/lib/gen/language.checksum +1 -1
- package/lib/gen/language.interp +1 -1
- package/lib/gen/languageParser.js +2857 -2856
- package/lib/json/from-csn.js +77 -51
- package/lib/json/to-csn.js +15 -15
- package/lib/language/antlrParser.js +2 -1
- package/lib/language/genericAntlrParser.js +52 -43
- package/lib/language/language.g4 +61 -64
- package/lib/language/multiLineStringParser.js +2 -0
- package/lib/main.d.ts +65 -0
- package/lib/model/csnRefs.js +37 -19
- package/lib/model/csnUtils.js +51 -18
- package/lib/model/revealInternalProperties.js +30 -22
- package/lib/modelCompare/compare.js +149 -41
- package/lib/modelCompare/utils/filter.js +55 -25
- package/lib/optionProcessor.js +21 -9
- package/lib/render/manageConstraints.js +20 -17
- package/lib/render/toCdl.js +63 -23
- package/lib/render/toHdbcds.js +2 -2
- package/lib/render/toRename.js +4 -9
- package/lib/render/toSql.js +82 -35
- package/lib/render/utils/common.js +11 -9
- package/lib/render/utils/unique.js +52 -0
- package/lib/transform/db/applyTransformations.js +62 -21
- package/lib/transform/db/assertUnique.js +7 -8
- package/lib/transform/db/associations.js +2 -2
- package/lib/transform/db/cdsPersistence.js +9 -9
- package/lib/transform/db/constraints.js +47 -17
- package/lib/transform/db/expansion.js +138 -68
- package/lib/transform/db/flattening.js +98 -30
- package/lib/transform/db/rewriteCalculatedElements.js +20 -14
- package/lib/transform/db/temporal.js +1 -1
- package/lib/transform/db/transformExists.js +8 -7
- package/lib/transform/db/views.js +73 -33
- package/lib/transform/draft/db.js +11 -9
- package/lib/transform/draft/odata.js +1 -1
- package/lib/transform/{forOdataNew.js → forOdata.js} +10 -7
- package/lib/transform/forRelationalDB.js +148 -136
- package/lib/transform/localized.js +92 -54
- package/lib/transform/odata/toFinalBaseType.js +3 -3
- package/lib/transform/{transformUtilsNew.js → transformUtils.js} +13 -111
- package/lib/transform/translateAssocsToJoins.js +14 -28
- package/lib/utils/file.js +7 -7
- package/lib/utils/moduleResolve.js +210 -121
- package/lib/utils/objectUtils.js +1 -1
- package/package.json +5 -5
- package/share/messages/check-proper-type-of.md +1 -1
- package/share/messages/{check-proper-type.md → def-missing-type.md} +3 -5
- package/share/messages/message-explanations.json +1 -1
|
@@ -20,7 +20,7 @@ const {
|
|
|
20
20
|
withAssociation,
|
|
21
21
|
viewFromPrimary,
|
|
22
22
|
} = require('./utils');
|
|
23
|
-
const $inferred = Symbol.for('cds.$inferred');
|
|
23
|
+
const $inferred = Symbol.for( 'cds.$inferred' );
|
|
24
24
|
// const { refString } = require( '../base/messages')
|
|
25
25
|
|
|
26
26
|
// Note that propagation here is also used for deep-copying (function `onlyViaParent`)
|
|
@@ -104,7 +104,7 @@ function propagate( model ) {
|
|
|
104
104
|
if (target._calcOrigin?._origin && target.value?._artifact) {
|
|
105
105
|
chain.push({ target, source: target.value._artifact });
|
|
106
106
|
if (checkAndSetStatus( target.value._artifact ))
|
|
107
|
-
news.push(target.value._artifact);
|
|
107
|
+
news.push( target.value._artifact );
|
|
108
108
|
|
|
109
109
|
if (target.value?._artifact.$inferred !== 'include') {
|
|
110
110
|
// If the referred to element is not inferred, it is a new one and not the original.
|
|
@@ -159,7 +159,8 @@ function propagate( model ) {
|
|
|
159
159
|
(!target.type.$inferred || target.type.$inferred === 'cast');
|
|
160
160
|
const keys = Object.keys( source );
|
|
161
161
|
for (const prop of keys) {
|
|
162
|
-
|
|
162
|
+
// TODO: warning with competing props from multi-includes
|
|
163
|
+
if (target[prop] !== undefined || source[prop] === undefined)
|
|
163
164
|
continue;
|
|
164
165
|
const transformer = props[prop] || props[prop.charAt(0)];
|
|
165
166
|
if (transformer)
|
|
@@ -174,9 +175,9 @@ function propagate( model ) {
|
|
|
174
175
|
while (elem._parent.kind === 'element')
|
|
175
176
|
elem = elem._parent;
|
|
176
177
|
if (elem !== source) {
|
|
177
|
-
if (
|
|
178
|
+
if (target.notNull === undefined && elem.notNull !== undefined)
|
|
178
179
|
props.notNull( 'notNull', target, elem );
|
|
179
|
-
if (
|
|
180
|
+
if (target.virtual === undefined && elem.virtual !== undefined)
|
|
180
181
|
props.virtual( 'virtual', target, elem );
|
|
181
182
|
}
|
|
182
183
|
}
|
|
@@ -241,11 +242,11 @@ function propagate( model ) {
|
|
|
241
242
|
target.location ||
|
|
242
243
|
target._outer && target._outer.location;
|
|
243
244
|
const dict = source[prop];
|
|
244
|
-
target[prop] = Object.create(null); // also propagate empty elements
|
|
245
|
+
target[prop] = Object.create( null ); // also propagate empty elements
|
|
245
246
|
for (const name in dict) {
|
|
246
247
|
const member = linkToOrigin( dict[name], name, target, prop, location );
|
|
247
248
|
member.$inferred = 'proxy';
|
|
248
|
-
setEffectiveType(member, dict[name]);
|
|
249
|
+
setEffectiveType( member, dict[name] );
|
|
249
250
|
}
|
|
250
251
|
target[prop][$inferred] = 'prop';
|
|
251
252
|
}
|
|
@@ -285,7 +286,7 @@ function propagate( model ) {
|
|
|
285
286
|
if (target.kind === 'param' && source.kind === 'entity')
|
|
286
287
|
return; // Don't propagate from entity types to parameters (+ return type).
|
|
287
288
|
if (target.kind)
|
|
288
|
-
always(prop, target, source); // not in 'items'
|
|
289
|
+
always( prop, target, source ); // not in 'items'
|
|
289
290
|
}
|
|
290
291
|
|
|
291
292
|
function notNull( prop, target, source, viaType ) {
|
|
@@ -378,7 +379,7 @@ function checkAndSetStatus( art ) {
|
|
|
378
379
|
|
|
379
380
|
function setEffectiveType( target, source ) {
|
|
380
381
|
if (source._effectiveType !== undefined)
|
|
381
|
-
setLink( target, '_effectiveType', source._effectiveType);
|
|
382
|
+
setLink( target, '_effectiveType', source._effectiveType );
|
|
382
383
|
}
|
|
383
384
|
|
|
384
385
|
module.exports = {
|