@abaplint/transpiler 2.7.14 → 2.7.15

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.
@@ -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 core_1 = require("@abaplint/core");
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 ret = new chunk_1.Chunk();
9
- const dyn = node.findDirectExpression(core_1.Expressions.Dynamic);
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
- const sub = dyn.getChildren()[1];
12
- return traversal.traverse(sub);
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() + \"";
31
+ }
32
+ }
33
+ else {
34
+ val += concat.toLowerCase();
35
+ }
36
+ if (this.prefix === true) {
37
+ val += "\\\"";
13
38
  }
14
39
  else {
15
- ret.appendString('"' + node.concatTokens() + '"');
40
+ val += "\"";
16
41
  }
17
- return ret;
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
- // PARAMETER-TABLE
18
- pt = true;
19
- continue;
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
- if (c.findFirstExpression(abaplint.Expressions.Dynamic)) {
25
- let concat = c.concatTokens();
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, _traversal: Traversal): Chunk;
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, _traversal) {
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(c.concatTokens() + " ");
14
+ chunk.appendString(concat + " ");
13
15
  }
14
- else if (c.get() instanceof abaplint.Expressions.DatabaseTable && c.concatTokens().includes("/")) {
15
- chunk.appendString("\\\"" + c.concatTokens() + "\\\" ");
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(c.concatTokens() + " ");
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 table = traversal.traverse(node.findFirstExpression(abaplint.Expressions.DatabaseTable));
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 table = traversal.traverse(node.findFirstExpression(abaplint.Expressions.DatabaseTable));
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().toLowerCase()}, {${options.join(", ")}});`);
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 table = traversal.traverse(node.findFirstExpression(abaplint.Expressions.DatabaseTable));
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 table = traversal.traverse(node.findFirstExpression(abaplint.Expressions.DatabaseTable));
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.14",
3
+ "version": "2.7.15",
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.6",
32
+ "@abaplint/core": "^2.101.7",
33
33
  "source-map": "^0.7.4"
34
34
  },
35
35
  "devDependencies": {