@abaplint/transpiler 2.7.14 → 2.7.16
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/database_table.d.ts +2 -0
- package/build/src/expressions/database_table.js +32 -7
- package/build/src/expressions/method_call_body.js +8 -3
- package/build/src/expressions/sql_from.js +2 -15
- package/build/src/expressions/sql_from_source.d.ts +1 -1
- package/build/src/expressions/sql_from_source.js +8 -9
- package/build/src/statements/delete_database.js +6 -1
- package/build/src/statements/insert_database.js +7 -2
- package/build/src/statements/modify_database.js +6 -1
- package/build/src/statements/update_database.js +6 -1
- package/package.json +2 -2
|
@@ -3,5 +3,7 @@ import { IExpressionTranspiler } from "./_expression_transpiler";
|
|
|
3
3
|
import { Traversal } from "../traversal";
|
|
4
4
|
import { Chunk } from "../chunk";
|
|
5
5
|
export declare class DatabaseTableTranspiler implements IExpressionTranspiler {
|
|
6
|
+
private readonly prefix;
|
|
7
|
+
constructor(prefix?: boolean);
|
|
6
8
|
transpile(node: Nodes.ExpressionNode, traversal: Traversal): Chunk;
|
|
7
9
|
}
|
|
@@ -1,20 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DatabaseTableTranspiler = void 0;
|
|
4
|
-
const
|
|
4
|
+
const abaplint = require("@abaplint/core");
|
|
5
5
|
const chunk_1 = require("../chunk");
|
|
6
6
|
class DatabaseTableTranspiler {
|
|
7
|
+
constructor(prefix = true) {
|
|
8
|
+
this.prefix = prefix;
|
|
9
|
+
}
|
|
7
10
|
transpile(node, traversal) {
|
|
8
|
-
const
|
|
9
|
-
const
|
|
11
|
+
const chunk = new chunk_1.Chunk();
|
|
12
|
+
const concat = node.concatTokens();
|
|
13
|
+
let val = "";
|
|
14
|
+
if (this.prefix === true) {
|
|
15
|
+
val = `" + abap.dbo.schemaPrefix + "\\"" + abap.dbo.tablePrefix + "`;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
val = "\"";
|
|
19
|
+
}
|
|
20
|
+
const dyn = node.findDirectExpression(abaplint.Expressions.Dynamic);
|
|
10
21
|
if (dyn) {
|
|
11
|
-
|
|
12
|
-
|
|
22
|
+
if (concat.startsWith("('")) {
|
|
23
|
+
val += concat.substring(2, concat.length - 2).toLowerCase();
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
const foo = traversal.traverse(dyn.findDirectExpression(abaplint.Expressions.FieldChain));
|
|
27
|
+
if (this.prefix === false) {
|
|
28
|
+
return foo;
|
|
29
|
+
}
|
|
30
|
+
val += "\" + " + foo.getCode() + ".get().trimEnd().toLowerCase() + \"";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
val += concat.toLowerCase();
|
|
35
|
+
}
|
|
36
|
+
if (this.prefix === true) {
|
|
37
|
+
val += "\\\"";
|
|
13
38
|
}
|
|
14
39
|
else {
|
|
15
|
-
|
|
40
|
+
val += "\"";
|
|
16
41
|
}
|
|
17
|
-
return
|
|
42
|
+
return chunk.appendString(val);
|
|
18
43
|
}
|
|
19
44
|
}
|
|
20
45
|
exports.DatabaseTableTranspiler = DatabaseTableTranspiler;
|
|
@@ -14,9 +14,14 @@ class MethodCallBodyTranspiler {
|
|
|
14
14
|
let pt = false;
|
|
15
15
|
for (const c of node.getChildren()) {
|
|
16
16
|
if (c instanceof core_1.Nodes.TokenNode) {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
if (c.concatTokens().toUpperCase() === "PARAMETER") {
|
|
18
|
+
// PARAMETER-TABLE
|
|
19
|
+
pt = true;
|
|
20
|
+
}
|
|
21
|
+
else if (c.concatTokens().toUpperCase() === "EXCEPTION") {
|
|
22
|
+
// todo: handle EXCEPTION-TABLE, for now just produce valid javascript
|
|
23
|
+
return ret;
|
|
24
|
+
}
|
|
20
25
|
}
|
|
21
26
|
else if (c.get() instanceof abaplint.Expressions.MethodCallParam) {
|
|
22
27
|
ret.appendChunk(new method_call_param_1.MethodCallParamTranspiler(this.m).transpile(c, traversal));
|
|
@@ -21,21 +21,8 @@ class SQLFromTranspiler {
|
|
|
21
21
|
chunk.appendChunk(new sql_from_source_1.SQLFromSourceTranspiler().transpile(c, traversal));
|
|
22
22
|
}
|
|
23
23
|
else {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if (concat.startsWith("'")) {
|
|
27
|
-
// no escaping needed, guess its not possible to have table names with single or double quote part of name
|
|
28
|
-
concat = "\\\"" + concat.substring(1, concat.length - 1) + "\\\"";
|
|
29
|
-
}
|
|
30
|
-
chunk.appendString(concat + " ");
|
|
31
|
-
}
|
|
32
|
-
else if (c.concatTokens().includes("/")) {
|
|
33
|
-
chunk.appendString("\\\"" + c.concatTokens() + "\\\" ");
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
const concat = c.concatTokens();
|
|
37
|
-
chunk.appendString(concat + " ");
|
|
38
|
-
}
|
|
24
|
+
const concat = c.concatTokens();
|
|
25
|
+
chunk.appendString(concat + " ");
|
|
39
26
|
}
|
|
40
27
|
}
|
|
41
28
|
return chunk;
|
|
@@ -3,5 +3,5 @@ import { IExpressionTranspiler } from "./_expression_transpiler";
|
|
|
3
3
|
import { Traversal } from "../traversal";
|
|
4
4
|
import { Chunk } from "../chunk";
|
|
5
5
|
export declare class SQLFromSourceTranspiler implements IExpressionTranspiler {
|
|
6
|
-
transpile(node: Nodes.ExpressionNode,
|
|
6
|
+
transpile(node: Nodes.ExpressionNode, traversal: Traversal): Chunk;
|
|
7
7
|
}
|
|
@@ -3,23 +3,22 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.SQLFromSourceTranspiler = void 0;
|
|
4
4
|
const abaplint = require("@abaplint/core");
|
|
5
5
|
const chunk_1 = require("../chunk");
|
|
6
|
+
const database_table_1 = require("./database_table");
|
|
6
7
|
class SQLFromSourceTranspiler {
|
|
7
|
-
transpile(node,
|
|
8
|
+
transpile(node, traversal) {
|
|
8
9
|
const chunk = new chunk_1.Chunk();
|
|
9
10
|
for (const c of node.getChildren()) {
|
|
11
|
+
const concat = c.concatTokens();
|
|
10
12
|
if (c instanceof abaplint.Nodes.TokenNode) {
|
|
11
13
|
// keywords
|
|
12
|
-
chunk.appendString(
|
|
14
|
+
chunk.appendString(concat + " ");
|
|
13
15
|
}
|
|
14
|
-
else if (c.get() instanceof abaplint.Expressions.DatabaseTable
|
|
15
|
-
chunk.
|
|
16
|
-
|
|
17
|
-
else if (c.get() instanceof abaplint.Expressions.DatabaseTable && c.concatTokens().startsWith("('")) {
|
|
18
|
-
const concat = c.concatTokens();
|
|
19
|
-
chunk.appendString("\\\"" + concat.substring(2, concat.length - 2).toLowerCase() + "\\\" ");
|
|
16
|
+
else if (c.get() instanceof abaplint.Expressions.DatabaseTable) {
|
|
17
|
+
chunk.appendChunk(new database_table_1.DatabaseTableTranspiler().transpile(c, traversal));
|
|
18
|
+
chunk.appendString(" ");
|
|
20
19
|
}
|
|
21
20
|
else {
|
|
22
|
-
chunk.appendString(
|
|
21
|
+
chunk.appendString(concat + " ");
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
24
|
return chunk;
|
|
@@ -3,9 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DeleteDatabaseTranspiler = void 0;
|
|
4
4
|
const abaplint = require("@abaplint/core");
|
|
5
5
|
const chunk_1 = require("../chunk");
|
|
6
|
+
const expressions_1 = require("../expressions");
|
|
6
7
|
class DeleteDatabaseTranspiler {
|
|
7
8
|
transpile(node, traversal) {
|
|
8
|
-
const
|
|
9
|
+
const dbtab = node.findFirstExpression(abaplint.Expressions.DatabaseTable);
|
|
10
|
+
if (dbtab === undefined) {
|
|
11
|
+
throw new Error("internal error, InsertDatabaseTranspiler");
|
|
12
|
+
}
|
|
13
|
+
const table = new expressions_1.DatabaseTableTranspiler(false).transpile(dbtab, traversal);
|
|
9
14
|
const options = [];
|
|
10
15
|
const tab = node.findExpressionAfterToken("TABLE");
|
|
11
16
|
if (tab) {
|
|
@@ -3,9 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.InsertDatabaseTranspiler = void 0;
|
|
4
4
|
const abaplint = require("@abaplint/core");
|
|
5
5
|
const chunk_1 = require("../chunk");
|
|
6
|
+
const expressions_1 = require("../expressions");
|
|
6
7
|
class InsertDatabaseTranspiler {
|
|
7
8
|
transpile(node, traversal) {
|
|
8
|
-
const
|
|
9
|
+
const dbtab = node.findFirstExpression(abaplint.Expressions.DatabaseTable);
|
|
10
|
+
if (dbtab === undefined) {
|
|
11
|
+
throw new Error("internal error, InsertDatabaseTranspiler");
|
|
12
|
+
}
|
|
13
|
+
const table = new expressions_1.DatabaseTableTranspiler(false).transpile(dbtab, traversal);
|
|
9
14
|
const options = [];
|
|
10
15
|
const values = node.findExpressionAfterToken("VALUES");
|
|
11
16
|
if (values) {
|
|
@@ -22,7 +27,7 @@ class InsertDatabaseTranspiler {
|
|
|
22
27
|
const tvalues = traversal.traverse(fromTable);
|
|
23
28
|
options.push(`"table": ` + tvalues.getCode());
|
|
24
29
|
}
|
|
25
|
-
return new chunk_1.Chunk(`await abap.statements.insertDatabase(${table.getCode()
|
|
30
|
+
return new chunk_1.Chunk(`await abap.statements.insertDatabase(${table.getCode()}, {${options.join(", ")}});`);
|
|
26
31
|
}
|
|
27
32
|
}
|
|
28
33
|
exports.InsertDatabaseTranspiler = InsertDatabaseTranspiler;
|
|
@@ -3,9 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ModifyDatabaseTranspiler = void 0;
|
|
4
4
|
const abaplint = require("@abaplint/core");
|
|
5
5
|
const chunk_1 = require("../chunk");
|
|
6
|
+
const expressions_1 = require("../expressions");
|
|
6
7
|
class ModifyDatabaseTranspiler {
|
|
7
8
|
transpile(node, traversal) {
|
|
8
|
-
const
|
|
9
|
+
const dbtab = node.findFirstExpression(abaplint.Expressions.DatabaseTable);
|
|
10
|
+
if (dbtab === undefined) {
|
|
11
|
+
throw new Error("internal error, ModifyDatabaseTranspiler");
|
|
12
|
+
}
|
|
13
|
+
const table = new expressions_1.DatabaseTableTranspiler(false).transpile(dbtab, traversal);
|
|
9
14
|
const options = [];
|
|
10
15
|
const tab = node.findExpressionAfterToken("TABLE");
|
|
11
16
|
if (tab) {
|
|
@@ -3,10 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.UpdateDatabaseTranspiler = void 0;
|
|
4
4
|
const abaplint = require("@abaplint/core");
|
|
5
5
|
const chunk_1 = require("../chunk");
|
|
6
|
+
const expressions_1 = require("../expressions");
|
|
6
7
|
class UpdateDatabaseTranspiler {
|
|
7
8
|
transpile(node, traversal) {
|
|
8
9
|
var _a;
|
|
9
|
-
const
|
|
10
|
+
const dbtab = node.findFirstExpression(abaplint.Expressions.DatabaseTable);
|
|
11
|
+
if (dbtab === undefined) {
|
|
12
|
+
throw new Error("internal error, UpdateDatabaseTranspiler");
|
|
13
|
+
}
|
|
14
|
+
const table = new expressions_1.DatabaseTableTranspiler(false).transpile(dbtab, traversal);
|
|
10
15
|
const options = [];
|
|
11
16
|
const cond = node.findFirstExpression(abaplint.Expressions.SQLCond);
|
|
12
17
|
if (cond) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@abaplint/transpiler",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.16",
|
|
4
4
|
"description": "Transpiler",
|
|
5
5
|
"main": "build/src/index.js",
|
|
6
6
|
"typings": "build/src/index.d.ts",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"author": "abaplint",
|
|
30
30
|
"license": "MIT",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@abaplint/core": "^2.101.
|
|
32
|
+
"@abaplint/core": "^2.101.7",
|
|
33
33
|
"source-map": "^0.7.4"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|