@abaplint/transpiler 2.7.95 → 2.7.97

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.
@@ -43,6 +43,7 @@ export * from "./source";
43
43
  export * from "./sql_arithmetic_operator";
44
44
  export * from "./sql_cond";
45
45
  export * from "./sql_field_and_value";
46
+ export * from "./sql_field_list";
46
47
  export * from "./sql_field_name";
47
48
  export * from "./sql_field";
48
49
  export * from "./sql_from_source";
@@ -59,6 +59,7 @@ __exportStar(require("./source"), exports);
59
59
  __exportStar(require("./sql_arithmetic_operator"), exports);
60
60
  __exportStar(require("./sql_cond"), exports);
61
61
  __exportStar(require("./sql_field_and_value"), exports);
62
+ __exportStar(require("./sql_field_list"), exports);
62
63
  __exportStar(require("./sql_field_name"), exports);
63
64
  __exportStar(require("./sql_field"), exports);
64
65
  __exportStar(require("./sql_from_source"), 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 SQLFieldListTranspiler implements IExpressionTranspiler {
6
+ transpile(node: Nodes.ExpressionNode, traversal: Traversal): Chunk;
7
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQLFieldListTranspiler = void 0;
4
+ const abaplint = require("@abaplint/core");
5
+ const chunk_1 = require("../chunk");
6
+ const sql_field_1 = require("./sql_field");
7
+ const sql_field_name_1 = require("./sql_field_name");
8
+ class SQLFieldListTranspiler {
9
+ transpile(node, traversal) {
10
+ const fields = [];
11
+ for (const f of node.getChildren() || []) {
12
+ if (f instanceof abaplint.Nodes.ExpressionNode && f.get() instanceof abaplint.Expressions.SQLField) {
13
+ const code = new sql_field_1.SQLFieldTranspiler().transpile(f, traversal).getCode();
14
+ fields.push(code);
15
+ }
16
+ else if (f instanceof abaplint.Nodes.ExpressionNode && f.get() instanceof abaplint.Expressions.SQLFieldName) {
17
+ const code = new sql_field_name_1.SQLFieldNameTranspiler().transpile(f, traversal).getCode();
18
+ fields.push(code);
19
+ }
20
+ else {
21
+ fields.push(f.concatTokens());
22
+ }
23
+ }
24
+ return new chunk_1.Chunk().append(fields.join(", "), node, traversal);
25
+ }
26
+ }
27
+ exports.SQLFieldListTranspiler = SQLFieldListTranspiler;
28
+ //# sourceMappingURL=sql_field_list.js.map
@@ -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 CloseCursorTranspiler implements IStatementTranspiler {
6
+ transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal): Chunk;
7
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloseCursorTranspiler = void 0;
4
+ const abaplint = require("@abaplint/core");
5
+ const chunk_1 = require("../chunk");
6
+ class CloseCursorTranspiler {
7
+ transpile(node, traversal) {
8
+ const cursor = traversal.traverse(node.findFirstExpression(abaplint.Expressions.SQLSourceSimple)).getCode();
9
+ return new chunk_1.Chunk().append(`await abap.statements.closeCursor(${cursor});`, node, traversal);
10
+ }
11
+ }
12
+ exports.CloseCursorTranspiler = CloseCursorTranspiler;
13
+ //# sourceMappingURL=close_cursor.js.map
@@ -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 FetchNextCursorTranspiler implements IStatementTranspiler {
6
+ transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal): Chunk;
7
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FetchNextCursorTranspiler = void 0;
4
+ const abaplint = require("@abaplint/core");
5
+ const chunk_1 = require("../chunk");
6
+ class FetchNextCursorTranspiler {
7
+ transpile(node, traversal) {
8
+ const cursor = traversal.traverse(node.findFirstExpression(abaplint.Expressions.SQLSourceSimple)).getCode();
9
+ // todo: APPENDING and CORRESPONDING FIELDS
10
+ const target = traversal.traverse(node.findFirstExpression(abaplint.Expressions.SQLTarget)).getCode();
11
+ let packageSize = "";
12
+ const siz = node.findExpressionAfterToken("SIZE");
13
+ if (siz) {
14
+ packageSize = ", " + traversal.traverse(siz).getCode();
15
+ }
16
+ return new chunk_1.Chunk().append(`await abap.statements.fetchNextCursor(${cursor}, ${target}${packageSize});`, node, traversal);
17
+ }
18
+ }
19
+ exports.FetchNextCursorTranspiler = FetchNextCursorTranspiler;
20
+ //# sourceMappingURL=fetch_next_cursor.js.map
@@ -21,6 +21,9 @@ export * from "./class_definition_load";
21
21
  export * from "./class_implementation";
22
22
  export * from "./class_local_friends";
23
23
  export * from "./clear";
24
+ export * from "./open_cursor";
25
+ export * from "./close_cursor";
26
+ export * from "./fetch_next_cursor";
24
27
  export * from "./close_dataset";
25
28
  export * from "./collect";
26
29
  export * from "./commit";
@@ -37,6 +37,9 @@ __exportStar(require("./class_definition_load"), exports);
37
37
  __exportStar(require("./class_implementation"), exports);
38
38
  __exportStar(require("./class_local_friends"), exports);
39
39
  __exportStar(require("./clear"), exports);
40
+ __exportStar(require("./open_cursor"), exports);
41
+ __exportStar(require("./close_cursor"), exports);
42
+ __exportStar(require("./fetch_next_cursor"), exports);
40
43
  __exportStar(require("./close_dataset"), exports);
41
44
  __exportStar(require("./collect"), exports);
42
45
  __exportStar(require("./commit"), exports);
@@ -27,6 +27,15 @@ class InsertDatabaseTranspiler {
27
27
  const tvalues = traversal.traverse(fromTable);
28
28
  options.push(`"table": ` + tvalues.getCode());
29
29
  }
30
+ const connection = node.findDirectExpression(abaplint.Expressions.DatabaseConnection);
31
+ if (connection) {
32
+ let con = connection.getLastToken().getStr().toUpperCase();
33
+ if (con === "DEFAULT_") {
34
+ // todo, workaround for replacing of keywords,
35
+ con = "DEFAULT";
36
+ }
37
+ options.push(`"connection": "${con}"`);
38
+ }
30
39
  return new chunk_1.Chunk(`await abap.statements.insertDatabase(${table.getCode()}, {${options.join(", ")}});`);
31
40
  }
32
41
  }
