@abaplint/transpiler 2.1.0 → 2.1.3

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.
@@ -61,7 +61,7 @@ class SQLiteDatabaseSchema {
61
61
  return `DECIMAL(${type.getLength()},${type.getDecimals()})`;
62
62
  }
63
63
  else if (type instanceof abaplint.BasicTypes.VoidType) {
64
- throw `Type of ${table}-${fieldname} is VoidType(${type.getVoided()}), make sure the type is know, enable strict syntax checking`;
64
+ throw `Type of ${table}-${fieldname} is VoidType(${type.getVoided()}), make sure the type is known, enable strict syntax checking`;
65
65
  }
66
66
  else {
67
67
  throw "database_setup: " + table + "-" + fieldname + ", todo toType handle: " + type.constructor.name;
@@ -3,7 +3,7 @@ import { IStatementTranspiler } from "./_statement_transpiler";
3
3
  import { Traversal } from "../traversal";
4
4
  import { Chunk } from "../chunk";
5
5
  export declare class SelectTranspiler implements IStatementTranspiler {
6
- transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal): Chunk;
6
+ transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal, targetOverride?: string): Chunk;
7
7
  private findKeys;
8
8
  private concatCond;
9
9
  private isWhereExpression;
@@ -5,12 +5,13 @@ const abaplint = require("@abaplint/core");
5
5
  const chunk_1 = require("../chunk");
6
6
  const expressions_1 = require("../expressions");
7
7
  class SelectTranspiler {
8
- transpile(node, traversal) {
9
- var _a, _b;
10
- const target = traversal.traverse(node.findFirstExpression(abaplint.Expressions.Target)).getCode();
8
+ transpile(node, traversal, targetOverride) {
9
+ var _a, _b, _c;
10
+ const target = targetOverride || traversal.traverse(node.findFirstExpression(abaplint.Expressions.Target)).getCode();
11
11
  let select = "SELECT ";
12
- select += ((_a = node.findFirstExpression(abaplint.Expressions.SQLFieldList)) === null || _a === void 0 ? void 0 : _a.concatTokens()) + " ";
13
- select += ((_b = node.findFirstExpression(abaplint.Expressions.SQLFrom)) === null || _b === void 0 ? void 0 : _b.concatTokens()) + " ";
12
+ select += (((_a = node.findFirstExpression(abaplint.Expressions.SQLFieldList)) === null || _a === void 0 ? void 0 : _a.concatTokens())
13
+ || ((_b = node.findFirstExpression(abaplint.Expressions.SQLFieldListLoop)) === null || _b === void 0 ? void 0 : _b.concatTokens())) + " ";
14
+ select += ((_c = node.findFirstExpression(abaplint.Expressions.SQLFrom)) === null || _c === void 0 ? void 0 : _c.concatTokens()) + " ";
14
15
  let where;
15
16
  for (const sqlCond of node.findAllExpressions(abaplint.Expressions.SQLCond)) {
16
17
  if (this.isWhereExpression(node, sqlCond)) {
@@ -5,6 +5,7 @@ export * from "./constants";
5
5
  export * from "./data";
6
6
  export * from "./function_module";
7
7
  export * from "./interface";
8
+ export * from "./select";
8
9
  export * from "./try";
9
10
  export * from "./types";
10
11
  export * from "./when";
@@ -21,6 +21,7 @@ __exportStar(require("./constants"), exports);
21
21
  __exportStar(require("./data"), exports);
22
22
  __exportStar(require("./function_module"), exports);
23
23
  __exportStar(require("./interface"), exports);
24
+ __exportStar(require("./select"), exports);
24
25
  __exportStar(require("./try"), exports);
25
26
  __exportStar(require("./types"), exports);
26
27
  __exportStar(require("./when"), exports);
@@ -0,0 +1,7 @@
1
+ import * as abaplint from "@abaplint/core";
2
+ import { IStructureTranspiler } from "./_structure_transpiler";
3
+ import { Traversal } from "../traversal";
4
+ import { Chunk } from "../chunk";
5
+ export declare class SelectTranspiler implements IStructureTranspiler {
6
+ transpile(node: abaplint.Nodes.StructureNode, traversal: Traversal): Chunk;
7
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SelectTranspiler = void 0;
4
+ const abaplint = require("@abaplint/core");
5
+ const select_1 = require("../statements/select");
6
+ const chunk_1 = require("../chunk");
7
+ const unique_identifier_1 = require("../unique_identifier");
8
+ class SelectTranspiler {
9
+ transpile(node, traversal) {
10
+ var _a, _b;
11
+ const ret = new chunk_1.Chunk();
12
+ const selectStatement = node.findFirstStatement(abaplint.Statements.SelectLoop);
13
+ if (selectStatement === undefined) {
14
+ throw "Structure, select loop not found";
15
+ }
16
+ const from = (_a = selectStatement.findFirstExpression(abaplint.Expressions.SQLFromSource)) === null || _a === void 0 ? void 0 : _a.concatTokens().toUpperCase();
17
+ const intoName = (_b = selectStatement.findFirstExpression(abaplint.Expressions.SQLTarget)) === null || _b === void 0 ? void 0 : _b.concatTokens();
18
+ // note: this implementation SELECTs everything into memory, which might be bad, and sometimes not correct
19
+ const targetName = unique_identifier_1.UniqueIdentifier.get();
20
+ const loopName = unique_identifier_1.UniqueIdentifier.get();
21
+ ret.appendString(`let ${targetName} = new abap.types.Table(abap.DDIC["${from}"].type);\n`);
22
+ ret.appendChunk(new select_1.SelectTranspiler().transpile(selectStatement, traversal, targetName));
23
+ ret.appendString(`\nfor (const ${loopName} of ${targetName}.array()) {\n`);
24
+ ret.appendString(`${intoName === null || intoName === void 0 ? void 0 : intoName.replace("-", ".get().")}.set(${loopName});\n`);
25
+ const body = node.findDirectStructure(abaplint.Structures.Body);
26
+ if (body) {
27
+ ret.appendChunk(traversal.traverse(body));
28
+ }
29
+ ret.appendString("}\n");
30
+ return ret;
31
+ }
32
+ }
33
+ exports.SelectTranspiler = SelectTranspiler;
34
+ //# sourceMappingURL=select.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler",
3
- "version": "2.1.0",
3
+ "version": "2.1.3",
4
4
  "description": "Transpiler",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/src/index.d.ts",
@@ -28,7 +28,7 @@
28
28
  "author": "abaplint",
29
29
  "license": "MIT",
30
30
  "dependencies": {
31
- "@abaplint/core": "^2.91.11",
31
+ "@abaplint/core": "^2.91.13",
32
32
  "source-map": "^0.7.4"
33
33
  },
34
34
  "devDependencies": {