@abaplint/cli 2.119.36 → 2.119.38

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 (2) hide show
  1. package/build/cli.js +493 -77
  2. package/package.json +2 -2
package/build/cli.js CHANGED
@@ -213,6 +213,15 @@ class Lexer {
213
213
  }
214
214
  }
215
215
  }
216
+ if (tok === undefined && this.m === ModeNormal && s.charAt(0) === "\\") {
217
+ const adj = this.stream.nextChar() === "" ? 1 : 0;
218
+ const prevOffset = this.stream.getOffset() - s.length - adj;
219
+ const prevChar = prevOffset >= 0 ? this.stream.getRaw().substr(prevOffset, 1) : "";
220
+ const whiteBeforeBackslash = prevChar === " " || prevChar === "\n" || prevChar === "\t" || prevChar === ":";
221
+ if (!whiteBeforeBackslash) {
222
+ tok = new tokens_1.AssociationName(pos, s);
223
+ }
224
+ }
216
225
  if (tok === undefined) {
217
226
  tok = new tokens_1.Identifier(pos, s);
218
227
  }
@@ -234,6 +243,7 @@ class Lexer {
234
243
  splits[")"] = true;
235
244
  splits["["] = true;
236
245
  splits["]"] = true;
246
+ splits["\\"] = true;
237
247
  splits["\t"] = true;
238
248
  splits["\n"] = true;
239
249
  const bufs = {};
@@ -532,6 +542,24 @@ exports.AbstractToken = AbstractToken;
532
542
 
533
543
  /***/ },
534
544
 
545
+ /***/ "../core/build/src/abap/1_lexer/tokens/association_name.js"
546
+ /*!*****************************************************************!*\
547
+ !*** ../core/build/src/abap/1_lexer/tokens/association_name.js ***!
548
+ \*****************************************************************/
549
+ (__unused_webpack_module, exports, __webpack_require__) {
550
+
551
+ "use strict";
552
+
553
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
554
+ exports.AssociationName = void 0;
555
+ const abstract_token_1 = __webpack_require__(/*! ./abstract_token */ "../core/build/src/abap/1_lexer/tokens/abstract_token.js");
556
+ class AssociationName extends abstract_token_1.AbstractToken {
557
+ }
558
+ exports.AssociationName = AssociationName;
559
+ //# sourceMappingURL=association_name.js.map
560
+
561
+ /***/ },
562
+
535
563
  /***/ "../core/build/src/abap/1_lexer/tokens/at.js"
536
564
  /*!***************************************************!*\
537
565
  !*** ../core/build/src/abap/1_lexer/tokens/at.js ***!
@@ -821,6 +849,7 @@ __exportStar(__webpack_require__(/*! ./string_template_middle */ "../core/build/
821
849
  __exportStar(__webpack_require__(/*! ./colon */ "../core/build/src/abap/1_lexer/tokens/colon.js"), exports);
822
850
  __exportStar(__webpack_require__(/*! ./comment */ "../core/build/src/abap/1_lexer/tokens/comment.js"), exports);
823
851
  __exportStar(__webpack_require__(/*! ./identifier */ "../core/build/src/abap/1_lexer/tokens/identifier.js"), exports);
852
+ __exportStar(__webpack_require__(/*! ./association_name */ "../core/build/src/abap/1_lexer/tokens/association_name.js"), exports);
824
853
  __exportStar(__webpack_require__(/*! ./pragma */ "../core/build/src/abap/1_lexer/tokens/pragma.js"), exports);
825
854
  __exportStar(__webpack_require__(/*! ./punctuation */ "../core/build/src/abap/1_lexer/tokens/punctuation.js"), exports);
826
855
  //# sourceMappingURL=index.js.map
@@ -1595,11 +1624,17 @@ function containsAggregation(children) {
1595
1624
  continue;
1596
1625
  }
1597
1626
  if (child.get() instanceof Expressions.SQLAggregation) {
1598
- return true;
1627
+ if (child.findDirectExpression(Expressions.SQLOver) === undefined) {
1628
+ return true;
1629
+ }
1630
+ continue;
1599
1631
  }
1600
1632
  if (child.get() instanceof Expressions.SQLSetOpGroup) {
1601
1633
  continue;
1602
1634
  }
1635
+ if (child.get() instanceof Expressions.SQLFrom) {
1636
+ continue;
1637
+ }
1603
1638
  if (containsAggregation(child.getChildren())) {
1604
1639
  return true;
1605
1640
  }
@@ -3233,27 +3268,6 @@ exports.AssignSource = AssignSource;
3233
3268
 
3234
3269
  /***/ },
3235
3270
 
3236
- /***/ "../core/build/src/abap/2_statements/expressions/association_name.js"
3237
- /*!***************************************************************************!*\
3238
- !*** ../core/build/src/abap/2_statements/expressions/association_name.js ***!
3239
- \***************************************************************************/
3240
- (__unused_webpack_module, exports, __webpack_require__) {
3241
-
3242
- "use strict";
3243
-
3244
- Object.defineProperty(exports, "__esModule", ({ value: true }));
3245
- exports.AssociationName = void 0;
3246
- const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
3247
- class AssociationName extends combi_1.Expression {
3248
- getRunnable() {
3249
- return (0, combi_1.regex)(/^(\\_[\w]+)+$/);
3250
- }
3251
- }
3252
- exports.AssociationName = AssociationName;
3253
- //# sourceMappingURL=association_name.js.map
3254
-
3255
- /***/ },
3256
-
3257
3271
  /***/ "../core/build/src/abap/2_statements/expressions/attribute_chain.js"
3258
3272
  /*!**************************************************************************!*\
3259
3273
  !*** ../core/build/src/abap/2_statements/expressions/attribute_chain.js ***!
@@ -4294,6 +4308,28 @@ exports.Dynamic = Dynamic;
4294
4308
 
4295
4309
  /***/ },
4296
4310
 
4311
+ /***/ "../core/build/src/abap/2_statements/expressions/eml_entity_path.js"
4312
+ /*!**************************************************************************!*\
4313
+ !*** ../core/build/src/abap/2_statements/expressions/eml_entity_path.js ***!
4314
+ \**************************************************************************/
4315
+ (__unused_webpack_module, exports, __webpack_require__) {
4316
+
4317
+ "use strict";
4318
+
4319
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
4320
+ exports.EMLEntityPath = void 0;
4321
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
4322
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
4323
+ class EMLEntityPath extends combi_1.Expression {
4324
+ getRunnable() {
4325
+ return (0, combi_1.plusPrio)((0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.AssociationName), (0, combi_1.regex)(/^\\[\w]+$/)));
4326
+ }
4327
+ }
4328
+ exports.EMLEntityPath = EMLEntityPath;
4329
+ //# sourceMappingURL=eml_entity_path.js.map
4330
+
4331
+ /***/ },
4332
+
4297
4333
  /***/ "../core/build/src/abap/2_statements/expressions/entity_association.js"
4298
4334
  /*!*****************************************************************************!*\
4299
4335
  !*** ../core/build/src/abap/2_statements/expressions/entity_association.js ***!
@@ -4305,9 +4341,10 @@ exports.Dynamic = Dynamic;
4305
4341
  Object.defineProperty(exports, "__esModule", ({ value: true }));
4306
4342
  exports.EntityAssociation = void 0;
4307
4343
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
4344
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
4308
4345
  class EntityAssociation extends combi_1.Expression {
4309
4346
  getRunnable() {
4310
- return (0, combi_1.regex)(/^[\/\w]+(\\_|\\\\)[\/\_\w\\~]+$/);
4347
+ return (0, combi_1.seq)((0, combi_1.regex)(/^[\/\w]+$/), (0, combi_1.plusPrio)((0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.AssociationName), (0, combi_1.regex)(/^\\[\w]+$/))));
4311
4348
  }
4312
4349
  }
4313
4350
  exports.EntityAssociation = EntityAssociation;
@@ -5049,7 +5086,7 @@ __exportStar(__webpack_require__(/*! ./arith_operator */ "../core/build/src/abap
5049
5086
  __exportStar(__webpack_require__(/*! ./arrow_or_dash */ "../core/build/src/abap/2_statements/expressions/arrow_or_dash.js"), exports);
5050
5087
  __exportStar(__webpack_require__(/*! ./arrow */ "../core/build/src/abap/2_statements/expressions/arrow.js"), exports);
5051
5088
  __exportStar(__webpack_require__(/*! ./assign_source */ "../core/build/src/abap/2_statements/expressions/assign_source.js"), exports);
5052
- __exportStar(__webpack_require__(/*! ./association_name */ "../core/build/src/abap/2_statements/expressions/association_name.js"), exports);
5089
+ __exportStar(__webpack_require__(/*! ./eml_entity_path */ "../core/build/src/abap/2_statements/expressions/eml_entity_path.js"), exports);
5053
5090
  __exportStar(__webpack_require__(/*! ./attribute_chain */ "../core/build/src/abap/2_statements/expressions/attribute_chain.js"), exports);
5054
5091
  __exportStar(__webpack_require__(/*! ./attribute_name */ "../core/build/src/abap/2_statements/expressions/attribute_name.js"), exports);
5055
5092
  __exportStar(__webpack_require__(/*! ./behavior_definition_name */ "../core/build/src/abap/2_statements/expressions/behavior_definition_name.js"), exports);
