@abaplint/cli 2.119.29 → 2.119.31

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 +526 -153
  2. package/package.json +3 -3
package/build/cli.js CHANGED
@@ -1541,6 +1541,179 @@ exports.WStaticArrowW = WStaticArrowW;
1541
1541
 
1542
1542
  /***/ },
1543
1543
 
1544
+ /***/ "../core/build/src/abap/2_statements/_select_reclassify.js"
1545
+ /*!*****************************************************************!*\
1546
+ !*** ../core/build/src/abap/2_statements/_select_reclassify.js ***!
1547
+ \*****************************************************************/
1548
+ (__unused_webpack_module, exports, __webpack_require__) {
1549
+
1550
+ "use strict";
1551
+
1552
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
1553
+ if (k2 === undefined) k2 = k;
1554
+ var desc = Object.getOwnPropertyDescriptor(m, k);
1555
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
1556
+ desc = { enumerable: true, get: function() { return m[k]; } };
1557
+ }
1558
+ Object.defineProperty(o, k2, desc);
1559
+ }) : (function(o, m, k, k2) {
1560
+ if (k2 === undefined) k2 = k;
1561
+ o[k2] = m[k];
1562
+ }));
1563
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
1564
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
1565
+ }) : function(o, v) {
1566
+ o["default"] = v;
1567
+ });
1568
+ var __importStar = (this && this.__importStar) || (function () {
1569
+ var ownKeys = function(o) {
1570
+ ownKeys = Object.getOwnPropertyNames || function (o) {
1571
+ var ar = [];
1572
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
1573
+ return ar;
1574
+ };
1575
+ return ownKeys(o);
1576
+ };
1577
+ return function (mod) {
1578
+ if (mod && mod.__esModule) return mod;
1579
+ var result = {};
1580
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
1581
+ __setModuleDefault(result, mod);
1582
+ return result;
1583
+ };
1584
+ })();
1585
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
1586
+ exports.reclassifySelect = reclassifySelect;
1587
+ const Statements = __importStar(__webpack_require__(/*! ./statements */ "../core/build/src/abap/2_statements/statements/index.js"));
1588
+ const Expressions = __importStar(__webpack_require__(/*! ./expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
1589
+ const nodes_1 = __webpack_require__(/*! ../nodes */ "../core/build/src/abap/nodes/index.js");
1590
+ const nodes_2 = __webpack_require__(/*! ../nodes */ "../core/build/src/abap/nodes/index.js");
1591
+ const expression_node_1 = __webpack_require__(/*! ../nodes/expression_node */ "../core/build/src/abap/nodes/expression_node.js");
1592
+ function containsAggregation(children) {
1593
+ for (const child of children) {
1594
+ if (!(child instanceof expression_node_1.ExpressionNode)) {
1595
+ continue;
1596
+ }
1597
+ if (child.get() instanceof Expressions.SQLAggregation) {
1598
+ return true;
1599
+ }
1600
+ if (child.get() instanceof Expressions.SQLSetOpGroup) {
1601
+ continue;
1602
+ }
1603
+ if (containsAggregation(child.getChildren())) {
1604
+ return true;
1605
+ }
1606
+ }
1607
+ return false;
1608
+ }
1609
+ function isCountAllPattern(children) {
1610
+ for (const child of children) {
1611
+ if (!(child instanceof expression_node_1.ExpressionNode)) {
1612
+ continue;
1613
+ }
1614
+ const e = child.get();
1615
+ if (e instanceof Expressions.SQLGroupBy ||
1616
+ e instanceof Expressions.SQLHaving ||
1617
+ e instanceof Expressions.SQLOrderBy) {
1618
+ return false;
1619
+ }
1620
+ }
1621
+ return containsAggregation(children);
1622
+ }
1623
+ function scanForExprTypes(children, found, targets) {
1624
+ for (const child of children) {
1625
+ if (found.size === targets.length) {
1626
+ return;
1627
+ }
1628
+ if (!(child instanceof expression_node_1.ExpressionNode)) {
1629
+ continue;
1630
+ }
1631
+ const e = child.get();
1632
+ if (e instanceof Expressions.SQLSetOpGroup) {
1633
+ continue;
1634
+ }
1635
+ for (const t of targets) {
1636
+ if (e instanceof t) {
1637
+ found.add(t);
1638
+ break;
1639
+ }
1640
+ }
1641
+ scanForExprTypes(child.getChildren(), found, targets);
1642
+ }
1643
+ }
1644
+ function isSelectLoop(node) {
1645
+ const selectExpr = node.findDirectExpression(Expressions.Select);
1646
+ const top = selectExpr ? selectExpr.getChildren() : [];
1647
+ if (top.some(c => c instanceof nodes_2.TokenNode && c.get().getStr().toUpperCase() === "SINGLE")) {
1648
+ return false;
1649
+ }
1650
+ const targets = [
1651
+ Expressions.SQLSetOp, Expressions.SQLPackageSize, Expressions.SQLIntoTable,
1652
+ Expressions.SQLIntoStructure, Expressions.SQLIntoList, Expressions.SQLGroupBy,
1653
+ ];
1654
+ const found = new Set();
1655
+ scanForExprTypes(top, found, targets);
1656
+ const has = (t) => found.has(t);
1657
+ if (has(Expressions.SQLPackageSize)) {
1658
+ return true;
1659
+ }
1660
+ if (has(Expressions.SQLIntoTable)) {
1661
+ return false;
1662
+ }
1663
+ const hasInto = has(Expressions.SQLIntoTable) || has(Expressions.SQLIntoStructure) || has(Expressions.SQLIntoList);
1664
+ if (!hasInto && isCountAllPattern(top)) {
1665
+ return false;
1666
+ }
1667
+ if (has(Expressions.SQLSetOp)) {
1668
+ return true;
1669
+ }
1670
+ if (!has(Expressions.SQLGroupBy) && containsAggregation(top)) {
1671
+ return false;
1672
+ }
1673
+ return true;
1674
+ }
1675
+ function isWithLoop(node) {
1676
+ const selectExpr = node.findDirectExpression(Expressions.Select);
1677
+ if (!selectExpr) {
1678
+ return true;
1679
+ }
1680
+ const targets = [Expressions.SQLPackageSize, Expressions.SQLIntoTable];
1681
+ const found = new Set();
1682
+ scanForExprTypes(selectExpr.getChildren(), found, targets);
1683
+ if (found.has(Expressions.SQLPackageSize)) {
1684
+ return true;
1685
+ }
1686
+ if (found.has(Expressions.SQLIntoTable)) {
1687
+ return false;
1688
+ }
1689
+ return true;
1690
+ }
1691
+ function reclassifySelect(node, stmt, pragmas) {
1692
+ const children = [...node.getChildren()];
1693
+ if (stmt instanceof Statements.Select || stmt instanceof Statements.SelectLoop) {
1694
+ const loop = isSelectLoop(node);
1695
+ if (loop && stmt instanceof Statements.Select) {
1696
+ return new nodes_1.StatementNode(new Statements.SelectLoop(), node.getColon(), pragmas).setChildren(children);
1697
+ }
1698
+ else if (!loop && stmt instanceof Statements.SelectLoop) {
1699
+ return new nodes_1.StatementNode(new Statements.Select(), node.getColon(), pragmas).setChildren(children);
1700
+ }
1701
+ }
1702
+ else if (stmt instanceof Statements.With || stmt instanceof Statements.WithLoop) {
1703
+ const loop = isWithLoop(node);
1704
+ if (loop && stmt instanceof Statements.With) {
1705
+ return new nodes_1.StatementNode(new Statements.WithLoop(), node.getColon(), pragmas).setChildren(children);
1706
+ }
1707
+ else if (!loop && stmt instanceof Statements.WithLoop) {
1708
+ return new nodes_1.StatementNode(new Statements.With(), node.getColon(), pragmas).setChildren(children);
1709
+ }
1710
+ }
1711
+ return node;
1712
+ }
1713
+ //# sourceMappingURL=_select_reclassify.js.map
1714
+
1715
+ /***/ },
1716
+
1544
1717
  /***/ "../core/build/src/abap/2_statements/combi.js"
1545
1718
  /*!****************************************************!*\
1546
1719
  !*** ../core/build/src/abap/2_statements/combi.js ***!
@@ -1601,6 +1774,7 @@ exports.ver = ver;
1601
1774
  exports.verNot = verNot;
1602
1775
  exports.failCombinator = failCombinator;
1603
1776
  exports.failStar = failStar;
1777
+ exports.stopBefore = stopBefore;
1604
1778
  const Tokens = __importStar(__webpack_require__(/*! ../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js"));
1605
1779
  const nodes_1 = __webpack_require__(/*! ../nodes */ "../core/build/src/abap/nodes/index.js");
1606
1780
  const version_1 = __webpack_require__(/*! ../../version */ "../core/build/src/version.js");
@@ -2493,6 +2667,36 @@ function failCombinator() {
2493
2667
  function failStar() {
2494
2668
  return new FailStar();
2495
2669
  }
2670
+ // Passes through results where the next two tokens do NOT match t1 followed by t2.
2671
+ class StopBefore2 {
2672
+ constructor(t1, t2) {
2673
+ this.t1 = t1.toUpperCase();
2674
+ this.t2 = t2.toUpperCase();
2675
+ }
2676
+ listKeywords() { return []; }
2677
+ getUsing() { return []; }
2678
+ run(r) {
2679
+ var _a;
2680
+ const result = [];
2681
+ for (const input of r) {
2682
+ const next = input.peek();
2683
+ if (next === undefined) {
2684
+ continue;
2685
+ }
2686
+ if (next.getUpperStr() === this.t1 && ((_a = input.peekAt(1)) === null || _a === void 0 ? void 0 : _a.getUpperStr()) === this.t2) {
2687
+ continue;
2688
+ }
2689
+ result.push(input);
2690
+ }
2691
+ return result;
2692
+ }
2693
+ railroad() { return "Railroad.Terminal('stopBefore(" + this.t1 + " " + this.t2 + ")')"; }
2694
+ toStr() { return "stopBefore(" + this.t1 + "," + this.t2 + ")"; }
2695
+ first() { return [""]; }
2696
+ }
2697
+ function stopBefore(t1, t2) {
2698
+ return new StopBefore2(t1, t2);
2699
+ }
2496
2700
  //# sourceMappingURL=combi.js.map
2497
2701
 
2498
2702
  /***/ },
@@ -2769,6 +2973,59 @@ exports.ExpandMacros = ExpandMacros;
2769
2973
 
