@abaplint/transpiler 2.1.69 → 2.1.70

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.
@@ -8,6 +8,7 @@ export * from "./compare";
8
8
  export * from "./component_chain_simple";
9
9
  export * from "./component_chain";
10
10
  export * from "./component_compare";
11
+ export * from "./component_cond_sub";
11
12
  export * from "./component_cond";
12
13
  export * from "./cond_sub";
13
14
  export * from "./cond";
@@ -15,7 +16,6 @@ export * from "./constant";
15
16
  export * from "./database_table";
16
17
  export * from "./field_chain";
17
18
  export * from "./field_length";
18
- export * from "./component_cond_sub";
19
19
  export * from "./field_offset";
20
20
  export * from "./field_symbol";
21
21
  export * from "./function_exporting";
@@ -37,6 +37,7 @@ export * from "./simple_source3";
37
37
  export * from "./simple_source4";
38
38
  export * from "./source_field_symbol";
39
39
  export * from "./source";
40
+ export * from "./sql_cond";
40
41
  export * from "./sql_source_simple";
41
42
  export * from "./sql_source";
42
43
  export * from "./string_template_source";
@@ -24,6 +24,7 @@ __exportStar(require("./compare"), exports);
24
24
  __exportStar(require("./component_chain_simple"), exports);
25
25
  __exportStar(require("./component_chain"), exports);
26
26
  __exportStar(require("./component_compare"), exports);
27
+ __exportStar(require("./component_cond_sub"), exports);
27
28
  __exportStar(require("./component_cond"), exports);
28
29
  __exportStar(require("./cond_sub"), exports);
29
30
  __exportStar(require("./cond"), exports);
@@ -31,7 +32,6 @@ __exportStar(require("./constant"), exports);
31
32
  __exportStar(require("./database_table"), exports);
32
33
  __exportStar(require("./field_chain"), exports);
33
34
  __exportStar(require("./field_length"), exports);
34
- __exportStar(require("./component_cond_sub"), exports);
35
35
  __exportStar(require("./field_offset"), exports);
36
36
  __exportStar(require("./field_symbol"), exports);
37
37
  __exportStar(require("./function_exporting"), exports);
@@ -53,6 +53,7 @@ __exportStar(require("./simple_source3"), exports);
53
53
  __exportStar(require("./simple_source4"), exports);
54
54
  __exportStar(require("./source_field_symbol"), exports);
55
55
  __exportStar(require("./source"), exports);
56
+ __exportStar(require("./sql_cond"), exports);
56
57
  __exportStar(require("./sql_source_simple"), exports);
57
58
  __exportStar(require("./sql_source"), exports);
58
59
  __exportStar(require("./string_template_source"), exports);