@@ -5188,6 +5225,11 @@ __exportStar(__webpack_require__(/*! ./reduce_body */ "../core/build/src/abap/2_
5188
5225
  __exportStar(__webpack_require__(/*! ./reduce_next */ "../core/build/src/abap/2_statements/expressions/reduce_next.js"), exports);
5189
5226
  __exportStar(__webpack_require__(/*! ./report_name */ "../core/build/src/abap/2_statements/expressions/report_name.js"), exports);
5190
5227
  __exportStar(__webpack_require__(/*! ./select_cte */ "../core/build/src/abap/2_statements/expressions/select_cte.js"), exports);
5228
+ __exportStar(__webpack_require__(/*! ./sql_cte_associations */ "../core/build/src/abap/2_statements/expressions/sql_cte_associations.js"), exports);
5229
+ __exportStar(__webpack_require__(/*! ./sql_cte_hierarchy */ "../core/build/src/abap/2_statements/expressions/sql_cte_hierarchy.js"), exports);
5230
+ __exportStar(__webpack_require__(/*! ./sql_hierarchy_source */ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_source.js"), exports);
5231
+ __exportStar(__webpack_require__(/*! ./sql_hierarchy_accessor */ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_accessor.js"), exports);
5232
+ __exportStar(__webpack_require__(/*! ./sql_hierarchy_aggregate */ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_aggregate.js"), exports);
5191
5233
  __exportStar(__webpack_require__(/*! ./select */ "../core/build/src/abap/2_statements/expressions/select.js"), exports);
5192
5234
  __exportStar(__webpack_require__(/*! ./simple_field_chain */ "../core/build/src/abap/2_statements/expressions/simple_field_chain.js"), exports);
5193
5235
  __exportStar(__webpack_require__(/*! ./simple_field_chain2 */ "../core/build/src/abap/2_statements/expressions/simple_field_chain2.js"), exports);
@@ -5202,6 +5244,9 @@ __exportStar(__webpack_require__(/*! ./source_field_symbol */ "../core/build/src
5202
5244
  __exportStar(__webpack_require__(/*! ./source_field */ "../core/build/src/abap/2_statements/expressions/source_field.js"), exports);
5203
5245
  __exportStar(__webpack_require__(/*! ./source */ "../core/build/src/abap/2_statements/expressions/source.js"), exports);
5204
5246
  __exportStar(__webpack_require__(/*! ./sql_aggregation */ "../core/build/src/abap/2_statements/expressions/sql_aggregation.js"), exports);
5247
+ __exportStar(__webpack_require__(/*! ./sql_association_entry */ "../core/build/src/abap/2_statements/expressions/sql_association_entry.js"), exports);
5248
+ __exportStar(__webpack_require__(/*! ./sql_associations_list */ "../core/build/src/abap/2_statements/expressions/sql_associations_list.js"), exports);
5249
+ __exportStar(__webpack_require__(/*! ./sql_path_segment */ "../core/build/src/abap/2_statements/expressions/sql_path_segment.js"), exports);
5205
5250
  __exportStar(__webpack_require__(/*! ./sql_alias_field */ "../core/build/src/abap/2_statements/expressions/sql_alias_field.js"), exports);
5206
5251
  __exportStar(__webpack_require__(/*! ./sql_arithmetic_operator */ "../core/build/src/abap/2_statements/expressions/sql_arithmetic_operator.js"), exports);
5207
5252
  __exportStar(__webpack_require__(/*! ./sql_arithmetics */ "../core/build/src/abap/2_statements/expressions/sql_arithmetics.js"), exports);
@@ -5240,7 +5285,10 @@ __exportStar(__webpack_require__(/*! ./sql_package_size */ "../core/build/src/ab
5240
5285
  __exportStar(__webpack_require__(/*! ./sql_order_by */ "../core/build/src/abap/2_statements/expressions/sql_order_by.js"), exports);
5241
5286
  __exportStar(__webpack_require__(/*! ./sql_over */ "../core/build/src/abap/2_statements/expressions/sql_over.js"), exports);
5242
5287
  __exportStar(__webpack_require__(/*! ./sql_over */ "../core/build/src/abap/2_statements/expressions/sql_over.js"), exports);
5243
- __exportStar(__webpack_require__(/*! ./sql_path */ "../core/build/src/abap/2_statements/expressions/sql_path.js"), exports);
5288
+ __exportStar(__webpack_require__(/*! ./sql_path_cardinality */ "../core/build/src/abap/2_statements/expressions/sql_path_cardinality.js"), exports);
5289
+ __exportStar(__webpack_require__(/*! ./sql_path_for_column */ "../core/build/src/abap/2_statements/expressions/sql_path_for_column.js"), exports);
5290
+ __exportStar(__webpack_require__(/*! ./sql_path_for_entity */ "../core/build/src/abap/2_statements/expressions/sql_path_for_entity.js"), exports);
5291
+ __exportStar(__webpack_require__(/*! ./sql_path_join_type */ "../core/build/src/abap/2_statements/expressions/sql_path_join_type.js"), exports);
5244
5292
  __exportStar(__webpack_require__(/*! ./sql_privileged_access */ "../core/build/src/abap/2_statements/expressions/sql_privileged_access.js"), exports);
5245
5293
  __exportStar(__webpack_require__(/*! ./sql_set_op */ "../core/build/src/abap/2_statements/expressions/sql_set_op.js"), exports);
5246
5294
  __exportStar(__webpack_require__(/*! ./sql_set_op_group */ "../core/build/src/abap/2_statements/expressions/sql_set_op_group.js"), exports);
@@ -7441,6 +7489,58 @@ exports.SQLAsName = SQLAsName;
7441
7489
 
7442
7490
  /***/ },
7443
7491
 
7492
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_association_entry.js"
7493
+ /*!********************************************************************************!*\
7494
+ !*** ../core/build/src/abap/2_statements/expressions/sql_association_entry.js ***!
7495
+ \********************************************************************************/
7496
+ (__unused_webpack_module, exports, __webpack_require__) {
7497
+
7498
+ "use strict";
7499
+
7500
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
7501
+ exports.SQLAssociationEntry = void 0;
7502
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7503
+ const sql_as_name_1 = __webpack_require__(/*! ./sql_as_name */ "../core/build/src/abap/2_statements/expressions/sql_as_name.js");
7504
+ const sql_path_for_entity_1 = __webpack_require__(/*! ./sql_path_for_entity */ "../core/build/src/abap/2_statements/expressions/sql_path_for_entity.js");
7505
+ const with_name_1 = __webpack_require__(/*! ./with_name */ "../core/build/src/abap/2_statements/expressions/with_name.js");
7506
+ const database_table_1 = __webpack_require__(/*! ./database_table */ "../core/build/src/abap/2_statements/expressions/database_table.js");
7507
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7508
+ class SQLAssociationEntry extends combi_1.Expression {
7509
+ getRunnable() {
7510
+ const alias = (0, combi_1.seq)("AS", sql_as_name_1.SQLAsName);
7511
+ const redirected = (0, combi_1.seq)("REDIRECTED TO", with_name_1.WithName, "VIA", database_table_1.DatabaseTable);
7512
+ return (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)(new sql_path_for_entity_1.SQLPathForEntity(), (0, combi_1.optPrio)(alias), (0, combi_1.optPrio)(redirected)));
7513
+ }
7514
+ }
7515
+ exports.SQLAssociationEntry = SQLAssociationEntry;
7516
+ //# sourceMappingURL=sql_association_entry.js.map
7517
+
7518
+ /***/ },
7519
+
7520
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_associations_list.js"
7521
+ /*!********************************************************************************!*\
7522
+ !*** ../core/build/src/abap/2_statements/expressions/sql_associations_list.js ***!
7523
+ \********************************************************************************/
7524
+ (__unused_webpack_module, exports, __webpack_require__) {
7525
+
7526
+ "use strict";
7527
+
7528
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
7529
+ exports.SQLAssociationsList = void 0;
7530
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7531
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
7532
+ const sql_association_entry_1 = __webpack_require__(/*! ./sql_association_entry */ "../core/build/src/abap/2_statements/expressions/sql_association_entry.js");
7533
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7534
+ class SQLAssociationsList extends combi_1.Expression {
7535
+ getRunnable() {
7536
+ return (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), new sql_association_entry_1.SQLAssociationEntry(), (0, combi_1.star)((0, combi_1.seq)(",", new sql_association_entry_1.SQLAssociationEntry())), (0, combi_1.tok)(tokens_1.WParenRightW)));
7537
+ }
7538
+ }
7539
+ exports.SQLAssociationsList = SQLAssociationsList;
7540
+ //# sourceMappingURL=sql_associations_list.js.map
7541
+
7542
+ /***/ },
7543
+
7444
7544
  /***/ "../core/build/src/abap/2_statements/expressions/sql_bypassing_buffer.js"
7445
7545
  /*!*******************************************************************************!*\
7446
7546
  !*** ../core/build/src/abap/2_statements/expressions/sql_bypassing_buffer.js ***!
@@ -7483,7 +7583,7 @@ const sql_source_1 = __webpack_require__(/*! ./sql_source */ "../core/build/src/
7483
7583
  class SQLCase extends combi_1.Expression {
7484
7584
  getRunnable() {
7485
7585
  const abap = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.SimpleFieldChain2);
7486
- const field = (0, combi_1.altPrio)(_1.SQLAggregation, SQLCase, _1.SQLFunction, _1.SQLPath, sql_field_name_1.SQLFieldName, constant_1.Constant);
7586
+ const field = (0, combi_1.altPrio)(_1.SQLAggregation, SQLCase, _1.SQLFunction, _1.SQLPathForColumn, sql_field_name_1.SQLFieldName, constant_1.Constant);
7487
7587
  const sub = (0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenLeftW)), field, (0, combi_1.optPrio)((0, combi_1.tok)(tokens_1.WParenRightW)));
7488
7588
  const source = (0, combi_1.altPrio)(SQLCase, _1.SQLAggregation, _1.SQLFunction, sql_field_name_1.SQLFieldName, sql_source_1.SQLSource, constant_1.Constant);
7489
7589
  const parenSource = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), source, (0, combi_1.tok)(tokens_1.WParenRightW));
@@ -7515,7 +7615,7 @@ const field_chain_1 = __webpack_require__(/*! ./field_chain */ "../core/build/sr
7515
7615
  class SQLCDSParameters extends combi_1.Expression {
7516
7616
  getRunnable() {
7517
7617
  const param = (0, combi_1.seq)(_1.Field, "=", (0, combi_1.alt)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), field_chain_1.FieldChain), _1.Constant));
7518
- return (0, combi_1.seq)("(", param, (0, combi_1.starPrio)((0, combi_1.seq)(",", param)), ")");
7618
+ return (0, combi_1.seq)((0, combi_1.alt)((0, combi_1.tok)(tokens_1.ParenLeft), (0, combi_1.tok)(tokens_1.ParenLeftW)), param, (0, combi_1.starPrio)((0, combi_1.seq)(",", param)), (0, combi_1.alt)((0, combi_1.tok)(tokens_1.WParenRightW), (0, combi_1.tok)(tokens_1.WParenRight)));
7519
7619
  }
7520
7620
  }
7521
7621
  exports.SQLCDSParameters = SQLCDSParameters;
@@ -7579,7 +7679,9 @@ class SQLCompare extends combi_1.Expression {
7579
7679
  const arith = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/"), _1.SQLFieldName)), version_1.Version.OpenABAP);
7580
7680
  const paren = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), _1.Source, (0, combi_1.tok)(tokens_1.WParenRightW));
7581
7681
  const at = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.altPrio)(_1.SimpleSource3, paren)), version_1.Version.OpenABAP);