2770
2974
  /***/ },
2771
2975
 
2976
+ /***/ "../core/build/src/abap/2_statements/expressions/_select_core.js"
2977
+ /*!***********************************************************************!*\
2978
+ !*** ../core/build/src/abap/2_statements/expressions/_select_core.js ***!
2979
+ \***********************************************************************/
2980
+ (__unused_webpack_module, exports, __webpack_require__) {
2981
+
2982
+ "use strict";
2983
+
2984
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
2985
+ exports.buildSelectCore = buildSelectCore;
2986
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
2987
+ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
2988
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
2989
+ const sql_group_by_1 = __webpack_require__(/*! ./sql_group_by */ "../core/build/src/abap/2_statements/expressions/sql_group_by.js");
2990
+ const sql_into_structure_1 = __webpack_require__(/*! ./sql_into_structure */ "../core/build/src/abap/2_statements/expressions/sql_into_structure.js");
2991
+ const sql_up_to_1 = __webpack_require__(/*! ./sql_up_to */ "../core/build/src/abap/2_statements/expressions/sql_up_to.js");
2992
+ function buildSelectCore(into, allowOrderBy = true) {
2993
+ const where = (0, combi_1.seq)("WHERE", _1.SQLCond);
2994
+ const offset = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("OFFSET", _1.SQLSource));
2995
+ const sqlFields = (0, combi_1.ver)(version_1.Version.v750, _1.SQLFields, version_1.Version.OpenABAP);
2996
+ const privileged = (0, combi_1.ver)(version_1.Version.v758, _1.SQLPrivilegedAccess);
2997
+ const fieldList = (0, combi_1.optPrio)(_1.SQLFieldList);
2998
+ const client = (0, combi_1.optPrio)(_1.SQLClient);
2999
+ const byp = (0, combi_1.optPrio)(_1.SQLBypassingBuffer);
3000
+ const fae = (0, combi_1.optPrio)(_1.SQLForAllEntries);
3001
+ const whereClause = (0, combi_1.optPrio)(where);
3002
+ const groupHaving = (0, combi_1.seq)((0, combi_1.optPrio)(sql_group_by_1.SQLGroupBy), (0, combi_1.optPrio)(_1.SQLHaving));
3003
+ const orderUpOff = allowOrderBy
3004
+ ? [(0, combi_1.optPrio)((0, combi_1.seq)(_1.SQLOrderBy, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), (0, combi_1.optPrio)(offset)))]
3005
+ : [];
3006
+ const trailingOpts = (0, combi_1.seq)((0, combi_1.optPrio)(_1.DatabaseConnection), (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions));
3007
+ const intoSingle = (0, combi_1.altPrio)(sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList);
3008
+ const intoAny = into ? (0, combi_1.altPrio)(into, intoSingle) : intoSingle;
3009
+ const intoForPackSize = _1.SQLIntoTable;
3010
+ if (!into) {
3011
+ const afterFromNoInto = (0, combi_1.seq)(_1.SQLFrom, client, byp, (0, combi_1.altPrio)((0, combi_1.seq)(sqlFields, fae, whereClause, groupHaving, ...orderUpOff, trailingOpts), (0, combi_1.seq)(fae, whereClause, groupHaving, ...orderUpOff, trailingOpts)));
3012
+ const singleBody = (0, combi_1.seq)(_1.SQLFrom, client, byp, whereClause, groupHaving, trailingOpts);
3013
+ return (0, combi_1.seq)("SELECT", (0, combi_1.altPrio)((0, combi_1.seq)("SINGLE", (0, combi_1.optPrio)("FOR UPDATE"), fieldList, singleBody), (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), fieldList, byp, afterFromNoInto)));
3014
+ }
3015
+ const fromPackSize = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLPackageSize), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(_1.DatabaseConnection));
3016
+ const trailingInto = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.seq)(intoForPackSize, (0, combi_1.optPrio)(_1.SQLPackageSize), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(_1.SQLOrderBy), (0, combi_1.optPrio)(_1.SQLOptions))), (0, combi_1.optPrio)((0, combi_1.seq)(intoSingle, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.optPrio)(_1.SQLOptions))));
3017
+ const afterFromWithInto = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLFrom), client, byp, fromPackSize, (0, combi_1.altPrio)((0, combi_1.seq)(sqlFields, fae, whereClause, groupHaving, ...orderUpOff, trailingOpts, trailingInto), (0, combi_1.seq)(intoForPackSize, (0, combi_1.optPrio)(_1.SQLPackageSize), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, fae, whereClause, groupHaving, ...orderUpOff, trailingOpts, (0, combi_1.optPrio)(_1.SQLOptions)), (0, combi_1.seq)(intoSingle, byp, fae, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, whereClause, groupHaving, ...orderUpOff, trailingOpts, (0, combi_1.optPrio)(_1.SQLOptions)), (0, combi_1.seq)(fae, whereClause, groupHaving, ...orderUpOff, trailingOpts, trailingInto)));
3018
+ const selectTableIntoThenFrom = (0, combi_1.seq)(intoForPackSize, (0, combi_1.optPrio)(_1.SQLPackageSize), (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), afterFromWithInto);
3019
+ const selectOtherIntoThenFrom = (0, combi_1.seq)(intoAny, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, afterFromWithInto);
3020
+ const nonSingleBody = (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), fieldList, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), byp, (0, combi_1.altPrio)(selectTableIntoThenFrom, selectOtherIntoThenFrom, afterFromWithInto));
3021
+ const singleAfterFrom = (0, combi_1.seq)(_1.SQLFrom, client, byp, (0, combi_1.altPrio)((0, combi_1.seq)(sqlFields, whereClause, groupHaving, trailingOpts, (0, combi_1.optPrio)(intoSingle)), (0, combi_1.seq)(intoSingle, byp, whereClause, groupHaving, trailingOpts), (0, combi_1.seq)(whereClause, groupHaving, trailingOpts, (0, combi_1.optPrio)(intoSingle))));
3022
+ const singleIntoBeforeFrom = (0, combi_1.seq)(intoSingle, _1.SQLFrom, client, byp, whereClause, groupHaving, trailingOpts);
3023
+ return (0, combi_1.seq)("SELECT", (0, combi_1.altPrio)((0, combi_1.seq)("SINGLE", (0, combi_1.optPrio)("FOR UPDATE"), fieldList, byp, (0, combi_1.altPrio)(singleIntoBeforeFrom, singleAfterFrom)), nonSingleBody));
3024
+ }
3025
+ //# sourceMappingURL=_select_core.js.map
3026
+
3027
+ /***/ },
3028
+
2772
3029
  /***/ "../core/build/src/abap/2_statements/expressions/abstract.js"
2773
3030
  /*!*******************************************************************!*\
2774
3031
  !*** ../core/build/src/abap/2_statements/expressions/abstract.js ***!
@@ -4884,7 +5141,7 @@ __exportStar(__webpack_require__(/*! ./redefinition */ "../core/build/src/abap/2
4884
5141
  __exportStar(__webpack_require__(/*! ./reduce_body */ "../core/build/src/abap/2_statements/expressions/reduce_body.js"), exports);
4885
5142
  __exportStar(__webpack_require__(/*! ./reduce_next */ "../core/build/src/abap/2_statements/expressions/reduce_next.js"), exports);
4886
5143
  __exportStar(__webpack_require__(/*! ./report_name */ "../core/build/src/abap/2_statements/expressions/report_name.js"), exports);
4887
- __exportStar(__webpack_require__(/*! ./select_loop */ "../core/build/src/abap/2_statements/expressions/select_loop.js"), exports);
5144
+ __exportStar(__webpack_require__(/*! ./select_cte */ "../core/build/src/abap/2_statements/expressions/select_cte.js"), exports);
4888
5145
  __exportStar(__webpack_require__(/*! ./select */ "../core/build/src/abap/2_statements/expressions/select.js"), exports);
4889
5146
  __exportStar(__webpack_require__(/*! ./simple_field_chain */ "../core/build/src/abap/2_statements/expressions/simple_field_chain.js"), exports);
4890
5147
  __exportStar(__webpack_require__(/*! ./simple_field_chain2 */ "../core/build/src/abap/2_statements/expressions/simple_field_chain2.js"), exports);
@@ -4928,9 +5185,11 @@ __exportStar(__webpack_require__(/*! ./sql_hints */ "../core/build/src/abap/2_st
4928
5185
  __exportStar(__webpack_require__(/*! ./sql_in */ "../core/build/src/abap/2_statements/expressions/sql_in.js"), exports);
4929
5186
  __exportStar(__webpack_require__(/*! ./sql_into_list */ "../core/build/src/abap/2_statements/expressions/sql_into_list.js"), exports);
4930
5187
  __exportStar(__webpack_require__(/*! ./sql_into_structure */ "../core/build/src/abap/2_statements/expressions/sql_into_structure.js"), exports);
5188
+ __exportStar(__webpack_require__(/*! ./sql_field_list_loop_greedy */ "../core/build/src/abap/2_statements/expressions/sql_field_list_loop_greedy.js"), exports);
4931
5189
  __exportStar(__webpack_require__(/*! ./sql_into_table */ "../core/build/src/abap/2_statements/expressions/sql_into_table.js"), exports);
4932
5190
  __exportStar(__webpack_require__(/*! ./sql_join */ "../core/build/src/abap/2_statements/expressions/sql_join.js"), exports);
4933
5191
  __exportStar(__webpack_require__(/*! ./sql_options */ "../core/build/src/abap/2_statements/expressions/sql_options.js"), exports);
5192
+ __exportStar(__webpack_require__(/*! ./sql_package_size */ "../core/build/src/abap/2_statements/expressions/sql_package_size.js"), exports);
4934
5193
  __exportStar(__webpack_require__(/*! ./sql_order_by */ "../core/build/src/abap/2_statements/expressions/sql_order_by.js"), exports);
4935
5194
  __exportStar(__webpack_require__(/*! ./sql_over */ "../core/build/src/abap/2_statements/expressions/sql_over.js"), exports);
4936
5195
  __exportStar(__webpack_require__(/*! ./sql_over */ "../core/build/src/abap/2_statements/expressions/sql_over.js"), exports);
@@ -6610,13 +6869,13 @@ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_st
6610
6869
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
6611
6870
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
6612
6871
  const sql_into_structure_1 = __webpack_require__(/*! ./sql_into_structure */ "../core/build/src/abap/2_statements/expressions/sql_into_structure.js");
6613
- const select_core_1 = __webpack_require__(/*! ./select_core */ "../core/build/src/abap/2_statements/expressions/select_core.js");
6872
+ const _select_core_1 = __webpack_require__(/*! ./_select_core */ "../core/build/src/abap/2_statements/expressions/_select_core.js");
6614
6873
  class Select extends combi_1.Expression {
6615
6874
  getRunnable() {
6616
6875
  const into = (0, combi_1.altPrio)(_1.SQLIntoTable, sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList);
6617
- const standalone = (0, select_core_1.buildSelectCore)(into);
6876
+ const standalone = (0, _select_core_1.buildSelectCore)(into);
6618
6877
  const unionTail = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.plusPrio)(_1.SQLSetOp), version_1.Version.OpenABAP);
6619
- const chained = (0, combi_1.seq)((0, select_core_1.buildSelectCore)(undefined, false), unionTail, (0, combi_1.optPrio)(_1.SQLOrderBy), (0, combi_1.optPrio)(into));
6878
+ const chained = (0, combi_1.seq)((0, _select_core_1.buildSelectCore)(undefined, false), unionTail, (0, combi_1.optPrio)(_1.SQLOrderBy), (0, combi_1.optPrio)(into));
6620
6879
  return (0, combi_1.altPrio)(chained, standalone);
6621
6880
  }
6622
6881
  }
