@abaplint/transpiler 2.3.71 → 2.3.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/src/expressions/index.d.ts +3 -2
- package/build/src/expressions/index.js +3 -2
- package/build/src/expressions/sql_target.d.ts +7 -0
- package/build/src/expressions/sql_target.js +12 -0
- package/build/src/statements/index.d.ts +1 -0
- package/build/src/statements/index.js +1 -0
- package/build/src/statements/method_implementation.js +3 -0
- package/build/src/statements/select.js +6 -5
- package/build/src/statements/set_language.d.ts +7 -0
- package/build/src/statements/set_language.js +11 -0
- package/build/src/structures/select.js +4 -3
- package/build/src/validation.js +22 -1
- package/package.json +1 -1
|
@@ -19,8 +19,6 @@ export * from "./field_length";
|
|
|
19
19
|
export * from "./field_offset";
|
|
20
20
|
export * from "./field_symbol";
|
|
21
21
|
export * from "./function_exporting";
|
|
22
|
-
export * from "./sql_from";
|
|
23
|
-
export * from "./sql_join";
|
|
24
22
|
export * from "./function_parameters";
|
|
25
23
|
export * from "./message_number";
|
|
26
24
|
export * from "./method_call_body";
|
|
@@ -41,8 +39,11 @@ export * from "./simple_source4";
|
|
|
41
39
|
export * from "./source_field_symbol";
|
|
42
40
|
export * from "./source";
|
|
43
41
|
export * from "./sql_cond";
|
|
42
|
+
export * from "./sql_from";
|
|
43
|
+
export * from "./sql_join";
|
|
44
44
|
export * from "./sql_source_simple";
|
|
45
45
|
export * from "./sql_source";
|
|
46
|
+
export * from "./sql_target";
|
|
46
47
|
export * from "./string_template_source";
|
|
47
48
|
export * from "./string_template";
|
|
48
49
|
export * from "./target";
|
|
@@ -35,8 +35,6 @@ __exportStar(require("./field_length"), exports);
|
|
|
35
35
|
__exportStar(require("./field_offset"), exports);
|
|
36
36
|
__exportStar(require("./field_symbol"), exports);
|
|
37
37
|
__exportStar(require("./function_exporting"), exports);
|
|
38
|
-
__exportStar(require("./sql_from"), exports);
|
|
39
|
-
__exportStar(require("./sql_join"), exports);
|
|
40
38
|
__exportStar(require("./function_parameters"), exports);
|
|
41
39
|
__exportStar(require("./message_number"), exports);
|
|
42
40
|
__exportStar(require("./method_call_body"), exports);
|
|
@@ -57,8 +55,11 @@ __exportStar(require("./simple_source4"), exports);
|
|
|
57
55
|
__exportStar(require("./source_field_symbol"), exports);
|
|
58
56
|
__exportStar(require("./source"), exports);
|
|
59
57
|
__exportStar(require("./sql_cond"), exports);
|
|
58
|
+
__exportStar(require("./sql_from"), exports);
|
|
59
|
+
__exportStar(require("./sql_join"), exports);
|
|
60
60
|
__exportStar(require("./sql_source_simple"), exports);
|
|
61
61
|
__exportStar(require("./sql_source"), exports);
|
|
62
|
+
__exportStar(require("./sql_target"), exports);
|
|
62
63
|
__exportStar(require("./string_template_source"), exports);
|
|
63
64
|
__exportStar(require("./string_template"), exports);
|
|
64
65
|
__exportStar(require("./target"), exports);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Nodes } from "@abaplint/core";
|
|
2
|
+
import { IExpressionTranspiler } from "./_expression_transpiler";
|
|
3
|
+
import { Traversal } from "../traversal";
|
|
4
|
+
import { Chunk } from "../chunk";
|
|
5
|
+
export declare class SQLTargetTranspiler implements IExpressionTranspiler {
|
|
6
|
+
transpile(node: Nodes.ExpressionNode, traversal: Traversal): Chunk;
|
|
7
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SQLTargetTranspiler = void 0;
|
|
4
|
+
const abaplint = require("@abaplint/core");
|
|
5
|
+
class SQLTargetTranspiler {
|
|
6
|
+
transpile(node, traversal) {
|
|
7
|
+
const s = node.findDirectExpression(abaplint.Expressions.Target);
|
|
8
|
+
return traversal.traverse(s);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.SQLTargetTranspiler = SQLTargetTranspiler;
|
|
12
|
+
//# sourceMappingURL=sql_target.js.map
|
|
@@ -104,6 +104,7 @@ export * from "./select";
|
|
|
104
104
|
export * from "./set_bit";
|
|
105
105
|
export * from "./set_dataset";
|
|
106
106
|
export * from "./set_handler";
|
|
107
|
+
export * from "./set_language";
|
|
107
108
|
export * from "./set_locale";
|
|
108
109
|
export * from "./set_parameter";
|
|
109
110
|
export * from "./set_screen";
|
|
@@ -120,6 +120,7 @@ __exportStar(require("./select"), exports);
|
|
|
120
120
|
__exportStar(require("./set_bit"), exports);
|
|
121
121
|
__exportStar(require("./set_dataset"), exports);
|
|
122
122
|
__exportStar(require("./set_handler"), exports);
|
|
123
|
+
__exportStar(require("./set_language"), exports);
|
|
123
124
|
__exportStar(require("./set_locale"), exports);
|
|
124
125
|
__exportStar(require("./set_parameter"), exports);
|
|
125
126
|
__exportStar(require("./set_screen"), exports);
|
|
@@ -66,6 +66,9 @@ class MethodImplementationTranspiler {
|
|
|
66
66
|
else if (parameterDefault.getFirstToken().getStr().toLowerCase() === "space") {
|
|
67
67
|
val = "abap.builtin.space";
|
|
68
68
|
}
|
|
69
|
+
else if (parameterDefault.concatTokens().toLowerCase() === "sy-langu") {
|
|
70
|
+
val = "abap.builtin.sy.get().langu";
|
|
71
|
+
}
|
|
69
72
|
else if (parameterDefault.concatTokens().toLowerCase() === "sy-uname") {
|
|
70
73
|
val = "abap.builtin.sy.get().uname";
|
|
71
74
|
}
|
|
@@ -8,7 +8,7 @@ const unique_identifier_1 = require("../unique_identifier");
|
|
|
8
8
|
const sql_from_1 = require("../expressions/sql_from");
|
|
9
9
|
class SelectTranspiler {
|
|
10
10
|
transpile(node, traversal, targetOverride) {
|
|
11
|
-
var _a
|
|
11
|
+
var _a;
|
|
12
12
|
let target = "undefined";
|
|
13
13
|
if (targetOverride) {
|
|
14
14
|
target = targetOverride;
|
|
@@ -76,14 +76,15 @@ class SelectTranspiler {
|
|
|
76
76
|
}
|
|
77
77
|
if (node.findFirstExpression(abaplint.Expressions.SQLForAllEntries)) {
|
|
78
78
|
const unique = unique_identifier_1.UniqueIdentifier.get();
|
|
79
|
-
const
|
|
80
|
-
|
|
79
|
+
const fn = (_a = node.findFirstExpression(abaplint.Expressions.SQLForAllEntries)) === null || _a === void 0 ? void 0 : _a.findDirectExpression(abaplint.Expressions.SQLSource);
|
|
80
|
+
const faeTranspiled = new expressions_1.SQLSourceTranspiler().transpile(fn, traversal).getCode();
|
|
81
|
+
select = select.replace(new RegExp(" " + faeTranspiled, "g"), " " + unique);
|
|
81
82
|
select = select.replace(unique + ".get().table_line.get()", unique + ".get()"); // there can be only one?
|
|
82
|
-
const code = `if (${
|
|
83
|
+
const code = `if (${faeTranspiled}.array().length === 0) {
|
|
83
84
|
throw "FAE, todo, empty table";
|
|
84
85
|
} else {
|
|
85
86
|
abap.statements.clear(${target});
|
|
86
|
-
for await (const ${unique} of abap.statements.loop(${
|
|
87
|
+
for await (const ${unique} of abap.statements.loop(${faeTranspiled})) {
|
|
87
88
|
await abap.statements.select(${target}, {select: "${select.trim()}"${extra}}, {appending: true});
|
|
88
89
|
}
|
|
89
90
|
abap.builtin.sy.get().dbcnt.set(${target}.array().length);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as abaplint from "@abaplint/core";
|
|
2
|
+
import { IStatementTranspiler } from "./_statement_transpiler";
|
|
3
|
+
import { Traversal } from "../traversal";
|
|
4
|
+
import { Chunk } from "../chunk";
|
|
5
|
+
export declare class SetLanguageTranspiler implements IStatementTranspiler {
|
|
6
|
+
transpile(_node: abaplint.Nodes.StatementNode, _traversal: Traversal): Chunk;
|
|
7
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SetLanguageTranspiler = void 0;
|
|
4
|
+
const chunk_1 = require("../chunk");
|
|
5
|
+
class SetLanguageTranspiler {
|
|
6
|
+
transpile(_node, _traversal) {
|
|
7
|
+
return new chunk_1.Chunk(`throw new Error("SetLanguage, transpiler todo");`);
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.SetLanguageTranspiler = SetLanguageTranspiler;
|
|
11
|
+
//# sourceMappingURL=set_language.js.map
|
|
@@ -5,23 +5,24 @@ const abaplint = require("@abaplint/core");
|
|
|
5
5
|
const select_1 = require("../statements/select");
|
|
6
6
|
const chunk_1 = require("../chunk");
|
|
7
7
|
const unique_identifier_1 = require("../unique_identifier");
|
|
8
|
+
const expressions_1 = require("../expressions");
|
|
8
9
|
class SelectTranspiler {
|
|
9
10
|
transpile(node, traversal) {
|
|
10
|
-
var _a
|
|
11
|
+
var _a;
|
|
11
12
|
const ret = new chunk_1.Chunk();
|
|
12
13
|
const selectStatement = node.findFirstStatement(abaplint.Statements.SelectLoop);
|
|
13
14
|
if (selectStatement === undefined) {
|
|
14
15
|
throw "Structure, select loop not found";
|
|
15
16
|
}
|
|
16
17
|
const from = (_a = selectStatement.findFirstExpression(abaplint.Expressions.SQLFromSource)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
|
|
17
|
-
const intoName = (
|
|
18
|
+
const intoName = new expressions_1.SQLTargetTranspiler().transpile(selectStatement.findFirstExpression(abaplint.Expressions.SQLTarget), traversal).getCode();
|
|
18
19
|
// note: this implementation SELECTs everything into memory, which might be bad, and sometimes not correct
|
|
19
20
|
const targetName = unique_identifier_1.UniqueIdentifier.get();
|
|
20
21
|
const loopName = unique_identifier_1.UniqueIdentifier.get();
|
|
21
22
|
ret.appendString(`let ${targetName} = new abap.types.Table(abap.DDIC["${from}"].type);\n`);
|
|
22
23
|
ret.appendChunk(new select_1.SelectTranspiler().transpile(selectStatement, traversal, targetName));
|
|
23
24
|
ret.appendString(`\nfor (const ${loopName} of ${targetName}.array()) {\n`);
|
|
24
|
-
ret.appendString(`${intoName
|
|
25
|
+
ret.appendString(`${intoName}.set(${loopName});\n`);
|
|
25
26
|
const body = node.findDirectStructure(abaplint.Structures.Body);
|
|
26
27
|
if (body) {
|
|
27
28
|
ret.appendChunk(traversal.traverse(body));
|
package/build/src/validation.js
CHANGED
|
@@ -27,7 +27,28 @@ exports.config = {
|
|
|
27
27
|
},
|
|
28
28
|
"parser_error": true,
|
|
29
29
|
"allowed_object_types": {
|
|
30
|
-
"allowed": [
|
|
30
|
+
"allowed": [
|
|
31
|
+
"CLAS",
|
|
32
|
+
"DEVC",
|
|
33
|
+
"DOMA",
|
|
34
|
+
"DTEL",
|
|
35
|
+
"ENQU",
|
|
36
|
+
"FUGR",
|
|
37
|
+
"INTF",
|
|
38
|
+
"MSAG",
|
|
39
|
+
"NROB",
|
|
40
|
+
"PARA",
|
|
41
|
+
"PROG",
|
|
42
|
+
"SHLP",
|
|
43
|
+
"SHMA",
|
|
44
|
+
"SICF",
|
|
45
|
+
"SMIM",
|
|
46
|
+
"TABL",
|
|
47
|
+
"TTYP",
|
|
48
|
+
"TYPE",
|
|
49
|
+
"VIEW",
|
|
50
|
+
"XSLT",
|
|
51
|
+
],
|
|
31
52
|
},
|
|
32
53
|
"unknown_types": true,
|
|
33
54
|
"ambiguous_statement": true,
|