7582
- const rett = (0, combi_1.seq)((0, combi_1.altPrio)(_1.SQLCase, _1.SQLAggregation, _1.SQLFunction, _1.ConstantString, (0, combi_1.seq)((0, combi_1.altPrio)(_1.SQLPath, _1.SQLFieldName), (0, combi_1.optPrio)(arith)), at), (0, combi_1.altPrio)((0, combi_1.seq)(_1.SQLCompareOperator, (0, combi_1.altPrio)(sub, _1.SQLCase, _1.SQLAggregation, _1.SQLFunction, (0, combi_1.seq)(source, (0, combi_1.optPrio)(arith)))), (0, combi_1.seq)((0, combi_1.optPrio)("NOT"), (0, combi_1.altPrio)(_1.SQLIn, like, between)), nul));
7682
+ const lhs = (0, combi_1.altPrio)(_1.SQLCase, _1.SQLAggregation, _1.SQLFunction, _1.ConstantString, (0, combi_1.seq)((0, combi_1.altPrio)(_1.SQLPathForColumn, _1.SQLFieldName), (0, combi_1.optPrio)(arith)), at);
7683
+ const rhs = (0, combi_1.altPrio)((0, combi_1.seq)(_1.SQLCompareOperator, (0, combi_1.altPrio)(sub, _1.SQLCase, _1.SQLAggregation, _1.SQLFunction, (0, combi_1.seq)(source, (0, combi_1.optPrio)(arith)))), (0, combi_1.seq)((0, combi_1.optPrio)("NOT"), (0, combi_1.altPrio)(_1.SQLIn, like, between)), nul);
7684
+ const rett = (0, combi_1.seq)(lhs, rhs);
7583
7685
  const exists = (0, combi_1.seq)("EXISTS", (0, combi_1.altPrio)(subSelect, simpleSubSelect));
7584
7686
  return (0, combi_1.altPrio)(exists, _1.Dynamic, rett);
7585
7687
  }
@@ -7638,6 +7740,54 @@ exports.SQLCond = SQLCond;
7638
7740
 
7639
7741
  /***/ },
7640
7742
 
7743
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_cte_associations.js"
7744
+ /*!*******************************************************************************!*\
7745
+ !*** ../core/build/src/abap/2_statements/expressions/sql_cte_associations.js ***!
7746
+ \*******************************************************************************/
7747
+ (__unused_webpack_module, exports, __webpack_require__) {
7748
+
7749
+ "use strict";
7750
+
7751
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
7752
+ exports.SQLCTEAssociations = void 0;
7753
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7754
+ const sql_associations_list_1 = __webpack_require__(/*! ./sql_associations_list */ "../core/build/src/abap/2_statements/expressions/sql_associations_list.js");
7755
+ const dynamic_1 = __webpack_require__(/*! ./dynamic */ "../core/build/src/abap/2_statements/expressions/dynamic.js");
7756
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7757
+ class SQLCTEAssociations extends combi_1.Expression {
7758
+ getRunnable() {
7759
+ return (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("ASSOCIATIONS", (0, combi_1.altPrio)(new sql_associations_list_1.SQLAssociationsList(), dynamic_1.Dynamic)));
7760
+ }
7761
+ }
7762
+ exports.SQLCTEAssociations = SQLCTEAssociations;
7763
+ //# sourceMappingURL=sql_cte_associations.js.map
7764
+
7765
+ /***/ },
7766
+
7767
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_cte_hierarchy.js"
7768
+ /*!****************************************************************************!*\
7769
+ !*** ../core/build/src/abap/2_statements/expressions/sql_cte_hierarchy.js ***!
7770
+ \****************************************************************************/
7771
+ (__unused_webpack_module, exports, __webpack_require__) {
7772
+
7773
+ "use strict";
7774
+
7775
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
7776
+ exports.SQLCTEHierarchy = void 0;
7777
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7778
+ const sql_as_name_1 = __webpack_require__(/*! ./sql_as_name */ "../core/build/src/abap/2_statements/expressions/sql_as_name.js");
7779
+ const sql_cte_associations_1 = __webpack_require__(/*! ./sql_cte_associations */ "../core/build/src/abap/2_statements/expressions/sql_cte_associations.js");
7780
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7781
+ class SQLCTEHierarchy extends combi_1.Expression {
7782
+ getRunnable() {
7783
+ return (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("HIERARCHY", sql_as_name_1.SQLAsName, (0, combi_1.optPrio)((0, combi_1.seq)("WITH", sql_cte_associations_1.SQLCTEAssociations))));
7784
+ }
7785
+ }
7786
+ exports.SQLCTEHierarchy = SQLCTEHierarchy;
7787
+ //# sourceMappingURL=sql_cte_hierarchy.js.map
7788
+
7789
+ /***/ },
7790
+
7641
7791
  /***/ "../core/build/src/abap/2_statements/expressions/sql_field.js"
7642
7792
  /*!********************************************************************!*\
7643
7793
  !*** ../core/build/src/abap/2_statements/expressions/sql_field.js ***!
@@ -7653,14 +7803,14 @@ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/exp
7653
7803
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7654
7804
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
7655
7805
  const sql_function_1 = __webpack_require__(/*! ./sql_function */ "../core/build/src/abap/2_statements/expressions/sql_function.js");
7656
- const sql_path_1 = __webpack_require__(/*! ./sql_path */ "../core/build/src/abap/2_statements/expressions/sql_path.js");
7806
+ const sql_path_for_column_1 = __webpack_require__(/*! ./sql_path_for_column */ "../core/build/src/abap/2_statements/expressions/sql_path_for_column.js");
7657
7807
  class SQLField extends combi_1.Expression {
7658
7808
  getRunnable() {
7659
7809
  const atParen = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), _1.SimpleFieldChain2, (0, combi_1.tok)(tokens_1.WParenRightW));
7660
7810
  const abap = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), (0, combi_1.altPrio)(_1.SimpleFieldChain2, atParen)), version_1.Version.OpenABAP);
7661
7811
  const as = (0, combi_1.seq)("AS", _1.SQLAsName);
7662
7812
  const parenFieldName = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), _1.SQLFieldName, (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WParenRightW), (0, combi_1.tok)(tokens_1.WParenRight)));
7663
- const fieldNoAgg = (0, combi_1.altPrio)(_1.SQLCase, sql_function_1.SQLFunction, sql_path_1.SQLPath, _1.SQLFieldName, abap, _1.Constant, parenFieldName);
7813
+ const fieldNoAgg = (0, combi_1.altPrio)(_1.SQLCase, sql_function_1.SQLFunction, sql_path_for_column_1.SQLPathForColumn, _1.SQLFieldName, abap, _1.Constant, parenFieldName);
7664
7814
  const field = (0, combi_1.altPrio)(_1.SQLAggregation, fieldNoAgg);
7665
7815
  const parenField = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), field, (0, combi_1.tok)(tokens_1.WParenRightW));
7666
7816
  const parenFieldNoAgg = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), fieldNoAgg, (0, combi_1.tok)(tokens_1.WParenRightW));
@@ -7671,7 +7821,6 @@ class SQLField extends combi_1.Expression {
7671
7821
  const arith = (0, combi_1.altPrio)(arithWithAgg, arithNoAgg);
7672
7822
  const arithSequence = (0, combi_1.seq)((0, combi_1.optPrio)("-"), field, (0, combi_1.optPrio)(arith));
7673
7823
  const parenArithSequence = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.optPrio)("-"), arithSequence, (0, combi_1.tok)(tokens_1.WParenRightW));