@@ -6625,86 +6884,48 @@ exports.Select = Select;
6625
6884
 
6626
6885
  /***/ },
6627
6886
 
6628
- /***/ "../core/build/src/abap/2_statements/expressions/select_core.js"
6629
- /*!**********************************************************************!*\
6630
- !*** ../core/build/src/abap/2_statements/expressions/select_core.js ***!
6631
- \**********************************************************************/
6887
+ /***/ "../core/build/src/abap/2_statements/expressions/select_cte.js"
6888
+ /*!*********************************************************************!*\
6889
+ !*** ../core/build/src/abap/2_statements/expressions/select_cte.js ***!
6890
+ \*********************************************************************/
6632
6891
  (__unused_webpack_module, exports, __webpack_require__) {
6633
6892
 
6634
6893
  "use strict";
6635
6894
 
6636
6895
  Object.defineProperty(exports, "__esModule", ({ value: true }));
6637
- exports.buildSelectCore = buildSelectCore;
6896
+ exports.SelectCTE = void 0;
6638
6897
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
6639
6898
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
6640
6899
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
6641
- const sql_group_by_1 = __webpack_require__(/*! ./sql_group_by */ "../core/build/src/abap/2_statements/expressions/sql_group_by.js");
6642
- const sql_into_structure_1 = __webpack_require__(/*! ./sql_into_structure */ "../core/build/src/abap/2_statements/expressions/sql_into_structure.js");
6643
- const sql_up_to_1 = __webpack_require__(/*! ./sql_up_to */ "../core/build/src/abap/2_statements/expressions/sql_up_to.js");
6644
- function buildSelectCore(into, allowOrderBy = true) {
6645
- const where = (0, combi_1.seq)("WHERE", _1.SQLCond);
6646
- const offset = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("OFFSET", _1.SQLSource));
6647
- const bypass = (0, combi_1.str)("BYPASSING BUFFER");
6648
- const fields = (0, combi_1.ver)(version_1.Version.v750, _1.SQLFields, version_1.Version.OpenABAP);
6649
- const privileged = (0, combi_1.ver)(version_1.Version.v758, _1.SQLPrivilegedAccess);
6650
- const orderByItems = allowOrderBy ? [_1.SQLOrderBy, sql_up_to_1.SQLUpTo, offset] : [];
6651
- const permItems = [_1.SQLFrom, ...(into ? [into] : []), _1.SQLForAllEntries, where,
6652
- ...orderByItems, _1.SQLClient, _1.SQLHaving,
6653
- bypass, sql_group_by_1.SQLGroupBy, fields, _1.DatabaseConnection, _1.SQLHints, privileged, _1.SQLOptions];
6654
- const perm = (0, combi_1.per)(permItems[0], permItems[1], ...permItems.slice(2));
6655
- const intoSingle = (0, combi_1.altPrio)(sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList);
6656
- const permSingleItems = [_1.SQLFrom, ...(into ? [intoSingle] : []), where, _1.SQLClient,
6657
- bypass, sql_group_by_1.SQLGroupBy, _1.SQLHaving, fields, _1.DatabaseConnection, _1.SQLHints, privileged, _1.SQLOptions];
6658
- const permSingle = (0, combi_1.per)(permSingleItems[0], permSingleItems[1], ...permSingleItems.slice(2));
6659
- const fieldList = (0, combi_1.optPrio)(_1.SQLFieldList);
6660
- const single = (0, combi_1.seq)("SINGLE", (0, combi_1.optPrio)("FOR UPDATE"), fieldList, permSingle);
6661
- const other = (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), fieldList, perm);
6662
- return (0, combi_1.seq)("SELECT", (0, combi_1.altPrio)(single, other));
6663
- }
6664
- //# sourceMappingURL=select_core.js.map
6665
-
6666
- /***/ },
6667
-
6668
- /***/ "../core/build/src/abap/2_statements/expressions/select_loop.js"
6669
- /*!**********************************************************************!*\
6670
- !*** ../core/build/src/abap/2_statements/expressions/select_loop.js ***!
6671
- \**********************************************************************/
6672
- (__unused_webpack_module, exports, __webpack_require__) {
6673
-
6674
- "use strict";
6675
-
6676
- Object.defineProperty(exports, "__esModule", ({ value: true }));
6677
- exports.SelectLoop = void 0;
6678
- const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
6679
- const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
6680
- const sql_order_by_1 = __webpack_require__(/*! ./sql_order_by */ "../core/build/src/abap/2_statements/expressions/sql_order_by.js");
6681
- const sql_having_1 = __webpack_require__(/*! ./sql_having */ "../core/build/src/abap/2_statements/expressions/sql_having.js");
6682
- const sql_into_structure_1 = __webpack_require__(/*! ./sql_into_structure */ "../core/build/src/abap/2_statements/expressions/sql_into_structure.js");
6683
- const sql_hints_1 = __webpack_require__(/*! ./sql_hints */ "../core/build/src/abap/2_statements/expressions/sql_hints.js");
6684
- const sql_field_list_loop_1 = __webpack_require__(/*! ./sql_field_list_loop */ "../core/build/src/abap/2_statements/expressions/sql_field_list_loop.js");
6685
- const sql_up_to_1 = __webpack_require__(/*! ./sql_up_to */ "../core/build/src/abap/2_statements/expressions/sql_up_to.js");
6686
- const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
6900
+ const sql_field_list_loop_greedy_1 = __webpack_require__(/*! ./sql_field_list_loop_greedy */ "../core/build/src/abap/2_statements/expressions/sql_field_list_loop_greedy.js");
6687
6901
  const sql_fields_loop_1 = __webpack_require__(/*! ./sql_fields_loop */ "../core/build/src/abap/2_statements/expressions/sql_fields_loop.js");
6688
- // note: SELECT loops are matched before single statement SELECTs
6689
- class SelectLoop extends combi_1.Expression {
6902
+ const sql_up_to_1 = __webpack_require__(/*! ./sql_up_to */ "../core/build/src/abap/2_statements/expressions/sql_up_to.js");
6903
+ const sql_source_1 = __webpack_require__(/*! ./sql_source */ "../core/build/src/abap/2_statements/expressions/sql_source.js");
6904
+ const sql_set_op_group_1 = __webpack_require__(/*! ./sql_set_op_group */ "../core/build/src/abap/2_statements/expressions/sql_set_op_group.js");
6905
+ class SelectCTE extends combi_1.Expression {
6690
6906
  getRunnable() {
6691
6907
  const where = (0, combi_1.seq)("WHERE", _1.SQLCond);
6692
6908
  const bypass = "BYPASSING BUFFER";
6693
- const pack = (0, combi_1.seq)("PACKAGE SIZE", _1.SQLSource);
6694
6909
  const privileged = (0, combi_1.ver)(version_1.Version.v758, _1.SQLPrivilegedAccess);
6695
- const tab = (0, combi_1.seq)(_1.SQLIntoTable, (0, combi_1.alt)(pack, (0, combi_1.seq)(_1.SQLFrom, pack), (0, combi_1.seq)(pack, _1.SQLFrom)));
6696
- const packTab = (0, combi_1.seq)(pack, _1.SQLIntoTable);
6697
- const into = (0, combi_1.altPrio)(sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList);
6698
- const perm = (0, combi_1.per)(_1.SQLFrom, where, sql_up_to_1.SQLUpTo, sql_order_by_1.SQLOrderBy, sql_having_1.SQLHaving, _1.SQLClient, bypass, _1.SQLGroupBy, _1.SQLForAllEntries, _1.DatabaseConnection, privileged, _1.SQLOptions, (0, combi_1.alt)(tab, sql_into_structure_1.SQLIntoStructure, _1.SQLIntoList, packTab));
6699
- const strict = (0, combi_1.seq)(_1.SQLFrom, (0, combi_1.ver)(version_1.Version.v750, sql_fields_loop_1.SQLFieldsLoop), (0, combi_1.optPrio)(_1.SQLForAllEntries), (0, combi_1.optPrio)((0, combi_1.seq)(where, (0, combi_1.optPrio)(sql_order_by_1.SQLOrderBy), into, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo))));
6700
- const aggrIntoBeforeFrom = (0, combi_1.seq)((0, combi_1.plusPrio)(_1.SQLAggregation), into, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), _1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), (0, combi_1.optPrio)(where), _1.SQLGroupBy);
6701
- const aggrIntoAfterFrom = (0, combi_1.seq)((0, combi_1.plusPrio)(_1.SQLAggregation), _1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), into, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), (0, combi_1.optPrio)(where), _1.SQLGroupBy);
6702
- const ret = (0, combi_1.seq)("SELECT", (0, combi_1.altPrio)((0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), sql_field_list_loop_1.SQLFieldListLoop, perm), strict, aggrIntoBeforeFrom, aggrIntoAfterFrom), (0, combi_1.optPrio)(sql_hints_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions));
6703
- return ret;
6910
+ const offset = (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("OFFSET", sql_source_1.SQLSource));
6911
+ const groupHaving = (0, combi_1.seq)((0, combi_1.optPrio)(_1.SQLGroupBy), (0, combi_1.optPrio)(_1.SQLHaving));
6912
+ const tail = (0, combi_1.seq)(groupHaving, (0, combi_1.optPrio)((0, combi_1.seq)(_1.SQLOrderBy, (0, combi_1.optPrio)(sql_up_to_1.SQLUpTo), (0, combi_1.optPrio)(offset))), (0, combi_1.optPrio)(_1.SQLHints), (0, combi_1.optPrio)(privileged), (0, combi_1.optPrio)(_1.SQLOptions), (0, combi_1.optPrio)(_1.DatabaseConnection));
6913
+ const sqlStyle = (0, combi_1.seq)(_1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), (0, combi_1.optPrio)(bypass), (0, combi_1.ver)(version_1.Version.v750, sql_fields_loop_1.SQLFieldsLoop, version_1.Version.OpenABAP), (0, combi_1.optPrio)(_1.SQLForAllEntries), (0, combi_1.optPrio)(where), tail);
6914
+ const abapStyle = (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), sql_field_list_loop_greedy_1.SQLFieldListLoopGreedy, _1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), (0, combi_1.optPrio)(bypass), (0, combi_1.optPrio)(_1.SQLForAllEntries), (0, combi_1.optPrio)(where), tail);
6915
+ const union = (0, combi_1.seq)("UNION", (0, combi_1.optPrio)((0, combi_1.altPrio)("DISTINCT", "ALL")));
6916
+ const intersectExcept = (0, combi_1.altPrio)((0, combi_1.seq)("INTERSECT", (0, combi_1.optPrio)("DISTINCT")), (0, combi_1.seq)("EXCEPT", (0, combi_1.optPrio)("DISTINCT")));
6917
+ const setOp = (0, combi_1.altPrio)((0, combi_1.ver)(version_1.Version.v750, union, version_1.Version.OpenABAP), (0, combi_1.ver)(version_1.Version.v756, intersectExcept));
6918
+ const operandSql = (0, combi_1.seq)(_1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), (0, combi_1.optPrio)(bypass), (0, combi_1.ver)(version_1.Version.v750, sql_fields_loop_1.SQLFieldsLoop, version_1.Version.OpenABAP), (0, combi_1.optPrio)(_1.SQLForAllEntries), (0, combi_1.optPrio)(where), groupHaving);
6919
+ const operandAbap = (0, combi_1.seq)((0, combi_1.optPrio)("DISTINCT"), sql_field_list_loop_greedy_1.SQLFieldListLoopGreedy, _1.SQLFrom, (0, combi_1.optPrio)(_1.SQLClient), (0, combi_1.optPrio)(bypass), (0, combi_1.optPrio)(_1.SQLForAllEntries), (0, combi_1.optPrio)(where), groupHaving);
6920
+ const operandCore = (0, combi_1.altPrio)(operandSql, operandAbap);
6921
+ const unionOperand = (0, combi_1.altPrio)(sql_set_op_group_1.SQLSetOpGroup, (0, combi_1.seq)("SELECT", operandCore));
6922
+ const unionTail = (0, combi_1.starPrio)((0, combi_1.seq)(setOp, unionOperand));
6923
+ const selectBody = (0, combi_1.seq)("SELECT", (0, combi_1.altPrio)(sqlStyle, abapStyle));
6924
+ return (0, combi_1.seq)(selectBody, unionTail);
6704
6925
  }