@@ -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 OpenCursorTranspiler implements IStatementTranspiler {
6
+ transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal): Chunk;
7
+ }
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OpenCursorTranspiler = void 0;
4
+ const abaplint = require("@abaplint/core");
5
+ const chunk_1 = require("../chunk");
6
+ class OpenCursorTranspiler {
7
+ transpile(node, traversal) {
8
+ const target = traversal.traverse(node.findDirectExpression(abaplint.Expressions.SQLTarget)).getCode();
9
+ const selectExpression = node.findDirectExpression(abaplint.Expressions.Select);
10
+ let select = "SELECT ";
11
+ select += traversal.traverse(selectExpression === null || selectExpression === void 0 ? void 0 : selectExpression.findDirectExpression(abaplint.Expressions.SQLFieldList)).getCode() + " ";
12
+ select += traversal.traverse(selectExpression === null || selectExpression === void 0 ? void 0 : selectExpression.findDirectExpression(abaplint.Expressions.SQLFrom)).getCode();
13
+ const cond = selectExpression === null || selectExpression === void 0 ? void 0 : selectExpression.findDirectExpression(abaplint.Expressions.SQLCond);
14
+ if (cond) {
15
+ select += "WHERE " + traversal.traverse(node).getCode();
16
+ }
17
+ const orderBy = selectExpression === null || selectExpression === void 0 ? void 0 : selectExpression.findDirectExpression(abaplint.Expressions.SQLOrderBy);
18
+ if (orderBy) {
19
+ select += "ORDER BY " + traversal.traverse(node).getCode();
20
+ }
21
+ return new chunk_1.Chunk().append(`await abap.statements.openCursor(${target}, "${select}");`, node, traversal);
22
+ }
23
+ }
24
+ exports.OpenCursorTranspiler = OpenCursorTranspiler;
25
+ //# sourceMappingURL=open_cursor.js.map
@@ -27,21 +27,10 @@ class SelectTranspiler {
27
27
  let select = "SELECT ";
28
28
  const fieldList = node.findFirstExpression(abaplint.Expressions.SQLFieldList)
29
29
  || node.findFirstExpression(abaplint.Expressions.SQLFieldListLoop);
30
- const fields = [];
31
- for (const f of (fieldList === null || fieldList === void 0 ? void 0 : fieldList.getChildren()) || []) {
32
- if (f instanceof abaplint.Nodes.ExpressionNode && f.get() instanceof abaplint.Expressions.SQLField) {
33
- const code = new expressions_1.SQLFieldTranspiler().transpile(f, traversal).getCode();
34
- fields.push(code);
35
- }
36
- else if (f instanceof abaplint.Nodes.ExpressionNode && f.get() instanceof abaplint.Expressions.SQLFieldName) {
37
- const code = new expressions_1.SQLFieldNameTranspiler().transpile(f, traversal).getCode();
38
- fields.push(code);
39
- }
40
- else {
41
- fields.push(f.concatTokens());
42
- }
30
+ if (fieldList === undefined) {
31
+ throw new Error("SelectTranspiler, field list not found");
43
32
  }
44
- select += fields.join(", ") + " ";
33
+ select += new expressions_1.SQLFieldListTranspiler().transpile(fieldList, traversal).getCode() + " ";
45
34
  const from = node.findFirstExpression(abaplint.Expressions.SQLFrom);
46
35
  if (from) {
47
36
  select += new sql_from_1.SQLFromTranspiler().transpile(from, traversal).getCode();
@@ -23,6 +23,7 @@ class SelectTranspiler {
23
23
  const loopName = unique_identifier_1.UniqueIdentifier.get();
24
24
  ret.appendString(`let ${targetName} = new abap.types.Table(abap.DDIC["${from}"].type);\n`);
25
25
  ret.appendChunk(new select_1.SelectTranspiler().transpile(selectStatement, traversal, targetName));
26
+ // todo: optimize, it should do real streaming?
26
27
  const packageSize = (_b = node.findFirstExpression(abaplint.Expressions.SelectLoop)) === null || _b === void 0 ? void 0 : _b.findExpressionAfterToken("SIZE");
27
28
  if (packageSize) {
28
29
  const getSize = new expressions_1.SQLSourceTranspiler().transpile(packageSize, traversal).getCode() + ".get()";
@@ -21,15 +21,24 @@ globalThis.abap = new runtime.ABAP();\n`;
21
21
  export async function initializeABAP() {\n`;
22
22
  ret += ` const sqlite = [];\n`;
23
23
  for (const i of dbSetup.schemas.sqlite) {
24
- ret += `sqlite.push(\`${i}\`);\n`;
24
+ ret += ` sqlite.push(\`${i}\`);\n`;
25
25
  }
26
26
  ret += ` const hdb = \`${dbSetup.schemas.hdb}\`;\n`;
27
- ret += ` const pg = \`${dbSetup.schemas.pg}\`;\n`;
28
- ret += ` const schemas = {sqlite, hdb, pg};\n`;
27
+ ret += ` const pg = [];\n`;
28
+ for (const i of dbSetup.schemas.pg) {
29
+ ret += ` pg.push(\`${i}\`);\n`;
30
+ }
31
+ ret += ` const snowflake = [];\n`;
32
+ for (const i of dbSetup.schemas.snowflake) {
33
+ ret += ` snowflake.push(\`${i}\`);\n`;
34
+ }
35
+ ret += ` const schemas = {sqlite, hdb, pg, snowflake};\n`;
36
+ ret += `\n`;
29
37
  ret += ` const insert = [];\n`;
30
38
  for (const i of dbSetup.insert) {
31
39
  ret += ` insert.push(\`${i}\`);\n`;
32
40
  }
41
+ ret += `\n`;
33
42
  if (extraSetup === undefined) {
34
43
  ret += `// no setup logic specified in config\n`;
35
44
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler",
3
- "version": "2.7.95",
3
+ "version": "2.7.97",
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.102.37",
32
+ "@abaplint/core": "^2.102.41",
33
33
  "source-map": "^0.7.4"
34
34
  },
35
35
  "devDependencies": {