7674
- // allows (a-b)*(c-d) — paren groups as operands, defined after parenArithSequence
7675
7824
  const subExtWithAgg = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.altPrio)(parenArithSequence, parenField, field)));
7676
7825
  const subExtNoAgg = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.altPrio)(parenArithSequence, parenFieldNoAgg, fieldNoAgg)));
7677
7826
  const arithExt = (0, combi_1.altPrio)((0, combi_1.ver)(version_1.Version.v754, subExtWithAgg), (0, combi_1.ver)(version_1.Version.v740sp05, subExtNoAgg));
@@ -7751,7 +7900,7 @@ exports.SQLFieldListLoop = void 0;
7751
7900
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7752
7901
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
7753
7902
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7754
- const sql_path_1 = __webpack_require__(/*! ./sql_path */ "../core/build/src/abap/2_statements/expressions/sql_path.js");
7903
+ const sql_path_for_column_1 = __webpack_require__(/*! ./sql_path_for_column */ "../core/build/src/abap/2_statements/expressions/sql_path_for_column.js");
7755
7904
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
7756
7905
  // loop must include one field from the database table
7757
7906
  class SQLFieldListLoop extends combi_1.Expression {
@@ -7760,7 +7909,7 @@ class SQLFieldListLoop extends combi_1.Expression {
7760
7909
  const as = (0, combi_1.seq)("AS", _1.SQLAsName);
7761
7910
  const someField = (0, combi_1.seq)(_1.SQLField, comma);
7762
7911
  const abap = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.SimpleFieldChain2), version_1.Version.OpenABAP);
7763
- const fieldList = (0, combi_1.seq)((0, combi_1.star)(someField), (0, combi_1.alt)(_1.SQLFieldName, abap, sql_path_1.SQLPath, _1.Constant), (0, combi_1.optPrio)(as), comma, (0, combi_1.star)(someField));
7912
+ const fieldList = (0, combi_1.seq)((0, combi_1.star)(someField), (0, combi_1.alt)(_1.SQLFieldName, abap, sql_path_for_column_1.SQLPathForColumn, _1.Constant), (0, combi_1.optPrio)(as), comma, (0, combi_1.star)(someField));
7764
7913
  const fields = (0, combi_1.alt)("*", _1.Dynamic, fieldList);
7765
7914
  return fields;
7766
7915
  }
@@ -7783,14 +7932,14 @@ exports.SQLFieldListLoopGreedy = void 0;
7783
7932
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7784
7933
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
7785
7934
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7786
- const sql_path_1 = __webpack_require__(/*! ./sql_path */ "../core/build/src/abap/2_statements/expressions/sql_path.js");
7935
+ const sql_path_for_column_1 = __webpack_require__(/*! ./sql_path_for_column */ "../core/build/src/abap/2_statements/expressions/sql_path_for_column.js");
7787
7936
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
7788
7937
  class SQLFieldListLoopGreedy extends combi_1.Expression {
7789
7938
  getRunnable() {
7790
7939
  const comma = (0, combi_1.opt)((0, combi_1.ver)(version_1.Version.v740sp05, ",", version_1.Version.OpenABAP));
7791
7940
  const as = (0, combi_1.seq)("AS", _1.SQLAsName);
7792
7941
  const abap = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.SimpleFieldChain2), version_1.Version.OpenABAP);
7793
- const entry = (0, combi_1.seq)((0, combi_1.altPrio)(_1.SQLField, abap, sql_path_1.SQLPath, _1.SQLFieldName, _1.Constant), (0, combi_1.optPrio)(as), comma);
7942
+ const entry = (0, combi_1.seq)((0, combi_1.altPrio)(_1.SQLField, abap, sql_path_for_column_1.SQLPathForColumn, _1.SQLFieldName, _1.Constant), (0, combi_1.optPrio)(as), comma);
7794
7943
  const fieldList = (0, combi_1.plusPrio)(entry);
7795
7944
  return (0, combi_1.altPrio)("*", _1.Dynamic, fieldList);
7796
7945
  }
@@ -7939,13 +8088,17 @@ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/exp
7939
8088
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7940
8089
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
7941
8090
  const with_name_1 = __webpack_require__(/*! ./with_name */ "../core/build/src/abap/2_statements/expressions/with_name.js");