6705
6926
  }
6706
- exports.SelectLoop = SelectLoop;
6707
- //# sourceMappingURL=select_loop.js.map
6927
+ exports.SelectCTE = SelectCTE;
6928
+ //# sourceMappingURL=select_cte.js.map
6708
6929
 
6709
6930
  /***/ },
6710
6931
 
@@ -7297,12 +7518,12 @@ class SQLCompare extends combi_1.Expression {
7297
7518
  const between = (0, combi_1.seq)("BETWEEN", _1.SQLSource, "AND", _1.SQLSource);
7298
7519
  const like = (0, combi_1.seq)("LIKE", _1.SQLSource, (0, combi_1.optPrio)((0, combi_1.seq)("ESCAPE", _1.SQLSource)));
7299
7520
  const nul = (0, combi_1.seq)("IS", (0, combi_1.optPrio)("NOT"), (0, combi_1.altPrio)("NULL", (0, combi_1.ver)(version_1.Version.v753, "INITIAL")));
7300
- const source = new _1.SQLSource();
7301
7521
  const sub = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)("ALL", "ANY", "SOME")), subSelect);
7522
+ const source = new _1.SQLSource();
7302
7523
  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);
7303
7524
  const paren = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), _1.Source, (0, combi_1.tok)(tokens_1.WParenRightW));
7304
7525
  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);
7305
- const rett = (0, combi_1.seq)((0, combi_1.altPrio)(_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.SQLAggregation, _1.SQLFunction, source)), (0, combi_1.seq)((0, combi_1.optPrio)("NOT"), (0, combi_1.altPrio)(_1.SQLIn, like, between)), nul));
7526
+ 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));
7306
7527
  const exists = (0, combi_1.seq)("EXISTS", subSelect);
7307
7528
  return (0, combi_1.altPrio)(exists, _1.Dynamic, rett);
7308
7529
  }
@@ -7387,16 +7608,20 @@ class SQLField extends combi_1.Expression {
7387
7608
  const field = (0, combi_1.altPrio)(_1.SQLAggregation, fieldNoAgg);
7388
7609
  const parenField = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), field, (0, combi_1.tok)(tokens_1.WParenRightW));
7389
7610
  const parenFieldNoAgg = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), fieldNoAgg, (0, combi_1.tok)(tokens_1.WParenRightW));
7390
- // arithmetic without aggregates as operands: from v740sp05
7611
+ // without aggregates: from v740sp05
7391
7612
  const subNoAgg = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.altPrio)(parenFieldNoAgg, fieldNoAgg)));
7392
7613
  const arithNoAgg = (0, combi_1.ver)(version_1.Version.v740sp05, subNoAgg);
7393
- // arithmetic with aggregates as operands: from v754
7614
+ // with aggregates: from v754
7394
7615
  const subWithAgg = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.altPrio)(parenField, field)));
7395
7616
  const arithWithAgg = (0, combi_1.ver)(version_1.Version.v754, subWithAgg);
7396
7617
  const arith = (0, combi_1.altPrio)(arithWithAgg, arithNoAgg);
7397
7618
  const arithSequence = (0, combi_1.seq)(field, (0, combi_1.optPrio)(arith));
7398
7619
  const parenArithSequence = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WParenLeftW), arithSequence, (0, combi_1.tok)(tokens_1.WParenRightW));
7399
- return (0, combi_1.seq)((0, combi_1.altPrio)(parenArithSequence, arithSequence), (0, combi_1.optPrio)(as));
7620
+ // allows (a-b)*(c-d) — paren groups as operands, defined after parenArithSequence
7621
+ const subExtWithAgg = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.altPrio)(parenArithSequence, parenField, field)));
7622
+ const subExtNoAgg = (0, combi_1.plusPrio)((0, combi_1.seq)((0, combi_1.altPrio)("+", "-", "*", "/", "&&"), (0, combi_1.altPrio)(parenArithSequence, parenFieldNoAgg, fieldNoAgg)));
7623
+ const arithExt = (0, combi_1.altPrio)((0, combi_1.ver)(version_1.Version.v754, subExtWithAgg), (0, combi_1.ver)(version_1.Version.v740sp05, subExtNoAgg));
7624
+ return (0, combi_1.seq)((0, combi_1.altPrio)((0, combi_1.seq)(parenArithSequence, (0, combi_1.optPrio)(arithExt)), arithSequence), (0, combi_1.optPrio)(as));
7400
7625
  }
7401
7626
  }
7402
7627
  exports.SQLField = SQLField;
@@ -7450,7 +7675,7 @@ class SQLFieldList extends combi_1.Expression {
7450
7675
  const as = (0, combi_1.seq)("AS", _1.SQLAsName);
7451
7676
  const commaParenField = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), _1.SQLFieldName, (0, combi_1.altPrio)((0, combi_1.tok)(tokens_1.WParenRightW), (0, combi_1.tok)(tokens_1.WParenRight)), (0, combi_1.optPrio)(as));
7452
7677
  const nev = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.starPrio)((0, combi_1.seq)(",", (0, combi_1.altPrio)(_1.SQLField, commaParenField))), version_1.Version.OpenABAP);
7453
- const old = (0, combi_1.starPrio)(_1.SQLField);
7678
+ const old = (0, combi_1.starPrio)((0, combi_1.seq)((0, combi_1.stopBefore)("UP", "TO"), _1.SQLField));
7454
7679
  return (0, combi_1.altPrio)("*", _1.Dynamic, (0, combi_1.seq)(_1.SQLField, (0, combi_1.alt)(nev, old)));
7455
7680
  }
7456
7681
  }
@@ -7491,6 +7716,36 @@ exports.SQLFieldListLoop = SQLFieldListLoop;
7491
7716
 
7492
7717
  /***/ },
7493
7718
 
7719
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_field_list_loop_greedy.js"
7720
+ /*!*************************************************************************************!*\
7721
+ !*** ../core/build/src/abap/2_statements/expressions/sql_field_list_loop_greedy.js ***!
7722
+ \*************************************************************************************/
7723
+ (__unused_webpack_module, exports, __webpack_require__) {
7724
+
7725
+ "use strict";
7726
+
7727
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
7728
+ exports.SQLFieldListLoopGreedy = void 0;
7729
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7730
+ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
7731
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7732
+ const sql_path_1 = __webpack_require__(/*! ./sql_path */ "../core/build/src/abap/2_statements/expressions/sql_path.js");
7733
+ const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
7734
+ class SQLFieldListLoopGreedy extends combi_1.Expression {
7735
+ getRunnable() {
7736
+ const comma = (0, combi_1.opt)((0, combi_1.ver)(version_1.Version.v740sp05, ",", version_1.Version.OpenABAP));
7737
+ const as = (0, combi_1.seq)("AS", _1.SQLAsName);
7738
+ 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);
7739
+ 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);
7740
+ const fieldList = (0, combi_1.plusPrio)(entry);
7741
+ return (0, combi_1.altPrio)("*", _1.Dynamic, fieldList);
7742
+ }
7743
+ }
7744
+ exports.SQLFieldListLoopGreedy = SQLFieldListLoopGreedy;
7745
+ //# sourceMappingURL=sql_field_list_loop_greedy.js.map
7746
+
7747
+ /***/ },
7748
+
7494
7749
  /***/ "../core/build/src/abap/2_statements/expressions/sql_field_name.js"