@@ -0,0 +1,9 @@
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 SQLCondTranspiler implements IExpressionTranspiler {
6
+ transpile(node: Nodes.ExpressionNode, traversal: Traversal): Chunk;
7
+ private sqlIn;
8
+ private basicCondition;
9
+ }
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SQLCondTranspiler = void 0;
4
+ const abaplint = require("@abaplint/core");
5
+ const chunk_1 = require("../chunk");
6
+ const simple_source3_1 = require("./simple_source3");
7
+ const field_chain_1 = require("./field_chain");
8
+ class SQLCondTranspiler {
9
+ transpile(node, traversal) {
10
+ var _a;
11
+ let ret = "";
12
+ for (const c of node.getChildren()) {
13
+ if (c instanceof abaplint.Nodes.ExpressionNode
14
+ && c.get() instanceof abaplint.Expressions.SQLCompare) {
15
+ if (ret !== "") {
16
+ ret += " ";
17
+ }
18
+ if (c.findDirectExpression(abaplint.Expressions.Dynamic)) {
19
+ const chain = (_a = c.findDirectExpression(abaplint.Expressions.Dynamic)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(abaplint.Expressions.FieldChain);
20
+ if (chain) {
21
+ const code = new field_chain_1.FieldChainTranspiler(true).transpile(chain, traversal).getCode();
22
+ ret += `" + ${code} + "`;
23
+ }
24
+ else {
25
+ throw new Error("SQL Condition, transpiler todo, dyn cond, " + c.concatTokens());
26
+ }
27
+ }
28
+ else if (c.findDirectExpression(abaplint.Expressions.SQLIn)) {
29
+ ret += this.sqlIn(c, traversal);
30
+ }
31
+ else {
32
+ ret += this.basicCondition(c, traversal);
33
+ }
34
+ }
35
+ else if (c instanceof abaplint.Nodes.ExpressionNode) {
36
+ ret += " " + this.transpile(c, traversal).getCode();
37
+ }
38
+ else {
39
+ ret += " " + c.concatTokens();
40
+ }
41
+ }
42
+ const c = new chunk_1.Chunk();
43
+ return c.appendString(ret.trim());
44
+ }
45
+ sqlIn(c, _traversal) {
46
+ const fieldName = c.findDirectExpression(abaplint.Expressions.SQLFieldName);
47
+ const slqin = c.findDirectExpression(abaplint.Expressions.SQLIn);
48
+ const source = c.findFirstExpression(abaplint.Expressions.SimpleSource3);
49
+ if (fieldName === undefined || slqin === undefined || source === undefined) {
50
+ throw new Error("SQL Condition, transpiler todo, " + c.concatTokens());
51
+ }
52
+ const ret = `" + abap.expandIN("${fieldName.concatTokens()}", ${source.concatTokens()}) + "`;
53
+ return ret;
54
+ }
55
+ basicCondition(c, traversal) {
56
+ let ret = "";
57
+ if (c.getChildren().length !== 3) {
58
+ throw new Error("SQL Condition, transpiler todo, " + c.concatTokens() + ", " + c.getChildren().length);
59
+ }
60
+ const fieldName = c.findDirectExpression(abaplint.Expressions.SQLFieldName);
61
+ const operator = c.findDirectExpression(abaplint.Expressions.SQLCompareOperator);
62
+ const source = c.findDirectExpression(abaplint.Expressions.SQLSource);
63
+ if (fieldName === undefined || operator === undefined || source === undefined) {
64
+ throw new Error("SQL Condition, transpiler todo, " + c.concatTokens());
65
+ }
66
+ ret += fieldName.concatTokens() + " " + operator.concatTokens() + " ";
67
+ const simple = source.findDirectExpression(abaplint.Expressions.SimpleSource3);
68
+ if (simple && simple.findDirectExpression(abaplint.Expressions.Constant) === undefined) {
69
+ ret += "'\" + " + new simple_source3_1.SimpleSource3Transpiler(true).transpile(simple, traversal).getCode() + " + \"'";
70
+ }
71
+ else {
72
+ ret += source.concatTokens();
73
+ }
74
+ return ret;
75
+ }
76
+ }
77
+ exports.SQLCondTranspiler = SQLCondTranspiler;
78
+ //# sourceMappingURL=sql_cond.js.map
@@ -12,6 +12,11 @@ class DeleteDatabaseTranspiler {
12
12
  const ttab = traversal.traverse(tab);
13
13
  options.push(`"table": ` + ttab.getCode());
14
14
  }
15
+ const w = node.findExpressionAfterToken("WHERE");
16
+ if (w && w.get() instanceof abaplint.Expressions.SQLCond) {
17
+ const ttab = traversal.traverse(w);
18
+ options.push(`"where": "` + ttab.getCode() + `"`);
19
+ }
15
20
  return new chunk_1.Chunk(`await abap.statements.deleteDatabase(${table.getCode()}, {${options.join(", ")}});`);
16
21
  }
17
22
  }
@@ -5,8 +5,5 @@ import { Chunk } from "../chunk";
5
5
  export declare class SelectTranspiler implements IStatementTranspiler {
6
6
  transpile(node: abaplint.Nodes.StatementNode, traversal: Traversal, targetOverride?: string): Chunk;
7
7
  private findKeys;
8
- private concatCond;
9
- private sqlIn;
10
- private basicCondition;
11
8
  private isWhereExpression;
12
9
  }
@@ -27,14 +27,14 @@ class SelectTranspiler {
27
27
  }
28
28
  select += " ";
29
29
  select += ((_a = node.findFirstExpression(abaplint.Expressions.SQLFrom)) === null || _a === void 0 ? void 0 : _a.concatTokens()) + " ";
30
- let where;
30
+ let where = undefined;
31
31
  for (const sqlCond of node.findAllExpressions(abaplint.Expressions.SQLCond)) {
32
32
  if (this.isWhereExpression(node, sqlCond)) {
33
33
  where = sqlCond;
34
34
  }
35
35
  }