8091
+ const sql_path_for_entity_1 = __webpack_require__(/*! ./sql_path_for_entity */ "../core/build/src/abap/2_statements/expressions/sql_path_for_entity.js");
8092
+ const sql_hierarchy_source_1 = __webpack_require__(/*! ./sql_hierarchy_source */ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_source.js");
8093
+ const sql_hierarchy_accessor_1 = __webpack_require__(/*! ./sql_hierarchy_accessor */ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_accessor.js");
8094
+ const sql_hierarchy_aggregate_1 = __webpack_require__(/*! ./sql_hierarchy_aggregate */ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_aggregate.js");
7942
8095
  class SQLFromSource extends combi_1.Expression {
7943
8096
  getRunnable() {
7944
8097
  // https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abennews-752-open_sql.htm#!ABAP_MODIFICATION_1@1@
7945
8098
  const tab = (0, combi_1.ver)(version_1.Version.v752, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.FieldChain), version_1.Version.OpenABAP);
7946
8099
  const aas = (0, combi_1.seq)("AS", _1.SQLAsName);
7947
8100
  const privileged = (0, combi_1.ver)(version_1.Version.v752, (0, combi_1.seq)("WITH", _1.SQLPrivilegedAccess));
7948
- return (0, combi_1.seq)((0, combi_1.altPrio)(with_name_1.WithName, (0, combi_1.seq)(_1.DatabaseTable, (0, combi_1.optPrio)(_1.SQLCDSParameters)), tab), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(aas));
8101
+ return (0, combi_1.seq)((0, combi_1.altPrio)(new sql_hierarchy_aggregate_1.SQLHierarchyAggregate(), new sql_hierarchy_accessor_1.SQLHierarchyAccessor(), new sql_hierarchy_source_1.SQLHierarchySource(), (0, combi_1.seq)(with_name_1.WithName, (0, combi_1.optPrio)(new sql_path_for_entity_1.SQLPathForEntity())), (0, combi_1.seq)(_1.DatabaseTable, (0, combi_1.optPrio)(_1.SQLCDSParameters), (0, combi_1.optPrio)(new sql_path_for_entity_1.SQLPathForEntity())), tab), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(aas));
7949
8102
  }
7950
8103
  }
7951
8104
  exports.SQLFromSource = SQLFromSource;
@@ -8099,6 +8252,112 @@ exports.SQLHaving = SQLHaving;
8099
8252
 
8100
8253
  /***/ },
8101
8254
 
8255
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_accessor.js"
8256
+ /*!*********************************************************************************!*\
8257
+ !*** ../core/build/src/abap/2_statements/expressions/sql_hierarchy_accessor.js ***!
8258
+ \*********************************************************************************/
8259
+ (__unused_webpack_module, exports, __webpack_require__) {
8260
+
8261
+ "use strict";
8262
+
8263
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8264
+ exports.SQLHierarchyAccessor = void 0;
8265
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8266
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8267
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
8268
+ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
8269
+ class SQLHierarchyAccessor extends combi_1.Expression {
8270
+ getRunnable() {
8271
+ const distanceTo = (0, combi_1.seq)("TO", _1.SQLSource);
8272
+ const distanceFrom = (0, combi_1.seq)("FROM", _1.SQLSource, (0, combi_1.optPrio)(distanceTo));
8273
+ const distance = (0, combi_1.seq)("DISTANCE", (0, combi_1.altPrio)(distanceFrom, distanceTo));
8274
+ const accessor = (0, combi_1.seq)("SOURCE", _1.DatabaseTable, "START", "WHERE", _1.SQLCond, (0, combi_1.optPrio)(distance));
8275
+ const name = (0, combi_1.altPrio)("HIERARCHY_DESCENDANTS", "HIERARCHY_ANCESTORS", "HIERARCHY_SIBLINGS");
8276
+ return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)(name, (0, combi_1.tok)(tokens_1.ParenLeftW), accessor, (0, combi_1.tok)(tokens_1.WParenRightW)));
8277
+ }
8278
+ }
8279
+ exports.SQLHierarchyAccessor = SQLHierarchyAccessor;
8280
+ //# sourceMappingURL=sql_hierarchy_accessor.js.map
8281
+
8282
+ /***/ },
8283
+
8284
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_aggregate.js"
8285
+ /*!**********************************************************************************!*\
8286
+ !*** ../core/build/src/abap/2_statements/expressions/sql_hierarchy_aggregate.js ***!
8287
+ \**********************************************************************************/
8288
+ (__unused_webpack_module, exports, __webpack_require__) {
8289
+
8290
+ "use strict";
8291
+
8292
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8293
+ exports.SQLHierarchyAggregate = void 0;
8294
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8295
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8296
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
8297
+ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
8298
+ class SQLHierarchyAggregate extends combi_1.Expression {
8299
+ getRunnable() {
8300
+ const startWhere = (0, combi_1.seq)("START", "WHERE", _1.SQLCond);
8301
+ const join = (0, combi_1.seq)("JOIN", _1.DatabaseTable, "ON", _1.SQLCond);
8302
+ const measureItem = (0, combi_1.seq)(_1.SQLAggregation, "AS", _1.SQLAsName);
8303
+ const measures = (0, combi_1.seq)("MEASURES", measureItem, (0, combi_1.star)((0, combi_1.seq)(",", measureItem)));
8304
+ const where = (0, combi_1.seq)("WHERE", _1.SQLCond);
8305
+ const withEntry = (0, combi_1.altPrio)("SUBTOTAL", "BALANCE", (0, combi_1.seq)("NOT", "MATCHED"), "TOTAL");
8306
+ const aggregate = (0, combi_1.seq)("SOURCE", _1.DatabaseTable, (0, combi_1.optPrio)(startWhere), (0, combi_1.optPrio)(join), measures, (0, combi_1.optPrio)(where), (0, combi_1.optPrio)((0, combi_1.seq)("WITH", withEntry, (0, combi_1.star)((0, combi_1.seq)("WITH", withEntry)))));
8307
+ const name = (0, combi_1.altPrio)("HIERARCHY_DESCENDANTS_AGGREGATE", "HIERARCHY_ANCESTORS_AGGREGATE");
8308
+ return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)(name, (0, combi_1.tok)(tokens_1.ParenLeftW), aggregate, (0, combi_1.tok)(tokens_1.WParenRightW)));
8309
+ }
8310
+ }
8311
+ exports.SQLHierarchyAggregate = SQLHierarchyAggregate;
8312
+ //# sourceMappingURL=sql_hierarchy_aggregate.js.map
8313
+
8314
+ /***/ },
8315
+
8316
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_hierarchy_source.js"
8317
+ /*!*******************************************************************************!*\
8318
+ !*** ../core/build/src/abap/2_statements/expressions/sql_hierarchy_source.js ***!
8319
+ \*******************************************************************************/
8320
+ (__unused_webpack_module, exports, __webpack_require__) {
8321
+
8322
+ "use strict";
8323
+
8324
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8325
+ exports.SQLHierarchySource = void 0;
8326
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8327
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8328
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
8329
+ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
8330
+ class SQLHierarchySource extends combi_1.Expression {
8331
+ getRunnable() {
8332
+ const orderDir = (0, combi_1.optPrio)((0, combi_1.altPrio)("ASCENDING", "DESCENDING"));
8333
+ const orderFieldName = (0, combi_1.regex)(/^(?!(?:DEPTH|MULTIPLE|ORPHAN|CACHE|CYCLE|LOAD|GENERATE|RETAIN|DEPTH)$)(\/\w+\/)?(\*?\w+~(\/\w+\/)?(\w+|\*)|\w+)$/i);
8334
+ const orderField = (0, combi_1.seq)(orderFieldName, orderDir, (0, combi_1.optPrio)(","));
8335
+ const siblingsOrderBy = (0, combi_1.seq)("SIBLINGS", "ORDER", "BY", (0, combi_1.altPrio)("PRIMARY KEY", _1.Dynamic, (0, combi_1.seq)(orderField, (0, combi_1.starPrio)(orderField))));
8336
+ const cache = (0, combi_1.seq)("CACHE", (0, combi_1.altPrio)("FORCE", "OFF", "ON"));
8337
+ const retainNulls = (0, combi_1.seq)("RETAIN", "NULLS", _1.SQLSource);
8338
+ const cycle = (0, combi_1.seq)("CYCLE", (0, combi_1.altPrio)("BREAKUP", "ERROR"));
8339
+ const multipleParents = (0, combi_1.seq)("MULTIPLE", "PARENTS", (0, combi_1.altPrio)((0, combi_1.seq)("NOT", "ALLOWED"), (0, combi_1.seq)("LEAVES", "ONLY"), "ALLOWED"));
8340
+ const orphan = (0, combi_1.seq)("ORPHAN", (0, combi_1.altPrio)("IGNORE", "ERROR", "ROOT"));
8341
+ const depth = (0, combi_1.seq)("DEPTH", _1.SQLSource);
8342
+ const load = (0, combi_1.seq)("LOAD", (0, combi_1.altPrio)("INCREMENTAL", "BULK", _1.SQLSource));
8343
+ const generateSpantree = (0, combi_1.seq)("GENERATE", "SPANTREE");
8344
+ const startWhere = (0, combi_1.seq)("START", "WHERE", _1.SQLCond);
8345
+ const period = (0, combi_1.seq)("PERIOD", "FROM", _1.SQLFieldName, "TO", _1.SQLFieldName);
8346
+ const valid = (0, combi_1.seq)("VALID", "FROM", _1.SQLSource, "TO", _1.SQLSource);
8347
+ const association = (0, combi_1.seq)("CHILD", "TO", "PARENT", "ASSOCIATION", _1.SQLFieldName);
8348
+ const sourceTable = (0, combi_1.seq)((0, combi_1.altPrio)(_1.WithName, _1.DatabaseTable), (0, combi_1.optPrio)((0, combi_1.seq)("AS", _1.SQLAsName)));
8349
+ const levelColumn = _1.SQLFieldName;
8350
+ const levels = (0, combi_1.seq)("LEVELS", (0, combi_1.tok)(tokens_1.WParenLeftW), levelColumn, (0, combi_1.star)((0, combi_1.seq)(",", levelColumn)), (0, combi_1.tok)(tokens_1.WParenRightW));
8351
+ const leveledGenerator = (0, combi_1.seq)(levels, (0, combi_1.optPrio)(siblingsOrderBy), (0, combi_1.optPrio)(cache), (0, combi_1.optPrio)(retainNulls));
8352
+ const generator = (0, combi_1.seq)(association, (0, combi_1.optPrio)((0, combi_1.seq)(period, valid)), startWhere, (0, combi_1.optPrio)(siblingsOrderBy), (0, combi_1.optPrio)(depth), (0, combi_1.optPrio)(multipleParents), (0, combi_1.optPrio)(orphan), (0, combi_1.optPrio)(cache), (0, combi_1.optPrio)(cycle), (0, combi_1.optPrio)(load), (0, combi_1.optPrio)(generateSpantree));
8353
+ return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)("HIERARCHY", (0, combi_1.tok)(tokens_1.ParenLeftW), "SOURCE", sourceTable, (0, combi_1.altPrio)(leveledGenerator, generator), (0, combi_1.tok)(tokens_1.WParenRightW)));
8354
+ }
8355
+ }
8356
+ exports.SQLHierarchySource = SQLHierarchySource;
8357
+ //# sourceMappingURL=sql_hierarchy_source.js.map
8358
+
8359
+ /***/ },
8360
+
8102
8361
  /***/ "../core/build/src/abap/2_statements/expressions/sql_hints.js"
8103
8362
  /*!********************************************************************!*\
8104
8363
  !*** ../core/build/src/abap/2_statements/expressions/sql_hints.js ***!
@@ -8394,30 +8653,136 @@ exports.SQLPackageSize = SQLPackageSize;
8394
8653
 
8395
8654
  /***/ },
8396
8655
 