7495
7750
  /*!*************************************************************************!*\
7496
7751
  !*** ../core/build/src/abap/2_statements/expressions/sql_field_name.js ***!
@@ -7504,7 +7759,7 @@ exports.SQLFieldName = void 0;
7504
7759
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7505
7760
  class SQLFieldName extends combi_1.Expression {
7506
7761
  getRunnable() {
7507
- return (0, combi_1.regex)(/^(?!(?:SINGLE|INTO|DISTINCT|AS|WHERE|FOR|HAVING|APPENDING|UP|FROM)$)(\/\w+\/)?(\*?\w+~(\/\w+\/)?(\w+|\*)|\w+)$/i);
7762
+ return (0, combi_1.regex)(/^(?!(?:FROM|INTO|HAVING|FOR|DISTINCT|UNION|INTERSECT|EXCEPT|NOT|WHEN|CASE|AS|APPENDING|WHERE|CONNECTION|EXISTS|INSERT|MODIFY)$)(\/\w+\/)?(\*?\w+~(\/\w+\/)?(\w+|\*)|\w+)$/i);
7508
7763
  }
7509
7764
  }
7510
7765
  exports.SQLFieldName = SQLFieldName;
@@ -7548,7 +7803,7 @@ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_st
7548
7803
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
7549
7804
  class SQLFieldsLoop extends combi_1.Expression {
7550
7805
  getRunnable() {
7551
- return (0, combi_1.seq)("FIELDS", (0, combi_1.opt)("DISTINCT"), _1.SQLFieldListLoop);
7806
+ return (0, combi_1.seq)("FIELDS", (0, combi_1.opt)("DISTINCT"), _1.SQLFieldListLoopGreedy);
7552
7807
  }
7553
7808
  }
7554
7809
  exports.SQLFieldsLoop = SQLFieldsLoop;
@@ -7633,7 +7888,7 @@ const with_name_1 = __webpack_require__(/*! ./with_name */ "../core/build/src/ab
7633
7888
  class SQLFromSource extends combi_1.Expression {
7634
7889
  getRunnable() {
7635
7890
  // https://help.sap.com/doc/abapdocu_752_index_htm/7.52/en-US/abennews-752-open_sql.htm#!ABAP_MODIFICATION_1@1@
7636
- const tab = (0, combi_1.ver)(version_1.Version.v752, (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WAt), _1.FieldChain));
7891
+ 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);
7637
7892
  const aas = (0, combi_1.seq)("AS", _1.SQLAsName);
7638
7893
  const privileged = (0, combi_1.ver)(version_1.Version.v752, (0, combi_1.seq)("WITH", _1.SQLPrivilegedAccess));
7639
7894
  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));
@@ -7662,7 +7917,7 @@ const sql_function_input_1 = __webpack_require__(/*! ./sql_function_input */ "..
7662
7917
  const sql_case_1 = __webpack_require__(/*! ./sql_case */ "../core/build/src/abap/2_statements/expressions/sql_case.js");
7663
7918
  class SQLFunction extends combi_1.Expression {
7664
7919
  getRunnable() {
7665
- const castTypes = (0, combi_1.altPrio)((0, combi_1.seq)("CHAR", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), (0, combi_1.seq)("DEC", (0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, ",", integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.seq)("NUMC", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), "DATS", "FLTP", "INT2", "INT4", "INT8");
7920
+ const castTypes = (0, combi_1.altPrio)((0, combi_1.seq)("CHAR", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), (0, combi_1.seq)("DEC", (0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, ",", integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)), (0, combi_1.seq)("NUMC", (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), integer_1.Integer, (0, combi_1.tok)(tokens_1.WParenRightW)))), "DATS", "FLTP", "INT1", "INT2", "INT4", "INT8");
7666
7921
  const commaParam = (0, combi_1.seq)(",", sql_function_input_1.SQLFunctionInput);
7667
7922
  // note: the function names are not keywords, they are usually in lower case
7668
7923
  const abs = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^abs$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
@@ -7670,7 +7925,7 @@ class SQLFunction extends combi_1.Expression {
7670
7925
  const castInput = (0, combi_1.altPrio)(sql_case_1.SQLCase, sql_function_input_1.SQLFunctionInput);
7671
7926
  const cast = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^cast$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), castInput, "AS", castTypes, (0, combi_1.tok)(tokens_1.WParenRightW)));
7672
7927
  const ceil = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^ceil$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
7673
- const coalesce = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^coalesce$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.optPrio)(commaParam), (0, combi_1.tok)(tokens_1.WParenRightW)));
7928
+ const coalesce = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^coalesce$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.starPrio)(commaParam), (0, combi_1.tok)(tokens_1.WParenRightW)));
7674
7929
  const concat = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)((0, combi_1.regex)(/^concat$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
7675
7930
  const div = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^div$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, commaParam, (0, combi_1.tok)(tokens_1.WParenRightW)));
7676
7931
  const floor = (0, combi_1.ver)(version_1.Version.v740sp05, (0, combi_1.seq)((0, combi_1.regex)(/^floor$/i), (0, combi_1.tok)(tokens_1.ParenLeftW), sql_function_input_1.SQLFunctionInput, (0, combi_1.tok)(tokens_1.WParenRightW)));
@@ -7927,11 +8182,13 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
7927
8182
  exports.SQLJoin = void 0;
7928
8183
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
7929
8184
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
8185
+ const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
7930
8186
  class SQLJoin extends combi_1.Expression {
7931
8187
  getRunnable() {
7932
8188
  const joinType = (0, combi_1.seq)((0, combi_1.optPrio)((0, combi_1.altPrio)("INNER", "LEFT OUTER", "LEFT", "RIGHT OUTER", "RIGHT")), "JOIN");
7933
8189
  const join = (0, combi_1.seq)(joinType, _1.SQLFromSource, "ON", _1.SQLCond);
7934
- return join;
8190
+ const crossJoin = (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)("CROSS JOIN", _1.SQLFromSource), version_1.Version.OpenABAP);
8191
+ return (0, combi_1.altPrio)(crossJoin, join);
7935
8192
  }
7936
8193
  }
7937
8194
  exports.SQLJoin = SQLJoin;
@@ -8028,6 +8285,28 @@ exports.SQLOver = SQLOver;
8028
8285
 
8029
8286
  /***/ },
8030
8287
 
8288
+ /***/ "../core/build/src/abap/2_statements/expressions/sql_package_size.js"
8289
+ /*!***************************************************************************!*\
8290
+ !*** ../core/build/src/abap/2_statements/expressions/sql_package_size.js ***!
8291
+ \***************************************************************************/
8292
+ (__unused_webpack_module, exports, __webpack_require__) {
8293
+
8294
+ "use strict";
8295
+
8296
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
8297
+ exports.SQLPackageSize = void 0;
8298
+ const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8299
+ const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
8300
+ class SQLPackageSize extends combi_1.Expression {
8301
+ getRunnable() {
8302
+ return (0, combi_1.seq)("PACKAGE SIZE", _1.SQLSource);
8303
+ }
8304
+ }
8305
+ exports.SQLPackageSize = SQLPackageSize;
8306
+ //# sourceMappingURL=sql_package_size.js.map
8307
+
8308
+ /***/ },
8309
+
8031
8310
  /***/ "../core/build/src/abap/2_statements/expressions/sql_path.js"
8032
8311
  /*!*******************************************************************!*\
8033
8312
  !*** ../core/build/src/abap/2_statements/expressions/sql_path.js ***!
@@ -8092,10 +8371,10 @@ exports.SQLSetOp = void 0;
8092
8371
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8093
8372
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8094
8373
  const sql_set_op_group_1 = __webpack_require__(/*! ./sql_set_op_group */ "../core/build/src/abap/2_statements/expressions/sql_set_op_group.js");