36
36
  if (where) {
37
- select += "WHERE " + this.concatCond(where, traversal) + " ";
37
+ select += "WHERE " + traversal.traverse(where).getCode() + " ";
38
38
  }
39
39
  const upTo = node.findFirstExpression(abaplint.Expressions.SQLUpTo);
40
40
  if (upTo) {
@@ -101,72 +101,6 @@ class SelectTranspiler {
101
101
  }
102
102
  return keys;
103
103
  }
104
- concatCond(cond, traversal) {
105
- var _a;
106
- let ret = "";
107
- for (const c of cond.getChildren()) {
108
- if (c instanceof abaplint.Nodes.ExpressionNode
109
- && c.get() instanceof abaplint.Expressions.SQLCompare) {
110
- if (ret !== "") {
111
- ret += " ";
112
- }
113
- if (c.findDirectExpression(abaplint.Expressions.Dynamic)) {
114
- const chain = (_a = c.findDirectExpression(abaplint.Expressions.Dynamic)) === null || _a === void 0 ? void 0 : _a.findFirstExpression(abaplint.Expressions.FieldChain);
115
- if (chain) {
116
- const code = new expressions_1.FieldChainTranspiler(true).transpile(chain, traversal).getCode();
117
- ret += `" + ${code} + "`;
118
- }
119
- else {
120
- throw new Error("SQL Condition, transpiler todo, dyn cond, " + c.concatTokens());
121
- }
122
- }
123
- else if (c.findDirectExpression(abaplint.Expressions.SQLIn)) {
124
- ret += this.sqlIn(c, traversal);
125
- }
126
- else {
127
- ret += this.basicCondition(c, traversal);
128
- }
129
- }
130
- else if (c instanceof abaplint.Nodes.ExpressionNode) {
131
- ret += " " + this.concatCond(c, traversal);
132
- }
133
- else {
134
- ret += " " + c.concatTokens();
135
- }
136
- }
137
- return ret.trim();
138
- }
139
- sqlIn(c, _traversal) {
140
- const fieldName = c.findDirectExpression(abaplint.Expressions.SQLFieldName);
141
- const slqin = c.findDirectExpression(abaplint.Expressions.SQLIn);
142
- const source = c.findFirstExpression(abaplint.Expressions.SimpleSource3);
143
- if (fieldName === undefined || slqin === undefined || source === undefined) {
144
- throw new Error("SQL Condition, transpiler todo, " + c.concatTokens());
145
- }
146
- const ret = `" + abap.expandIN("${fieldName.concatTokens()}", ${source.concatTokens()}) + "`;
147
- return ret;
148
- }
149
- basicCondition(c, traversal) {
150
- let ret = "";
151
- if (c.getChildren().length !== 3) {
152
- throw new Error("SQL Condition, transpiler todo, " + c.concatTokens() + ", " + c.getChildren().length);
153
- }
154
- const fieldName = c.findDirectExpression(abaplint.Expressions.SQLFieldName);
155
- const operator = c.findDirectExpression(abaplint.Expressions.SQLCompareOperator);
156
- const source = c.findDirectExpression(abaplint.Expressions.SQLSource);
157
- if (fieldName === undefined || operator === undefined || source === undefined) {
158
- throw new Error("SQL Condition, transpiler todo, " + c.concatTokens());
159
- }
160
- ret += fieldName.concatTokens() + " " + operator.concatTokens() + " ";
161
- const simple = source.findDirectExpression(abaplint.Expressions.SimpleSource3);
162
- if (simple && simple.findDirectExpression(abaplint.Expressions.Constant) === undefined) {
163
- ret += "'\" + " + new expressions_1.SimpleSource3Transpiler(true).transpile(simple, traversal).getCode() + " + \"'";
164
- }
165
- else {
166
- ret += source.concatTokens();
167
- }
168
- return ret;
169
- }
170
104
  isWhereExpression(node, expression) {
171
105
  // check if previous token before sqlCond is "WHERE". It could also be "ON" in case of join condition
172
106
  let prevToken;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abaplint/transpiler",
3
- "version": "2.1.69",
3
+ "version": "2.1.70",
4
4
  "description": "Transpiler",
5
5
  "main": "build/src/index.js",
6
6
  "typings": "build/src/index.d.ts",