8397
- /***/ "../core/build/src/abap/2_statements/expressions/sql_path.js"
8398
- /*!*******************************************************************!*\
8399
- !*** ../core/build/src/abap/2_statements/expressions/sql_path.js ***!
8400
- \*******************************************************************/
8656
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_path_cardinality.js"
8657
+ /*!*******************************************************************************!*\
8658
+ !*** ../core/build/src/abap/2_statements/expressions/sql_path_cardinality.js ***!
8659
+ \*******************************************************************************/
8660
+ (__unused_webpack_module, exports, __webpack_require__) {
8661
+
8662
+ "use strict";
8663
+
8664
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8665
+ exports.SQLPathCardinality = void 0;
8666
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8667
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
8668
+ class SQLPathCardinality extends combi_1.Expression {
8669
+ getRunnable() {
8670
+ const exact = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), (0, combi_1.regex)(/^\d+$/), (0, combi_1.tok)(tokens_1.WParenRightW));
8671
+ const many = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), "*", (0, combi_1.tok)(tokens_1.WParenRightW));
8672
+ return (0, combi_1.altPrio)(exact, many);
8673
+ }
8674
+ }
8675
+ exports.SQLPathCardinality = SQLPathCardinality;
8676
+ //# sourceMappingURL=sql_path_cardinality.js.map
8677
+
8678
+ /***/ },
8679
+
8680
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_path_for_column.js"
8681
+ /*!******************************************************************************!*\
8682
+ !*** ../core/build/src/abap/2_statements/expressions/sql_path_for_column.js ***!
8683
+ \******************************************************************************/
8401
8684
  (__unused_webpack_module, exports, __webpack_require__) {
8402
8685
 
8403
8686
  "use strict";
8404
8687
 
8405
8688
  Object.defineProperty(exports, "__esModule", ({ value: true }));
8406
- exports.SQLPath = void 0;
8689
+ exports.SQLPathForColumn = void 0;
8407
8690
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8408
8691
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
8409
- const association_name_1 = __webpack_require__(/*! ./association_name */ "../core/build/src/abap/2_statements/expressions/association_name.js");
8692
+ const sql_path_segment_1 = __webpack_require__(/*! ./sql_path_segment */ "../core/build/src/abap/2_statements/expressions/sql_path_segment.js");
8693
+ const field_1 = __webpack_require__(/*! ./field */ "../core/build/src/abap/2_statements/expressions/field.js");
8694
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8695
+ class SQLPathForColumn extends combi_1.Expression {
8696
+ getRunnable() {
8697
+ const tablePrefix = (0, combi_1.regex)(/^(\/\w+\/)?\w+~$/);
8698
+ const withPrefix = (0, combi_1.seq)(tablePrefix, (0, combi_1.plus)(new sql_path_segment_1.SQLPathSegment(true)), (0, combi_1.tok)(tokens_1.Dash), field_1.Field);
8699
+ const standalone = (0, combi_1.seq)((0, combi_1.plus)(new sql_path_segment_1.SQLPathSegment()), (0, combi_1.tok)(tokens_1.Dash), field_1.Field);
8700
+ return (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.altPrio)(withPrefix, standalone));
8701
+ }
8702
+ }
8703
+ exports.SQLPathForColumn = SQLPathForColumn;
8704
+ //# sourceMappingURL=sql_path_for_column.js.map
8705
+
8706
+ /***/ },
8707
+
8708
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_path_for_entity.js"
8709
+ /*!******************************************************************************!*\
8710
+ !*** ../core/build/src/abap/2_statements/expressions/sql_path_for_entity.js ***!
8711
+ \******************************************************************************/
8712
+ (__unused_webpack_module, exports, __webpack_require__) {
8713
+
8714
+ "use strict";
8715
+
8716
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8717
+ exports.SQLPathForEntity = void 0;
8718
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8719
+ const sql_path_segment_1 = __webpack_require__(/*! ./sql_path_segment */ "../core/build/src/abap/2_statements/expressions/sql_path_segment.js");
8720
+ const database_table_1 = __webpack_require__(/*! ./database_table */ "../core/build/src/abap/2_statements/expressions/database_table.js");
8721
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8722
+ class SQLPathForEntity extends combi_1.Expression {
8723
+ getRunnable() {
8724
+ return (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.optPrio)(database_table_1.DatabaseTable), (0, combi_1.plus)(new sql_path_segment_1.SQLPathSegment())));
8725
+ }
8726
+ }
8727
+ exports.SQLPathForEntity = SQLPathForEntity;
8728
+ //# sourceMappingURL=sql_path_for_entity.js.map
8729
+
8730
+ /***/ },
8731
+
8732
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_path_join_type.js"
8733
+ /*!*****************************************************************************!*\
8734
+ !*** ../core/build/src/abap/2_statements/expressions/sql_path_join_type.js ***!
8735
+ \*****************************************************************************/
8736
+ (__unused_webpack_module, exports, __webpack_require__) {
8737
+
8738
+ "use strict";
8739
+
8740
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8741
+ exports.SQLPathJoinType = void 0;
8742
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8743
+ class SQLPathJoinType extends combi_1.Expression {
8744
+ getRunnable() {
8745
+ return (0, combi_1.altPrio)("EXACT ONE TO ONE", "ONE TO ONE", "MANY TO MANY", "MANY TO ONE", "ONE TO MANY", "LEFT OUTER", "RIGHT OUTER", "INNER");
8746
+ }
8747
+ }
8748
+ exports.SQLPathJoinType = SQLPathJoinType;
8749
+ //# sourceMappingURL=sql_path_join_type.js.map
8750
+
8751
+ /***/ },
8752
+
8753
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_path_segment.js"
8754
+ /*!***************************************************************************!*\
8755
+ !*** ../core/build/src/abap/2_statements/expressions/sql_path_segment.js ***!
8756
+ \***************************************************************************/
8757
+ (__unused_webpack_module, exports, __webpack_require__) {
8758
+
8759
+ "use strict";
8760
+
8761
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8762
+ exports.SQLPathSegment = void 0;
8763
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8764
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
8765
+ const sql_cds_parameters_1 = __webpack_require__(/*! ./sql_cds_parameters */ "../core/build/src/abap/2_statements/expressions/sql_cds_parameters.js");
8410
8766
  const sql_cond_1 = __webpack_require__(/*! ./sql_cond */ "../core/build/src/abap/2_statements/expressions/sql_cond.js");
8411
- class SQLPath extends combi_1.Expression {
8767
+ const sql_path_cardinality_1 = __webpack_require__(/*! ./sql_path_cardinality */ "../core/build/src/abap/2_statements/expressions/sql_path_cardinality.js");
8768
+ const sql_path_join_type_1 = __webpack_require__(/*! ./sql_path_join_type */ "../core/build/src/abap/2_statements/expressions/sql_path_join_type.js");
8769
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8770
+ class SQLPathSegment extends combi_1.Expression {
8771
+ constructor(nws = false) {
8772
+ super();
8773
+ this.nws = nws;
8774
+ }
8412
8775
  getRunnable() {
8413
- // todo, only from version?
8414
- const condition = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.BracketLeftW), "ONE TO ONE WHERE", sql_cond_1.SQLCond, (0, combi_1.tok)(tokens_1.WBracketRight));
8415
- const ret = (0, combi_1.seq)(association_name_1.AssociationName, (0, combi_1.optPrio)(condition), (0, combi_1.tok)(tokens_1.Dash), (0, combi_1.regex)(/\w+/));
8416
- return ret;
8776
+ const filter = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.BracketLeftW), (0, combi_1.optPrio)(sql_path_cardinality_1.SQLPathCardinality), (0, combi_1.optPrio)(sql_path_join_type_1.SQLPathJoinType), (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.optPrio)("WHERE"), sql_cond_1.SQLCond)), (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WBracketRightW), (0, combi_1.tok)(tokens_1.WBracketRight))));
8777
+ const params = (0, combi_1.ver)(version_1.Version.v751, sql_cds_parameters_1.SQLCDSParameters);
8778
+ const name = this.nws
8779
+ ? (0, combi_1.tok)(tokens_1.AssociationName)
8780
+ : (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.AssociationName), (0, combi_1.regex)(/^\\[\w]+$/));
8781
+ return (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)(name, (0, combi_1.optPrio)((0, combi_1.altPrio)((0, combi_1.seq)(params, (0, combi_1.optPrio)(filter)), filter))));
8417
8782
  }
8418
8783
  }
8419
- exports.SQLPath = SQLPath;
8420
- //# sourceMappingURL=sql_path.js.map
8784
+ exports.SQLPathSegment = SQLPathSegment;
8785
+ //# sourceMappingURL=sql_path_segment.js.map
8421
8786
 
8422
8787
  /***/ },
8423
8788
 
@@ -11174,7 +11539,7 @@ class CommitEntities {
11174
11539
  const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
11175
11540
  const responses = (0, combi_1.seq)("RESPONSES", failed, reported);
11176
11541
  const s = (0, combi_1.seq)("COMMIT ENTITIES", (0, combi_1.optPrio)("IN SIMULATION MODE"), (0, combi_1.opt)(responses), (0, combi_1.opt)((0, combi_1.seq)("RESPONSE OF", expressions_1.NamespaceSimpleName, (0, combi_1.per)(failed, reported))));
11177
- return (0, combi_1.ver)(version_1.Version.v754, s);
11542
+ return (0, combi_1.ver)(version_1.Version.v754, s, version_1.Version.OpenABAP);
11178
11543
  }
11179
11544
  }
11180
11545
  exports.CommitEntities = CommitEntities;
@@ -11514,7 +11879,7 @@ class CreateData {
11514
11879
  const initial = (0, combi_1.seq)("INITIAL SIZE", expressions_1.Source);
11515
11880
  const decimals = (0, combi_1.seq)("DECIMALS", expressions_1.Source);
11516
11881
  const uniq = (0, combi_1.alt)("UNIQUE", "NON-UNIQUE");
11517
- const emptyKey = (0, combi_1.ver)(version_1.Version.v740sp02, "EMPTY KEY");
11882
+ const emptyKey = (0, combi_1.ver)(version_1.Version.v740sp02, "EMPTY KEY", version_1.Version.OpenABAP);
11518
11883
  const def = (0, combi_1.seq)((0, combi_1.opt)(uniq), (0, combi_1.alt)("DEFAULT KEY", emptyKey));
11519
11884
  const kdef = (0, combi_1.seq)((0, combi_1.opt)(uniq), "KEY", (0, combi_1.alt)((0, combi_1.plus)(expressions_1.Field), expressions_1.Dynamic));
11520
11885
  const key = (0, combi_1.seq)("WITH", (0, combi_1.alt)(def, kdef));
@@ -12273,7 +12638,7 @@ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_st
12273
12638
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
12274
12639
  class EndTestSeam {
12275
12640
  getMatcher() {
12276
- return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.str)("END-TEST-SEAM"));
12641
+ return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.str)("END-TEST-SEAM"), version_1.Version.OpenABAP);
12277
12642
  }
12278
12643
  }
12279
12644
  exports.EndTestSeam = EndTestSeam;
@@ -13586,7 +13951,7 @@ class GetPermissions {
13586
13951
  const type = (0, combi_1.altPrio)("GLOBAL AUTHORIZATION", "INSTANCE");
13587
13952
  const from = (0, combi_1.seq)("FROM", expressions_1.Source);
13588
13953
  const s = (0, combi_1.seq)("GET PERMISSIONS ONLY", type, "ENTITY", expressions_1.SimpleName, (0, combi_1.optPrio)(from), "REQUEST", expressions_1.Source, "RESULT", expressions_1.Target, "FAILED", expressions_1.Target, "REPORTED", expressions_1.Target);
13589
- return (0, combi_1.ver)(version_1.Version.v754, s);
13954
+ return (0, combi_1.ver)(version_1.Version.v754, s, version_1.Version.OpenABAP);
13590
13955
  }
13591
13956
  }
13592
13957
  exports.GetPermissions = GetPermissions;