8095
- const select_core_1 = __webpack_require__(/*! ./select_core */ "../core/build/src/abap/2_statements/expressions/select_core.js");
8374
+ const _select_core_1 = __webpack_require__(/*! ./_select_core */ "../core/build/src/abap/2_statements/expressions/_select_core.js");
8096
8375
  class SQLSetOp extends combi_1.Expression {
8097
8376
  getRunnable() {
8098
- const operand = (0, combi_1.altPrio)(sql_set_op_group_1.SQLSetOpGroup, (0, select_core_1.buildSelectCore)(undefined, false));
8377
+ const operand = (0, combi_1.altPrio)(sql_set_op_group_1.SQLSetOpGroup, (0, _select_core_1.buildSelectCore)(undefined, false));
8099
8378
  const union = (0, combi_1.seq)("UNION", (0, combi_1.optPrio)((0, combi_1.altPrio)("DISTINCT", "ALL")));
8100
8379
  const intersectExcept = (0, combi_1.altPrio)((0, combi_1.seq)("INTERSECT", (0, combi_1.optPrio)("DISTINCT")), (0, combi_1.seq)("EXCEPT", (0, combi_1.optPrio)("DISTINCT")));
8101
8380
  const op = (0, combi_1.altPrio)((0, combi_1.ver)(version_1.Version.v750, union, version_1.Version.OpenABAP), (0, combi_1.ver)(version_1.Version.v756, intersectExcept));
@@ -8120,10 +8399,10 @@ exports.SQLSetOpGroup = void 0;
8120
8399
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
8121
8400
  const _1 = __webpack_require__(/*! . */ "../core/build/src/abap/2_statements/expressions/index.js");
8122
8401
  const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
8123
- const select_core_1 = __webpack_require__(/*! ./select_core */ "../core/build/src/abap/2_statements/expressions/select_core.js");
8402
+ const _select_core_1 = __webpack_require__(/*! ./_select_core */ "../core/build/src/abap/2_statements/expressions/_select_core.js");
8124
8403
  class SQLSetOpGroup extends combi_1.Expression {
8125
8404
  getRunnable() {
8126
- const operand = (0, combi_1.altPrio)(SQLSetOpGroup, (0, select_core_1.buildSelectCore)(undefined, false));
8405
+ const operand = (0, combi_1.altPrio)(SQLSetOpGroup, (0, _select_core_1.buildSelectCore)(undefined, false));
8127
8406
  const chain = (0, combi_1.seq)(operand, (0, combi_1.optPrio)((0, combi_1.seq)((0, combi_1.ver)(version_1.Version.v750, (0, combi_1.plusPrio)(_1.SQLSetOp), version_1.Version.OpenABAP), (0, combi_1.optPrio)(_1.SQLOrderBy))));
8128
8407
  return (0, combi_1.ver)(version_1.Version.v750, (0, combi_1.seq)("(", chain, ")"), version_1.Version.OpenABAP);
8129
8408
  }
@@ -8869,7 +9148,7 @@ class TypeTable extends combi_1.Expression {
8869
9148
  // "WITH" is not allowed as a field name in keys
8870
9149
  const typetable = (0, combi_1.alt)(generic, (0, combi_1.seq)(normal1, (0, combi_1.alt)((0, combi_1.opt)((0, combi_1.per)(header, initial, (0, combi_1.plusPrio)(type_table_key_1.TypeTableKey))), (0, combi_1.seq)((0, combi_1.plus)(type_table_key_1.TypeTableKey), (0, combi_1.optPrio)(initial))), (0, combi_1.optPrio)("VALUE IS INITIAL")));
8871
9150
  const occurs = (0, combi_1.seq)("OCCURS", (0, combi_1.altPrio)(_1.Integer, field_chain_1.FieldChain));
8872
- const derived = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("TABLE FOR", (0, combi_1.altPrio)("ACTION IMPORT", "ACTION RESULT", "CREATE", "EVENT", "REPORTED EARLY", "READ IMPORT", "FAILED EARLY", "FAILED", "LOCK", "DETERMINATION", "READ RESULT", "UPDATE", "DELETE"), (0, combi_1.alt)(_1.TypeName, _1.EntityAssociation)));
9151
+ const derived = (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("TABLE FOR", (0, combi_1.altPrio)("ACTION IMPORT", "ACTION RESULT", "CREATE", "EVENT", "REPORTED EARLY", "READ IMPORT", "FAILED EARLY", "FAILED", "LOCK", "DETERMINATION", "READ RESULT", "UPDATE", "DELETE"), (0, combi_1.alt)(_1.TypeName, _1.EntityAssociation)), version_1.Version.OpenABAP);
8873
9152
  const oldType = (0, combi_1.seq)((0, combi_1.opt)("REF TO"), _1.TypeName, (0, combi_1.alt)((0, combi_1.seq)(occurs, (0, combi_1.opt)(header)), header));
8874
9153
  const oldLike = (0, combi_1.seq)((0, combi_1.opt)("REF TO"), field_chain_1.FieldChain, (0, combi_1.alt)((0, combi_1.seq)(occurs, (0, combi_1.opt)(header)), header));
8875
9154
  const typeLine = (0, combi_1.seq)("LINE OF", _1.TypeName, occurs, header);
@@ -9044,9 +9323,12 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
9044
9323
  exports.WithName = void 0;
9045
9324
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
9046
9325
  const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
9326
+ const sql_field_name_1 = __webpack_require__(/*! ./sql_field_name */ "../core/build/src/abap/2_statements/expressions/sql_field_name.js");
9047
9327
  class WithName extends combi_1.Expression {
9048
9328
  getRunnable() {
9049
- return (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WPlus), (0, combi_1.regex)(/^\w+$/));
9329
+ // ( has no leading space, ) has leading space
9330
+ const colList = (0, combi_1.seq)((0, combi_1.tok)(tokens_1.ParenLeftW), sql_field_name_1.SQLFieldName, (0, combi_1.star)((0, combi_1.seq)(",", sql_field_name_1.SQLFieldName)), (0, combi_1.tok)(tokens_1.WParenRightW));
9331
+ return (0, combi_1.seq)((0, combi_1.tok)(tokens_1.WPlus), (0, combi_1.regex)(/^\w+$/), (0, combi_1.optPrio)(colList));
9050
9332
  }
9051
9333
  }
9052
9334
  exports.WithName = WithName;
@@ -9106,6 +9388,9 @@ class Result {
9106
9388
  peek() {
9107
9389
  return this.tokens[this.tokenIndex];
9108
9390
  }
9391
+ peekAt(offset) {
9392
+ return this.tokens[this.tokenIndex + offset];
9393
+ }
9109
9394
  shift(node) {
9110
9395
  const cp = this.nodes.slice();
9111
9396
  cp.push(node);
@@ -9181,7 +9466,8 @@ const combi_1 = __webpack_require__(/*! ./combi */ "../core/build/src/abap/2_sta
9181
9466
  const _statement_1 = __webpack_require__(/*! ./statements/_statement */ "../core/build/src/abap/2_statements/statements/_statement.js");
9182
9467
  const expand_macros_1 = __webpack_require__(/*! ./expand_macros */ "../core/build/src/abap/2_statements/expand_macros.js");
9183
9468
  const tokens_1 = __webpack_require__(/*! ../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
9184
- exports.STATEMENT_MAX_TOKENS = 1000;
9469
+ const _select_reclassify_1 = __webpack_require__(/*! ./_select_reclassify */ "../core/build/src/abap/2_statements/_select_reclassify.js");
9470
+ exports.STATEMENT_MAX_TOKENS = 20000;
9185
9471
  class StatementMap {
9186
9472
  constructor() {
9187
9473
  this.map = {};
@@ -9404,7 +9690,8 @@ class StatementParser {
9404
9690
  if (match) {
9405
9691
  const last = tokens[tokens.length - 1];
9406
9692
  match.push(new nodes_1.TokenNode(last));
9407
- return new nodes_1.StatementNode(st.statement, statement.getColon(), pragmas).setChildren(match);
9693
+ const matched = new nodes_1.StatementNode(st.statement, statement.getColon(), pragmas).setChildren(match);
9694
+ return (0, _select_reclassify_1.reclassifySelect)(matched, st.statement, pragmas);
9408
9695
  }
9409
9696
  }
9410
9697
  // next try the statements without specific keywords
@@ -9413,7 +9700,8 @@ class StatementParser {
9413
9700
  if (match) {
9414
9701
  const last = tokens[tokens.length - 1];
9415
9702
  match.push(new nodes_1.TokenNode(last));
9416
- return new nodes_1.StatementNode(st.statement, statement.getColon(), pragmas).setChildren(match);
9703
+ const matched = new nodes_1.StatementNode(st.statement, statement.getColon(), pragmas).setChildren(match);
9704
+ return (0, _select_reclassify_1.reclassifySelect)(matched, st.statement, pragmas);
9417
9705
  }
9418
9706
  }
9419
9707
  return statement;
@@ -10561,7 +10849,7 @@ class ClassDefinition {
10561
10849
  const risk = (0, combi_1.seq)("RISK LEVEL", level);
10562
10850
  const time = (0, combi_1.altPrio)("LONG", "MEDIUM", "SHORT");
10563
10851
  const duration = (0, combi_1.seq)("DURATION", time);
10564
- const blah = (0, combi_1.per)(expressions_1.ClassGlobal, expressions_1.ClassFinal, "ABSTRACT", (0, combi_1.seq)("INHERITING FROM", expressions_1.SuperClassName), create, "FOR TESTING", risk, "SHARED MEMORY ENABLED", duration, (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("FOR BEHAVIOR OF", expressions_1.BehaviorDefinitionName)), expressions_1.ClassFriends);
10852
+ const blah = (0, combi_1.per)(expressions_1.ClassGlobal, expressions_1.ClassFinal, "ABSTRACT", (0, combi_1.seq)("INHERITING FROM", expressions_1.SuperClassName), create, "FOR TESTING", risk, "SHARED MEMORY ENABLED", duration, (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("FOR BEHAVIOR OF", expressions_1.BehaviorDefinitionName), version_1.Version.OpenABAP), expressions_1.ClassFriends);
10565
10853
  const def = (0, combi_1.seq)("DEFINITION", (0, combi_1.optPrio)(blah));
10566
10854
  return (0, combi_1.seq)("CLASS", expressions_1.ClassName, def);
10567
10855
  }
@@ -14568,7 +14856,7 @@ class ModifyEntities {
14568
14856
  const create3 = (0, combi_1.seq)("CREATE BY", expressions_1.AssociationName, fieldsWith);
14569
14857
  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)));
14570
14858
  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));
14571
- return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("MODIFY", (0, combi_1.alt)(entities, entity), end));
14859
+ 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);
14572
14860
  }
14573
14861
  }
14574
14862
  exports.ModifyEntities = ModifyEntities;
@@ -15552,7 +15840,7 @@ class ReadEntities {
15552
15840
  const by = (0, combi_1.seq)("BY", expressions_1.AssociationName, fields);
15553
15841
  const sub = (0, combi_1.seq)((0, combi_1.alt)(all, fields, from, by, byall), result);
15554
15842
  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));
15555
- return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("READ", (0, combi_1.alt)(s, single)));
15843
+ return (0, combi_1.ver)(version_1.Version.v754, (0, combi_1.seq)("READ", (0, combi_1.alt)(s, single)), version_1.Version.OpenABAP);
15556
15844
  }
15557
15845
  }
15558
15846
  exports.ReadEntities = ReadEntities;
@@ -16111,7 +16399,7 @@ exports.SelectLoop = void 0;
16111
16399
  const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
16112
16400
  class SelectLoop {
16113
16401
  getMatcher() {
16114
- return new expressions_1.SelectLoop();
16402
+ return new expressions_1.Select();
16115
16403
  }
16116
16404
  }
16117
16405
  exports.SelectLoop = SelectLoop;
@@ -18027,8 +18315,8 @@ const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/s
18027
18315
  const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
18028
18316
  class With {
18029
18317
  getMatcher() {
18030
- const as = (0, combi_1.seq)(expressions_1.WithName, "AS", (0, combi_1.tok)(tokens_1.WParenLeftW), expressions_1.SelectLoop, (0, combi_1.tok)(tokens_1.WParenRightW));
18031
- return (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("WITH", (0, combi_1.plus)(as), expressions_1.Select));
18318
+ 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));
18319
+ 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));
18032
18320
  }
18033
18321
  }
18034
18322
  exports.With = With;
@@ -18046,14 +18334,10 @@ exports.With = With;
18046
18334
 
18047
18335
  Object.defineProperty(exports, "__esModule", ({ value: true }));
18048
18336
  exports.WithLoop = void 0;