@@ -14925,7 +15290,7 @@ class ModifyEntities {
14925
15290
  getMatcher() {
14926
15291
  const withh = (0, combi_1.seq)("WITH", expressions_1.Source);
14927
15292
  const fieldsWith = (0, combi_1.seq)("FIELDS (", (0, combi_1.plus)(expressions_1.SimpleName), ")", withh);
14928
- const by = (0, combi_1.seq)("BY", expressions_1.AssociationName);
15293
+ const by = (0, combi_1.seq)("BY", expressions_1.EMLEntityPath);
14929
15294
  const relating = (0, combi_1.seq)("RELATING TO", expressions_1.NamespaceSimpleName, "BY", expressions_1.NamespaceSimpleName);
14930
15295
  const execute = (0, combi_1.seq)("EXECUTE", expressions_1.NamespaceSimpleName, "FROM", expressions_1.Source);
14931
15296
  const create = (0, combi_1.seq)("CREATE", (0, combi_1.opt)(by), "FROM", expressions_1.Source, (0, combi_1.opt)(relating));
@@ -14940,9 +15305,9 @@ class ModifyEntities {
14940
15305
  const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
14941
15306
  const end = (0, combi_1.optPrio)((0, combi_1.per)(failed, result, mapped, reported));
14942
15307
  const entities = (0, combi_1.seq)((0, combi_1.optPrio)("AUGMENTING"), "ENTITIES OF", expressions_1.NamespaceSimpleName, (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.plusPrio)((0, combi_1.seq)("ENTITY", expressions_1.NamespaceSimpleName, (0, combi_1.plus)(operation))));
14943
- const create2 = (0, combi_1.seq)("CREATE", fieldsWith, (0, combi_1.opt)((0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, fieldsWith)));
14944
- const create3 = (0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, fieldsWith);
14945
- const create4 = (0, combi_1.seq)("CREATE FROM", expressions_1.Source, (0, combi_1.plus)((0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, "FROM", expressions_1.Source)));
15308
+ const create2 = (0, combi_1.seq)("CREATE", fieldsWith, (0, combi_1.opt)((0, combi_1.seq)("CREATE BY", expressions_1.EMLEntityPath, fieldsWith)));
15309
+ const create3 = (0, combi_1.seq)("CREATE BY", expressions_1.EMLEntityPath, fieldsWith);
15310
+ const create4 = (0, combi_1.seq)("CREATE FROM", expressions_1.Source, (0, combi_1.plus)((0, combi_1.seq)("CREATE BY", expressions_1.EMLEntityPath, "FROM", expressions_1.Source)));
14946
15311
  const entity = (0, combi_1.seq)("ENTITY", (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.alt)(expressions_1.NamespaceSimpleName, expressions_1.EntityAssociation), (0, combi_1.alt)(execute, create, updateFields, deleteFrom, updateSetFields, updateFrom, create2, create3, create4));
14947
15312
  return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("MODIFY", (0, combi_1.alt)(entities, entity), end), version_1.Version.OpenABAP);
14948
15313
  }
@@ -15921,11 +16286,11 @@ class ReadEntities {
15921
16286
  const result = (0, combi_1.seq)("RESULT", expressions_1.Target);
15922
16287
  const failed = (0, combi_1.seq)("FAILED", expressions_1.Target);
15923
16288
  const reported = (0, combi_1.seq)("REPORTED", expressions_1.Target);
15924
- const foo = (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.seq)("BY", expressions_1.AssociationName)), (0, combi_1.alt)(fields, from, all), (0, combi_1.optPrio)(result));
16289
+ const foo = (0, combi_1.seq)((0, combi_1.opt)((0, combi_1.seq)("BY", expressions_1.EMLEntityPath)), (0, combi_1.alt)(fields, from, all), (0, combi_1.optPrio)(result));
15925
16290
  const entity = (0, combi_1.seq)("ENTITY", expressions_1.NamespaceSimpleName, (0, combi_1.plus)(foo));
15926
16291
  const s = (0, combi_1.seq)("ENTITIES OF", expressions_1.NamespaceSimpleName, (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.plus)(entity), (0, combi_1.optPrio)((0, combi_1.seq)("LINK", expressions_1.Target)), (0, combi_1.optPrio)((0, combi_1.per)(failed, reported)));
15927
- const byall = (0, combi_1.seq)("BY", expressions_1.AssociationName, all);
15928
- const by = (0, combi_1.seq)("BY", expressions_1.AssociationName, fields);
16292
+ const byall = (0, combi_1.seq)("BY", expressions_1.EMLEntityPath, all);
16293
+ const by = (0, combi_1.seq)("BY", expressions_1.EMLEntityPath, fields);
15929
16294
  const sub = (0, combi_1.seq)((0, combi_1.alt)(all, fields, from, by, byall), result);
15930
16295
  const single = (0, combi_1.seq)("ENTITY", (0, combi_1.opt)("IN LOCAL MODE"), (0, combi_1.alt)(expressions_1.NamespaceSimpleName, expressions_1.EntityAssociation), (0, combi_1.plus)(sub), (0, combi_1.optPrio)(failed), (0, combi_1.optPrio)(reported));
15931
16296
  return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("READ", (0, combi_1.alt)(s, single)), version_1.Version.OpenABAP);
@@ -17683,7 +18048,7 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/s
17683
18048
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
17684
18049
  class TestSeam {
17685
18050
  getMatcher() {
17686
- return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)("TEST-SEAM", expressions_1.TestSeamName));
18051
+ return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)("TEST-SEAM", expressions_1.TestSeamName), version_1.Version.OpenABAP);
17687
18052
  }
17688
18053
  }
17689
18054
  exports.TestSeam = TestSeam;
@@ -18403,7 +18768,8 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/s
18403
18768
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
18404
18769
  class With {
18405
18770
  getMatcher() {
18406
- const cte = (0, combi_1.seq)(expressions_1.WithName, "AS", (0, combi_1.tok)(tokens_1.WParenLeftW), expressions_1.SelectCTE, (0, combi_1.tok)(tokens_1.WParenRightW));
18771
+ const exposing = (0, combi_1.optPrio)((0, combi_1.seq)("WITH", (0, combi_1.altPrio)(new expressions_1.SQLCTEHierarchy(), expressions_1.SQLCTEAssociations)));
18772
+ const cte = (0, combi_1.seq)(expressions_1.WithName, "AS", (0, combi_1.tok)(tokens_1.WParenLeftW), expressions_1.SelectCTE, (0, combi_1.tok)(tokens_1.WParenRightW), exposing);
18407
18773
  return (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("WITH", cte, (0, combi_1.star)((0, combi_1.seq)(",", cte)), expressions_1.Select));
18408
18774
  }
18409
18775
  }
@@ -26567,16 +26933,16 @@ class BasicTypes {
26567
26933
  options.primaryKey.type = basic_1.TableAccessType.standard;
26568
26934
  return new Types.TableType(structure, options);
26569
26935
  }