18049
- const combi_1 = __webpack_require__(/*! ../combi */ "../core/build/src/abap/2_statements/combi.js");
18050
- const version_1 = __webpack_require__(/*! ../../../version */ "../core/build/src/version.js");
18051
- const tokens_1 = __webpack_require__(/*! ../../1_lexer/tokens */ "../core/build/src/abap/1_lexer/tokens/index.js");
18052
- const expressions_1 = __webpack_require__(/*! ../expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
18337
+ const with_1 = __webpack_require__(/*! ./with */ "../core/build/src/abap/2_statements/statements/with.js");
18053
18338
  class WithLoop {
18054
18339
  getMatcher() {
18055
- const as = (0, combi_1.seq)(expressions_1.WithName, "AS", (0, combi_1.tok)(tokens_1.WParenLeftW), expressions_1.SelectLoop, (0, combi_1.tok)(tokens_1.WParenRightW));
18056
- return (0, combi_1.ver)(version_1.Version.v751, (0, combi_1.seq)("WITH", (0, combi_1.plus)(as), expressions_1.SelectLoop));
18340
+ return new with_1.With().getMatcher();
18057
18341
  }
18058
18342
  }
18059
18343
  exports.WithLoop = WithLoop;
@@ -31482,15 +31766,7 @@ class Select {
31482
31766
  var _a, _b;
31483
31767
  let expr = undefined;
31484
31768
  const ret = [];
31485
- if (node.get() instanceof Expressions.SelectLoop) {
31486
- expr = node.findFirstExpression(Expressions.SQLFieldListLoop);
31487
- if (expr === undefined) {
31488
- expr = node;
31489
- }
31490
- }
31491
- else {
31492
- expr = node.findFirstExpression(Expressions.SQLFieldList);
31493
- }
31769
+ expr = node.findFirstExpression(Expressions.SQLFieldList);
31494
31770
  if (((_a = expr === null || expr === void 0 ? void 0 : expr.getFirstChild()) === null || _a === void 0 ? void 0 : _a.get()) instanceof Expressions.Dynamic) {
31495
31771
  dynamic_1.Dynamic.runSyntax(expr.getFirstChild(), input);
31496
31772
  }
@@ -31514,28 +31790,6 @@ exports.Select = Select;
31514
31790
 
31515
31791
  /***/ },
31516
31792
 
31517
- /***/ "../core/build/src/abap/5_syntax/expressions/select_loop.js"
31518
- /*!******************************************************************!*\
31519
- !*** ../core/build/src/abap/5_syntax/expressions/select_loop.js ***!
31520
- \******************************************************************/
31521
- (__unused_webpack_module, exports, __webpack_require__) {
31522
-
31523
- "use strict";
31524
-
31525
- Object.defineProperty(exports, "__esModule", ({ value: true }));
31526
- exports.SelectLoop = void 0;
31527
- const select_1 = __webpack_require__(/*! ./select */ "../core/build/src/abap/5_syntax/expressions/select.js");
31528
- class SelectLoop {
31529
- static runSyntax(node, input) {
31530
- // try using the other Select, they should look very much the same
31531
- select_1.Select.runSyntax(node, input);
31532
- }
31533
- }
31534
- exports.SelectLoop = SelectLoop;
31535
- //# sourceMappingURL=select_loop.js.map
31536
-
31537
- /***/ },
31538
-
31539
31793
  /***/ "../core/build/src/abap/5_syntax/expressions/source.js"
31540
31794
  /*!*************************************************************!*\
31541
31795
  !*** ../core/build/src/abap/5_syntax/expressions/source.js ***!
@@ -40705,6 +40959,67 @@ exports.Ranges = Ranges;
40705
40959
 
40706
40960
  /***/ },
40707
40961
 
40962
+ /***/ "../core/build/src/abap/5_syntax/statements/read_dataset.js"
40963
+ /*!******************************************************************!*\
40964
+ !*** ../core/build/src/abap/5_syntax/statements/read_dataset.js ***!
40965
+ \******************************************************************/
40966
+ (__unused_webpack_module, exports, __webpack_require__) {
40967
+
40968
+ "use strict";
40969
+
40970
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
40971
+ if (k2 === undefined) k2 = k;
40972
+ var desc = Object.getOwnPropertyDescriptor(m, k);
40973
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
40974
+ desc = { enumerable: true, get: function() { return m[k]; } };
40975
+ }
40976
+ Object.defineProperty(o, k2, desc);
40977
+ }) : (function(o, m, k, k2) {
40978
+ if (k2 === undefined) k2 = k;
40979
+ o[k2] = m[k];
40980
+ }));
40981
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
40982
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
40983
+ }) : function(o, v) {
40984
+ o["default"] = v;
40985
+ });
40986
+ var __importStar = (this && this.__importStar) || (function () {
40987
+ var ownKeys = function(o) {
40988
+ ownKeys = Object.getOwnPropertyNames || function (o) {
40989
+ var ar = [];
40990
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
40991
+ return ar;
40992
+ };
40993
+ return ownKeys(o);
40994
+ };
40995
+ return function (mod) {
40996
+ if (mod && mod.__esModule) return mod;
40997
+ var result = {};
40998
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40999
+ __setModuleDefault(result, mod);
41000
+ return result;
41001
+ };
41002
+ })();
41003
+ Object.defineProperty(exports, "__esModule", ({ value: true }));
41004
+ exports.ReadDataset = void 0;
41005
+ const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
41006
+ const source_1 = __webpack_require__(/*! ../expressions/source */ "../core/build/src/abap/5_syntax/expressions/source.js");
41007
+ const target_1 = __webpack_require__(/*! ../expressions/target */ "../core/build/src/abap/5_syntax/expressions/target.js");
41008
+ class ReadDataset {
41009
+ runSyntax(node, input) {
41010
+ for (const s of node.findDirectExpressions(Expressions.Source)) {
41011
+ source_1.Source.runSyntax(s, input);
41012
+ }
41013
+ for (const t of node.findDirectExpressions(Expressions.Target)) {
41014
+ target_1.Target.runSyntax(t, input);
41015
+ }
41016
+ }
41017
+ }
41018
+ exports.ReadDataset = ReadDataset;
41019
+ //# sourceMappingURL=read_dataset.js.map
41020
+
41021
+ /***/ },
41022
+
40708
41023
  /***/ "../core/build/src/abap/5_syntax/statements/read_entities.js"
40709
41024
  /*!*******************************************************************!*\
40710
41025
  !*** ../core/build/src/abap/5_syntax/statements/read_entities.js ***!
@@ -41546,12 +41861,12 @@ var __importStar = (this && this.__importStar) || (function () {
41546
41861
  Object.defineProperty(exports, "__esModule", ({ value: true }));
41547
41862
  exports.SelectLoop = void 0;
41548
41863
  const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
41549
- const select_loop_1 = __webpack_require__(/*! ../expressions/select_loop */ "../core/build/src/abap/5_syntax/expressions/select_loop.js");
41864
+ const select_1 = __webpack_require__(/*! ../expressions/select */ "../core/build/src/abap/5_syntax/expressions/select.js");
41550
41865
  class SelectLoop {
41551
41866
  runSyntax(node, input) {
41552
- const s = node.findDirectExpression(Expressions.SelectLoop);
41867
+ const s = node.findDirectExpression(Expressions.Select);
41553
41868
  if (s) {
41554
- select_loop_1.SelectLoop.runSyntax(s, input);
41869
+ select_1.Select.runSyntax(s, input);
41555
41870
  }
41556
41871
  }
41557
41872
  }
@@ -43653,15 +43968,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
43653
43968
  exports.With = void 0;
43654
43969
  const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
43655
43970
  const select_1 = __webpack_require__(/*! ../expressions/select */ "../core/build/src/abap/5_syntax/expressions/select.js");
43656
- const select_loop_1 = __webpack_require__(/*! ../expressions/select_loop */ "../core/build/src/abap/5_syntax/expressions/select_loop.js");
43657
43971
  class With {
43658
43972
  runSyntax(node, input) {
43659
43973
  for (const s of node.findAllExpressions(Expressions.Select)) {
43660
43974
  select_1.Select.runSyntax(s, input);
43661
43975
  }
43662
- for (const s of node.findAllExpressions(Expressions.SelectLoop)) {
43663
- select_loop_1.SelectLoop.runSyntax(s, input);
43664
- }
43665
43976
  }
43666
43977
  }
43667
43978
  exports.With = With;
@@ -43714,15 +44025,11 @@ Object.defineProperty(exports, "__esModule", ({ value: true }));
43714
44025
  exports.WithLoop = void 0;
43715
44026
  const Expressions = __importStar(__webpack_require__(/*! ../../2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js"));
43716
44027
  const select_1 = __webpack_require__(/*! ../expressions/select */ "../core/build/src/abap/5_syntax/expressions/select.js");
43717
- const select_loop_1 = __webpack_require__(/*! ../expressions/select_loop */ "../core/build/src/abap/5_syntax/expressions/select_loop.js");
43718
44028
  class WithLoop {
43719
44029
  runSyntax(node, input) {
43720
44030
  for (const s of node.findAllExpressions(Expressions.Select)) {
43721
44031
  select_1.Select.runSyntax(s, input);
43722
44032
  }
43723
- for (const s of node.findAllExpressions(Expressions.SelectLoop)) {
43724
- select_loop_1.SelectLoop.runSyntax(s, input);
43725
- }
43726
44033
  }
43727
44034
  }
43728
44035
  exports.WithLoop = WithLoop;
@@ -44707,6 +45014,7 @@ const insert_field_group_1 = __webpack_require__(/*! ./statements/insert_field_g
44707
45014
  const read_entities_1 = __webpack_require__(/*! ./statements/read_entities */ "../core/build/src/abap/5_syntax/statements/read_entities.js");
44708
45015
  const modify_entities_1 = __webpack_require__(/*! ./statements/modify_entities */ "../core/build/src/abap/5_syntax/statements/modify_entities.js");
44709
45016
  const commit_entities_1 = __webpack_require__(/*! ./statements/commit_entities */ "../core/build/src/abap/5_syntax/statements/commit_entities.js");
45017
+ const read_dataset_1 = __webpack_require__(/*! ./statements/read_dataset */ "../core/build/src/abap/5_syntax/statements/read_dataset.js");
44710
45018
  const _syntax_input_1 = __webpack_require__(/*! ./_syntax_input */ "../core/build/src/abap/5_syntax/_syntax_input.js");
44711
45019
  const assert_error_1 = __webpack_require__(/*! ./assert_error */ "../core/build/src/abap/5_syntax/assert_error.js");
44712
45020
  const field_group_1 = __webpack_require__(/*! ./statements/field_group */ "../core/build/src/abap/5_syntax/statements/field_group.js");
@@ -44835,6 +45143,7 @@ if (Object.keys(map).length === 0) {
44835
45143
  addToMap(new parameter_1.Parameter());
44836
45144
  addToMap(new fieldsymbol_1.FieldSymbol());
44837
45145
  addToMap(new read_entities_1.ReadEntities());
45146
+ addToMap(new read_dataset_1.ReadDataset());
44838
45147
  addToMap(new modify_entities_1.ModifyEntities());
44839
45148
  addToMap(new commit_entities_1.CommitEntities());
44840
45149
  addToMap(new call_kernel_1.CallKernel());
@@ -65683,7 +65992,7 @@ class Registry {
65683
65992
  }
65684
65993
  static abaplintVersion() {
65685
65994
  // magic, see build script "version.js"
65686
- return "2.119.29";
65995
+ return "2.119.31";
65687
65996
  }
65688
65997
  getDDICReferences() {
65689
65998
  return this.ddicReferences;
@@ -72625,6 +72934,9 @@ Make sure to test the downported code, it might not always be completely correct
72625
72934
  if (where === undefined) {
72626
72935
  return undefined;
72627
72936
  }
72937
+ if (high.findFirstExpression(Expressions.SQLFields) !== undefined) {
72938
+ return undefined;
72939
+ }
72628
72940
  let into = high.findFirstExpression(Expressions.SQLIntoList);
72629
72941
  if (into === undefined) {
72630
72942
  into = high.findFirstExpression(Expressions.SQLIntoStructure);
@@ -87047,11 +87359,13 @@ exports.PrefixIsCurrentClass = exports.PrefixIsCurrentClassConf = void 0;
87047
87359
  const issue_1 = __webpack_require__(/*! ../issue */ "../core/build/src/issue.js");
87048
87360
  const _abap_rule_1 = __webpack_require__(/*! ./_abap_rule */ "../core/build/src/rules/_abap_rule.js");
87049
87361
  const Structures = __importStar(__webpack_require__(/*! ../abap/3_structures/structures */ "../core/build/src/abap/3_structures/structures/index.js"));
87362
+ const Statements = __importStar(__webpack_require__(/*! ../abap/2_statements/statements */ "../core/build/src/abap/2_statements/statements/index.js"));
87050
87363
  const _basic_rule_config_1 = __webpack_require__(/*! ./_basic_rule_config */ "../core/build/src/rules/_basic_rule_config.js");
87051
87364
  const expressions_1 = __webpack_require__(/*! ../abap/2_statements/expressions */ "../core/build/src/abap/2_statements/expressions/index.js");
87052
87365
  const position_1 = __webpack_require__(/*! ../position */ "../core/build/src/position.js");
87053
87366
  const edit_helper_1 = __webpack_require__(/*! ../edit_helper */ "../core/build/src/edit_helper.js");
87054
87367
  const _irule_1 = __webpack_require__(/*! ./_irule */ "../core/build/src/rules/_irule.js");
87368
+ const comment_1 = __webpack_require__(/*! ../abap/1_lexer/tokens/comment */ "../core/build/src/abap/1_lexer/tokens/comment.js");
87055
87369
  class PrefixIsCurrentClassConf extends _basic_rule_config_1.BasicRuleConfig {
87056
87370
  constructor() {
87057
87371
  super(...arguments);
@@ -87127,11 +87441,16 @@ class PrefixIsCurrentClass extends _abap_rule_1.ABAPRule {
87127
87441
  for (const c of classStructures) {
87128
87442
  const className = c.findFirstExpression(expressions_1.ClassName).getFirstToken().getStr().toUpperCase();
87129
87443
  const staticAccess = className + "=>";
87444
+ const shadowed = this.buildShadowedNames(struc, c, className);
87130
87445
  for (const s of c.findAllStatementNodes()) {
87131
87446
  const concat = s.concatTokensWithoutStringsAndComments().toUpperCase();
87132
87447
  if (concat.includes(staticAccess)) {
87133
- const tokenPos = s.findTokenSequencePosition(className, "=>");
87134
- if (tokenPos) {
87448
+ // when the referenced member is shadowed by a method parameter or local
87449
+ // declaration, the class prefix is required and cannot be omitted, see issues #3755 and #3707
87450
+ const names = shadowed.get(s);
87451
+ const ref = this.findStaticReferences(s, className).find(r => r.member === undefined || (names === null || names === void 0 ? void 0 : names.has(r.member)) !== true);
87452
+ if (ref) {
87453
+ const tokenPos = ref.pos;
87135
87454
  const end = new position_1.Position(tokenPos.getRow(), tokenPos.getCol() + className.length + 2);
87136
87455
  const fix = edit_helper_1.EditHelper.deleteRange(file, tokenPos, end);
87137
87456
  issues.push(issue_1.Issue.atRange(file, tokenPos, end, "Reference to current class can be omitted: \"" + staticAccess + "\"", this.getMetadata().key, this.conf.severity, fix));
@@ -87151,6 +87470,62 @@ class PrefixIsCurrentClass extends _abap_rule_1.ABAPRule {
87151
87470
  }
87152
87471
  return issues;
87153
87472
  }
87473
+ /** finds "className=>member" references in the statement, position is the start of the class name */
87474
+ findStaticReferences(s, className) {
87475
+ var _a;
87476
+ const refs = [];
87477
+ const tokens = s.getTokens().filter(t => !(t instanceof comment_1.Comment));
87478
+ for (let i = 0; i < tokens.length - 1; i++) {
87479
+ if (tokens[i].getStr().toUpperCase() === className
87480
+ && tokens[i + 1].getStr() === "=>") {
87481
+ refs.push({
87482
+ pos: tokens[i].getStart(),
87483
+ member: (_a = tokens[i + 2]) === null || _a === void 0 ? void 0 : _a.getStr().toUpperCase(),
87484
+ });
87485
+ }
87486
+ }
87487
+ return refs;
87488
+ }
87489
+ /** for each statement in a method implementation: the method parameter and local
87490
+ * declaration names that shadow class members of the same name */
87491
+ buildShadowedNames(struc, impl, className) {
87492
+ var _a, _b, _c;
87493
+ const map = new Map();
87494
+ if (!(impl.get() instanceof Structures.ClassImplementation)) {
87495
+ return map;
87496
+ }
87497
+ const definition = struc.findDirectStructures(Structures.ClassDefinition).find(d => { var _a; return ((_a = d.findFirstExpression(expressions_1.ClassName)) === null || _a === void 0 ? void 0 : _a.getFirstToken().getStr().toUpperCase()) === className; });
87498
+ for (const method of impl.findAllStructuresRecursive(Structures.Method)) {
87499
+ const names = new Set();
87500
+ const methodName = (_b = (_a = method.findFirstStatement(Statements.MethodImplementation)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(expressions_1.MethodName)) === null || _b === void 0 ? void 0 : _b.concatTokens().toUpperCase();
87501
+ if (definition !== undefined && methodName !== undefined) {
87502
+ for (const def of definition.findAllStatements(Statements.MethodDef)) {
87503
+ if (((_c = def.findFirstExpression(expressions_1.MethodName)) === null || _c === void 0 ? void 0 : _c.concatTokens().toUpperCase()) === methodName) {
87504
+ for (const param of def.findAllExpressions(expressions_1.MethodParamName)) {
87505
+ names.add(param.concatTokens().toUpperCase());
87506
+ }
87507
+ break;
87508
+ }
87509
+ }
87510
+ }
87511
+ for (const d of method.findAllExpressions(expressions_1.DefinitionName)) {
87512
+ names.add(d.concatTokens().toUpperCase());
87513
+ }
87514
+ for (const inline of method.findAllExpressions(expressions_1.InlineData)) {
87515
+ const field = inline.findFirstExpression(expressions_1.TargetField);
87516
+ if (field) {
87517
+ names.add(field.concatTokens().toUpperCase());
87518
+ }
87519
+ }
87520
+ if (names.size === 0) {
87521
+ continue;
87522
+ }
87523
+ for (const statement of method.findAllStatementNodes()) {
87524
+ map.set(statement, names);
87525
+ }
87526
+ }
87527
+ return map;
87528
+ }
87154
87529
  }
87155
87530
  exports.PrefixIsCurrentClass = PrefixIsCurrentClass;
87156
87531
  //# sourceMappingURL=prefix_is_current_class.js.map
@@ -88279,12 +88654,10 @@ If the statement contains a JOIN it is not checked`,
88279
88654
  set.add(key);
88280
88655
  }
88281
88656
  for (const compare of (cond === null || cond === void 0 ? void 0 : cond.findAllExpressionsRecursive(Expressions.SQLCompare)) || []) {
88282
- if (compare.getChildren().length === 3) {
88283
- const fname = (_a = compare.findDirectExpression(Expressions.SQLFieldName)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
88284
- const operator = (_b = compare.findDirectExpression(Expressions.SQLCompareOperator)) === null || _b === void 0 ? void 0 : _b.concatTokens().toUpperCase();
88285
- if (fname && (operator === "=" || operator === "EQ")) {
88286
- set.delete(fname);
88287
- }
88657
+ const fname = (_a = compare.findDirectExpression(Expressions.SQLFieldName)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
88658
+ const operator = (_b = compare.findDirectExpression(Expressions.SQLCompareOperator)) === null || _b === void 0 ? void 0 : _b.concatTokens().toUpperCase();
88659
+ if (fname && (operator === "=" || operator === "EQ")) {
88660
+ set.delete(fname);
88288
88661
  }
88289
88662
  }
88290
88663
  if (set.size > 0) {
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@abaplint/cli",
3
- "version": "2.119.29",
3
+ "version": "2.119.31",
4
4
  "description": "abaplint - Command Line Interface",
5
5
  "funding": "https://github.com/sponsors/larshp",
6
6
  "bin": {
7
7
  "abaplint": "abaplint"
8
8
  },
9
9
  "scripts": {
10
- "lint": "eslint src/**/*.ts test/**/*.ts",
10
+ "lint": "eslint \"src/**/*.ts\" \"test/**/*.ts\"",
11
11
  "compile": "tsc",
12
12
  "test": "npm run compile && mocha && npm run lint && npm run webpack",
13
13
  "webpack": "webpack --progress",
@@ -38,7 +38,7 @@
38
38
  },
39
39
  "homepage": "https://abaplint.org",
40
40
  "devDependencies": {
41
- "@abaplint/core": "^2.119.29",
41
+ "@abaplint/core": "^2.119.31",
42
42
  "@types/chai": "^4.3.20",
43
43
  "@types/minimist": "^1.2.5",
44
44
  "@types/mocha": "^10.0.10",