26570
- else if (typename && (text.startsWith("TYPE TABLE FOR CREATE ")
26571
- || text.startsWith("TYPE TABLE FOR READ ")
26572
- || text.startsWith("TYPE TABLE FOR DELETE ")
26573
- || text.startsWith("TYPE TABLE FOR UPDATE "))) {
26936
+ else if (typename && this.isRAPTableFor(text)) {
26574
26937
  const name = typename.concatTokens();
26575
26938
  const ddlsName = this.getRAPBaseEntityName(name);
26576
26939
  const type = (_d = this.input.scope.getDDIC().lookupDDLS(ddlsName)) === null || _d === void 0 ? void 0 : _d.type;
26577
26940
  if (type) {
26578
26941
  return new Types.TableType(basic_1.VoidType.get("RAP-TODO"), options);
26579
26942
  }
26943
+ else if (this.isRAPDerivedEntityName(name)) {
26944
+ return Types.VoidType.get(name);
26945
+ }
26580
26946
  else if (this.input.scope.getDDIC().inErrorNamespace(ddlsName)) {
26581
26947
  return new Types.UnknownType(`DDLS ${ddlsName} not found`);
26582
26948
  }
@@ -26588,7 +26954,7 @@ class BasicTypes {
26588
26954
  return this.parseType(node, name);
26589
26955
  }
26590
26956
  parseType(node, qualifiedName) {
26591
- var _a, _b, _c, _d, _e, _f, _g, _h;
26957
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
26592
26958
  const typeName = node.findFirstExpression(Expressions.TypeName);
26593
26959
  let text = (_a = node.findFirstExpression(Expressions.Type)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
26594
26960
  if (text === undefined) {
@@ -26601,7 +26967,10 @@ class BasicTypes {
26601
26967
  }
26602
26968
  }
26603
26969
  if (text === undefined) {
26604
- text = (_d = node.findFirstExpression(Expressions.FormParamType)) === null || _d === void 0 ? void 0 : _d.concatTokens().toUpperCase();
26970
+ text = (_d = node.findFirstExpression(Expressions.TypeStructure)) === null || _d === void 0 ? void 0 : _d.concatTokens().toUpperCase();
26971
+ }
26972
+ if (text === undefined) {
26973
+ text = (_e = node.findFirstExpression(Expressions.FormParamType)) === null || _e === void 0 ? void 0 : _e.concatTokens().toUpperCase();
26605
26974
  }
26606
26975
  if (text === undefined
26607
26976
  && node.get() instanceof Statements.Parameter
@@ -26612,8 +26981,11 @@ class BasicTypes {
26612
26981
  text = "TYPE";
26613
26982
  }
26614
26983
  let found = undefined;
26615
- if (text.startsWith("LIKE LINE OF ")) {
26616
- const name = (_e = node.findFirstExpression(Expressions.FieldChain)) === null || _e === void 0 ? void 0 : _e.concatTokens();
26984
+ if (this.isRAPTypeStructure(text)) {
26985
+ return Types.VoidType.get((_f = node.findFirstExpression(Expressions.TypeStructure)) === null || _f === void 0 ? void 0 : _f.concatTokens());
26986
+ }
26987
+ else if (text.startsWith("LIKE LINE OF ")) {
26988
+ const name = (_g = node.findFirstExpression(Expressions.FieldChain)) === null || _g === void 0 ? void 0 : _g.concatTokens();
26617
26989
  let e = node.findFirstExpression(Expressions.Type);
26618
26990
  if (e === undefined) {
26619
26991
  e = node.findFirstExpression(Expressions.FormParamType);
@@ -26636,7 +27008,7 @@ class BasicTypes {
26636
27008
  }
26637
27009
  }
26638
27010
  else if (text.startsWith("LIKE REF TO ")) {
26639
- const name = (_f = node.findFirstExpression(Expressions.FieldChain)) === null || _f === void 0 ? void 0 : _f.concatTokens();
27011
+ const name = (_h = node.findFirstExpression(Expressions.FieldChain)) === null || _h === void 0 ? void 0 : _h.concatTokens();
26640
27012
  const type = this.resolveLikeName(node.findFirstExpression(Expressions.Type), false);
26641
27013
  if (type === undefined) {
26642
27014
  return new Types.UnknownType("Type error, could not resolve \"" + name + "\", parseType");
@@ -26727,7 +27099,7 @@ class BasicTypes {
26727
27099
  }
26728
27100
  }
26729
27101
  if (text.includes(" WITH INDICATORS ")) {
26730
- const componentName = (_h = (_g = node.findFirstExpression(Expressions.Type)) === null || _g === void 0 ? void 0 : _g.findDirectExpression(Expressions.ComponentName)) === null || _h === void 0 ? void 0 : _h.concatTokens().toUpperCase();
27102
+ const componentName = (_k = (_j = node.findFirstExpression(Expressions.Type)) === null || _j === void 0 ? void 0 : _j.findDirectExpression(Expressions.ComponentName)) === null || _k === void 0 ? void 0 : _k.concatTokens().toUpperCase();
26731
27103
  if (componentName === undefined) {
26732
27104
  throw new Error("parseType, componentName expected");
26733
27105
  }
@@ -26753,12 +27125,38 @@ class BasicTypes {
26753
27125
  getRAPBaseEntityName(name) {
26754
27126
  const association = name.indexOf("\\_");
26755
27127
  const path = name.indexOf("\\\\");
26756
- if (association === -1 && path === -1) {
27128
+ const action = name.indexOf("~");
27129
+ if (association === -1 && path === -1 && action === -1) {
26757
27130
  return name;
26758
27131
  }
26759
- const splitAt = association === -1 ? path : path === -1 ? association : Math.min(association, path);
27132
+ const candidates = [association, path, action].filter(i => i !== -1);
27133
+ const splitAt = Math.min(...candidates);
26760
27134
  return name.substring(0, splitAt);
26761
27135
  }
27136
+ isRAPDerivedEntityName(name) {
27137
+ return name.includes("\\") || name.includes("~");
27138
+ }
27139
+ isRAPTableFor(text) {
27140
+ return text.startsWith("TYPE TABLE FOR ACTION IMPORT ")
27141
+ || text.startsWith("TYPE TABLE FOR ACTION RESULT ")
27142
+ || text.startsWith("TYPE TABLE FOR CREATE ")
27143
+ || text.startsWith("TYPE TABLE FOR DELETE ")
27144
+ || text.startsWith("TYPE TABLE FOR DETERMINATION ")
27145
+ || text.startsWith("TYPE TABLE FOR EVENT ")
27146
+ || text.startsWith("TYPE TABLE FOR FAILED ")
27147
+ || text.startsWith("TYPE TABLE FOR FAILED EARLY ")
27148
+ || text.startsWith("TYPE TABLE FOR LOCK ")
27149
+ || text.startsWith("TYPE TABLE FOR READ ")
27150
+ || text.startsWith("TYPE TABLE FOR READ IMPORT ")
27151
+ || text.startsWith("TYPE TABLE FOR READ RESULT ")
27152
+ || text.startsWith("TYPE TABLE FOR REPORTED EARLY ")
27153
+ || text.startsWith("TYPE TABLE FOR UPDATE ");
27154
+ }
27155
+ isRAPTypeStructure(text) {
27156
+ return text.startsWith("TYPE STRUCTURE FOR ")
27157
+ || text.startsWith("TYPE RESPONSE FOR ")
27158
+ || text.startsWith("TYPE REQUEST FOR CHANGE ");
27159
+ }
26762
27160
  // todo, rewrite this method
26763
27161
  resolveTypeChain(expr) {
26764
27162
  var _a, _b, _c, _d;
@@ -40397,7 +40795,9 @@ class MoveCorresponding {
40397
40795
  }
40398
40796
  const sourceType = source_1.Source.runSyntax(s, input);
40399
40797
  const targetType = target_1.Target.runSyntax(t, input);
40400
- if (input.scope.getVersion() < version_1.Version.v740sp05 && input.scope.getVersion() !== version_1.Version.Cloud) {
40798
+ if (input.scope.getVersion() < version_1.Version.v740sp05
40799
+ && input.scope.getVersion() !== version_1.Version.Cloud
40800
+ && input.scope.getVersion() !== version_1.Version.OpenABAP) {
40401
40801
  if (sourceType instanceof basic_1.TableType && sourceType.isWithHeader() === false) {
40402
40802
  const message = "MOVE-CORRESPONDING with tables possible from v740sp05";
40403
40803
  input.issues.push((0, _syntax_input_1.syntaxIssue)(input, node.getFirstToken(), message));
@@ -45478,6 +45878,10 @@ class SyntaxLogic {
45478
45878
  this.scope.addList(values);
45479
45879
  return true;
45480
45880
  }
45881
+ else if (stru instanceof Structures.TestInjection) {
45882
+ // todo: skipped for now
45883
+ return true;
45884
+ }
45481
45885
  return false;
45482
45886
  }
45483
45887
  updateScopeStatement(node) {
@@ -66163,7 +66567,7 @@ class Registry {
66163
66567
  }
66164
66568
  static abaplintVersion() {
66165
66569
  // magic, see build script "version.js"
66166
- return "2.119.36";
66570
+ return "2.119.38";
66167
66571
  }
66168
66572
  getDDICReferences() {
66169
66573
  return this.ddicReferences;
@@ -71805,6 +72209,8 @@ class DangerousStatementConf extends _basic_rule_config_1.BasicRuleConfig {
71805
72209
  this.exportDynpro = true;
71806
72210
  /** Finds instances of dynamic SQL: SELECT, UPDATE, DELETE, INSERT, MODIFY */
71807
72211
  this.dynamicSQL = true;
72212
+ /** Ignore dynamic SQL in IF_RAP_QUERY_PROVIDER~SELECT implementations */
72213
+ this.ignoreRAPQueryProvider = true;
71808
72214
  }
71809
72215
  }
71810
72216
  exports.DangerousStatementConf = DangerousStatementConf;
@@ -71833,9 +72239,19 @@ dynamic SQL can potentially create SQL injection problems`,
71833
72239
  this.conf = conf;
71834
72240
  }
71835
72241
  runParsed(file) {
72242
+ var _a;
71836
72243
  const issues = [];
72244
+ let ignoreDynamicSQL = false;
71837
72245
  for (const statementNode of file.getStatements()) {
71838
72246
  const statement = statementNode.get();
72247
+ if (statement instanceof Statements.MethodImplementation) {
72248
+ const methodName = (_a = statementNode.findFirstExpression(Expressions.MethodName)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
72249
+ ignoreDynamicSQL = this.conf.ignoreRAPQueryProvider === true
72250
+ && methodName === "IF_RAP_QUERY_PROVIDER~SELECT";
72251
+ }
72252
+ else if (statement instanceof Statements.EndMethod) {
72253
+ ignoreDynamicSQL = false;
72254
+ }
71839
72255
  let message = undefined;
71840
72256
  if (this.conf.execSQL && statement instanceof Statements.ExecSQL) {
71841
72257
  message = "EXEC SQL";
@@ -71876,7 +72292,7 @@ dynamic SQL can potentially create SQL injection problems`,
71876
72292
  if (message) {
71877
72293
  issues.push(issue_1.Issue.atStatement(file, statementNode, this.getDescription(message), this.getMetadata().key, this.conf.severity));
71878
72294
  }
71879
- if (this.conf.dynamicSQL) {
72295
+ if (this.conf.dynamicSQL && ignoreDynamicSQL === false) {
71880
72296
  message = this.findDynamicSQL(statementNode);
71881
72297
  if (message) {
71882
72298
  issues.push(issue_1.Issue.atStatement(file, statementNode, this.getDescription(message), this.getMetadata().key, this.conf.severity));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.119.36",
3
+ "version": "2.119.38",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "homepage": "https://abaplint.org",
40
40
  "devDependencies": {
41
- "@abaplint/core": "^2.119.36",
41
+ "@abaplint/core": "^2.119.38",
42
42
  "@types/chai": "^4.3.20",
43
43
  "@types/minimist": "^1.2.5",
44
44
  "@types/mocha": "^10.0.10",