@open-rap/compiler 0.0.0-stage → 0.1.0

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.
Files changed (227) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -2
  3. package/dist/agent/server.d.ts +35 -0
  4. package/dist/agent/server.js +408 -0
  5. package/dist/agent/server.js.map +1 -0
  6. package/dist/authoring/abapgit.d.ts +38 -0
  7. package/dist/authoring/abapgit.js +242 -0
  8. package/dist/authoring/abapgit.js.map +1 -0
  9. package/dist/authoring/catalog.d.ts +48 -0
  10. package/dist/authoring/catalog.js +117 -0
  11. package/dist/authoring/catalog.js.map +1 -0
  12. package/dist/authoring/floorplan.d.ts +28 -0
  13. package/dist/authoring/floorplan.js +31 -0
  14. package/dist/authoring/floorplan.js.map +1 -0
  15. package/dist/authoring/generate.d.ts +57 -0
  16. package/dist/authoring/generate.js +630 -0
  17. package/dist/authoring/generate.js.map +1 -0
  18. package/dist/authoring/mcp.d.ts +15 -0
  19. package/dist/authoring/mcp.js +52 -0
  20. package/dist/authoring/mcp.js.map +1 -0
  21. package/dist/authoring/new.d.ts +35 -0
  22. package/dist/authoring/new.js +389 -0
  23. package/dist/authoring/new.js.map +1 -0
  24. package/dist/bdef/ast.d.ts +249 -0
  25. package/dist/bdef/ast.js +3 -0
  26. package/dist/bdef/ast.js.map +1 -0
  27. package/dist/bdef/lexer.d.ts +105 -0
  28. package/dist/bdef/lexer.js +148 -0
  29. package/dist/bdef/lexer.js.map +1 -0
  30. package/dist/bdef/parser.d.ts +22 -0
  31. package/dist/bdef/parser.js +1012 -0
  32. package/dist/bdef/parser.js.map +1 -0
  33. package/dist/build.d.ts +26 -0
  34. package/dist/build.js +62 -0
  35. package/dist/build.js.map +1 -0
  36. package/dist/cds/adapter.d.ts +91 -0
  37. package/dist/cds/adapter.js +381 -0
  38. package/dist/cds/adapter.js.map +1 -0
  39. package/dist/cds/expression-ast.d.ts +65 -0
  40. package/dist/cds/expression-ast.js +330 -0
  41. package/dist/cds/expression-ast.js.map +1 -0
  42. package/dist/cli.d.ts +9 -0
  43. package/dist/cli.js +485 -0
  44. package/dist/cli.js.map +1 -0
  45. package/dist/dcl/parser.d.ts +59 -0
  46. package/dist/dcl/parser.js +338 -0
  47. package/dist/dcl/parser.js.map +1 -0
  48. package/dist/ddic/catalog.d.ts +17 -0
  49. package/dist/ddic/catalog.js +211 -0
  50. package/dist/ddic/catalog.js.map +1 -0
  51. package/dist/ddic/cds-types.d.ts +47 -0
  52. package/dist/ddic/cds-types.js +131 -0
  53. package/dist/ddic/cds-types.js.map +1 -0
  54. package/dist/ddic/table-source.d.ts +70 -0
  55. package/dist/ddic/table-source.js +500 -0
  56. package/dist/ddic/table-source.js.map +1 -0
  57. package/dist/ddic/xml.d.ts +65 -0
  58. package/dist/ddic/xml.js +201 -0
  59. package/dist/ddic/xml.js.map +1 -0
  60. package/dist/dev.d.ts +128 -0
  61. package/dist/dev.js +434 -0
  62. package/dist/dev.js.map +1 -0
  63. package/dist/diagnostics.d.ts +33 -0
  64. package/dist/diagnostics.js +53 -0
  65. package/dist/diagnostics.js.map +1 -0
  66. package/dist/gen/abap/derived-types.d.ts +26 -0
  67. package/dist/gen/abap/derived-types.js +323 -0
  68. package/dist/gen/abap/derived-types.js.map +1 -0
  69. package/dist/gen/abap/eml.d.ts +118 -0
  70. package/dist/gen/abap/eml.js +362 -0
  71. package/dist/gen/abap/eml.js.map +1 -0
  72. package/dist/gen/abap/enums.d.ts +13 -0
  73. package/dist/gen/abap/enums.js +74 -0
  74. package/dist/gen/abap/enums.js.map +1 -0
  75. package/dist/gen/abap/framework-http.d.ts +14 -0
  76. package/dist/gen/abap/framework-http.js +1049 -0
  77. package/dist/gen/abap/framework-http.js.map +1 -0
  78. package/dist/gen/abap/framework-query.d.ts +14 -0
  79. package/dist/gen/abap/framework-query.js +225 -0
  80. package/dist/gen/abap/framework-query.js.map +1 -0
  81. package/dist/gen/abap/framework-utils.d.ts +29 -0
  82. package/dist/gen/abap/framework-utils.js +3707 -0
  83. package/dist/gen/abap/framework-utils.js.map +1 -0
  84. package/dist/gen/abap/framework.d.ts +12 -0
  85. package/dist/gen/abap/framework.js +480 -0
  86. package/dist/gen/abap/framework.js.map +1 -0
  87. package/dist/gen/abap/generate.d.ts +40 -0
  88. package/dist/gen/abap/generate.js +238 -0
  89. package/dist/gen/abap/generate.js.map +1 -0
  90. package/dist/gen/abap/rewrite.d.ts +82 -0
  91. package/dist/gen/abap/rewrite.js +957 -0
  92. package/dist/gen/abap/rewrite.js.map +1 -0
  93. package/dist/gen/abap/shadow.d.ts +25 -0
  94. package/dist/gen/abap/shadow.js +175 -0
  95. package/dist/gen/abap/shadow.js.map +1 -0
  96. package/dist/gen/abap/tokens.d.ts +33 -0
  97. package/dist/gen/abap/tokens.js +87 -0
  98. package/dist/gen/abap/tokens.js.map +1 -0
  99. package/dist/gen/app/index.d.ts +25 -0
  100. package/dist/gen/app/index.js +322 -0
  101. package/dist/gen/app/index.js.map +1 -0
  102. package/dist/gen/csdl.d.ts +11 -0
  103. package/dist/gen/csdl.js +562 -0
  104. package/dist/gen/csdl.js.map +1 -0
  105. package/dist/gen/deploy.d.ts +12 -0
  106. package/dist/gen/deploy.js +53 -0
  107. package/dist/gen/deploy.js.map +1 -0
  108. package/dist/gen/docs/index.d.ts +35 -0
  109. package/dist/gen/docs/index.js +267 -0
  110. package/dist/gen/docs/index.js.map +1 -0
  111. package/dist/gen/docs/markdown.d.ts +23 -0
  112. package/dist/gen/docs/markdown.js +187 -0
  113. package/dist/gen/docs/markdown.js.map +1 -0
  114. package/dist/gen/docs/site.d.ts +17 -0
  115. package/dist/gen/docs/site.js +106 -0
  116. package/dist/gen/docs/site.js.map +1 -0
  117. package/dist/gen/keycloak.d.ts +21 -0
  118. package/dist/gen/keycloak.js +90 -0
  119. package/dist/gen/keycloak.js.map +1 -0
  120. package/dist/gen/launchpad/index.d.ts +48 -0
  121. package/dist/gen/launchpad/index.js +302 -0
  122. package/dist/gen/launchpad/index.js.map +1 -0
  123. package/dist/gen/launchpad/ui.d.ts +14 -0
  124. package/dist/gen/launchpad/ui.js +350 -0
  125. package/dist/gen/launchpad/ui.js.map +1 -0
  126. package/dist/gen/mcp.d.ts +23 -0
  127. package/dist/gen/mcp.js +244 -0
  128. package/dist/gen/mcp.js.map +1 -0
  129. package/dist/gen/sql-expressions.d.ts +12 -0
  130. package/dist/gen/sql-expressions.js +136 -0
  131. package/dist/gen/sql-expressions.js.map +1 -0
  132. package/dist/gen/sql.d.ts +38 -0
  133. package/dist/gen/sql.js +612 -0
  134. package/dist/gen/sql.js.map +1 -0
  135. package/dist/gen/ui/index.d.ts +7 -0
  136. package/dist/gen/ui/index.js +27 -0
  137. package/dist/gen/ui/index.js.map +1 -0
  138. package/dist/gen/ui/layout.d.ts +230 -0
  139. package/dist/gen/ui/layout.js +511 -0
  140. package/dist/gen/ui/layout.js.map +1 -0
  141. package/dist/gen/ui/static.d.ts +55 -0
  142. package/dist/gen/ui/static.js +2901 -0
  143. package/dist/gen/ui/static.js.map +1 -0
  144. package/dist/gen/ui/views.d.ts +10 -0
  145. package/dist/gen/ui/views.js +511 -0
  146. package/dist/gen/ui/views.js.map +1 -0
  147. package/dist/gen/vendor.d.ts +23 -0
  148. package/dist/gen/vendor.js +68 -0
  149. package/dist/gen/vendor.js.map +1 -0
  150. package/dist/gen/xml.d.ts +9 -0
  151. package/dist/gen/xml.js +42 -0
  152. package/dist/gen/xml.js.map +1 -0
  153. package/dist/index.d.ts +20 -0
  154. package/dist/index.js +20 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/input/project.d.ts +50 -0
  157. package/dist/input/project.js +128 -0
  158. package/dist/input/project.js.map +1 -0
  159. package/dist/ir/access-controls.d.ts +11 -0
  160. package/dist/ir/access-controls.js +148 -0
  161. package/dist/ir/access-controls.js.map +1 -0
  162. package/dist/ir/authorizations.d.ts +25 -0
  163. package/dist/ir/authorizations.js +178 -0
  164. package/dist/ir/authorizations.js.map +1 -0
  165. package/dist/ir/behaviors.d.ts +16 -0
  166. package/dist/ir/behaviors.js +548 -0
  167. package/dist/ir/behaviors.js.map +1 -0
  168. package/dist/ir/builder.d.ts +20 -0
  169. package/dist/ir/builder.js +505 -0
  170. package/dist/ir/builder.js.map +1 -0
  171. package/dist/ir/config.d.ts +25 -0
  172. package/dist/ir/config.js +130 -0
  173. package/dist/ir/config.js.map +1 -0
  174. package/dist/ir/dictionary.d.ts +54 -0
  175. package/dist/ir/dictionary.js +328 -0
  176. package/dist/ir/dictionary.js.map +1 -0
  177. package/dist/ir/entities.d.ts +58 -0
  178. package/dist/ir/entities.js +676 -0
  179. package/dist/ir/entities.js.map +1 -0
  180. package/dist/ir/expressions.d.ts +33 -0
  181. package/dist/ir/expressions.js +327 -0
  182. package/dist/ir/expressions.js.map +1 -0
  183. package/dist/ir/handlers.d.ts +63 -0
  184. package/dist/ir/handlers.js +398 -0
  185. package/dist/ir/handlers.js.map +1 -0
  186. package/dist/ir/number-ranges.d.ts +24 -0
  187. package/dist/ir/number-ranges.js +74 -0
  188. package/dist/ir/number-ranges.js.map +1 -0
  189. package/dist/ir/seed.d.ts +23 -0
  190. package/dist/ir/seed.js +78 -0
  191. package/dist/ir/seed.js.map +1 -0
  192. package/dist/ir/service.d.ts +21 -0
  193. package/dist/ir/service.js +96 -0
  194. package/dist/ir/service.js.map +1 -0
  195. package/dist/launchpad/config.d.ts +47 -0
  196. package/dist/launchpad/config.js +321 -0
  197. package/dist/launchpad/config.js.map +1 -0
  198. package/dist/launchpad/workspace.d.ts +48 -0
  199. package/dist/launchpad/workspace.js +166 -0
  200. package/dist/launchpad/workspace.js.map +1 -0
  201. package/dist/srvd/parser.d.ts +36 -0
  202. package/dist/srvd/parser.js +193 -0
  203. package/dist/srvd/parser.js.map +1 -0
  204. package/dist/standard/data.d.ts +18 -0
  205. package/dist/standard/data.js +534 -0
  206. package/dist/standard/data.js.map +1 -0
  207. package/dist/standard/index.d.ts +36 -0
  208. package/dist/standard/index.js +507 -0
  209. package/dist/standard/index.js.map +1 -0
  210. package/dist/version.d.ts +2 -0
  211. package/dist/version.js +4 -0
  212. package/dist/version.js.map +1 -0
  213. package/docs/AGENTS.md +79 -0
  214. package/docs/ANNOTATIONS.md +76 -0
  215. package/docs/DECISIONS.md +1526 -0
  216. package/docs/DEPLOYMENT.md +113 -0
  217. package/docs/DIAGNOSTICS.md +116 -0
  218. package/docs/FEATURES.md +287 -0
  219. package/docs/GUIDE.md +560 -0
  220. package/docs/KNOWN_GAPS.md +216 -0
  221. package/docs/MCP.md +84 -0
  222. package/docs/PLAN.md +690 -0
  223. package/docs/README.md +148 -0
  224. package/docs/REMOTE_APIS.md +121 -0
  225. package/docs/ROADMAP.md +35 -0
  226. package/docs/UTILITIES.md +95 -0
  227. package/package.json +49 -3
@@ -0,0 +1,612 @@
1
+ /**
2
+ * PostgreSQL DDL from the IR (decisions D4, D8, D9): the persistent tables, then one view per
3
+ * CDS entity (view entities first, projections on top of them). Reads of the OData service go
4
+ * through the views; the managed runtime writes the tables. Last, the schema of the ABAP SQL of
5
+ * the behavior pools (decision D26): the same tables and entities with their values in ABAP form.
6
+ */
7
+ import { ABAP_SQL_SCHEMA, baseEntityOf, baseFieldOf, findEntityBehavior, findField, isUuid, same, } from "@open-rap/model";
8
+ import { standardRows, standardSql } from "../standard/index.js";
9
+ import { calculatedColumn } from "./sql-expressions.js";
10
+ export function quoteIdentifier(name) {
11
+ return `"${name.replace(/"/g, '""')}"`;
12
+ }
13
+ /** PostgreSQL column type of an ABAP type. */
14
+ export function sqlType(t) {
15
+ switch (t.kind) {
16
+ case "char":
17
+ case "numc":
18
+ case "sstring":
19
+ case "cuky":
20
+ case "unit":
21
+ case "lang":
22
+ case "clnt":
23
+ return `varchar(${t.length ?? 1})`;
24
+ case "string":
25
+ return "text";
26
+ case "bool":
27
+ return "boolean";
28
+ case "int1":
29
+ case "int2":
30
+ return "smallint";
31
+ case "int4":
32
+ return "integer";
33
+ case "int8":
34
+ return "bigint";
35
+ case "dec":
36
+ case "curr":
37
+ case "quan":
38
+ return `numeric(${t.length ?? 16},${t.decimals ?? 0})`;
39
+ case "decfloat16":
40
+ case "decfloat34":
41
+ return "numeric";
42
+ case "fltp":
43
+ return "double precision";
44
+ case "dats":
45
+ return "date";
46
+ case "tims":
47
+ return "time(0)";
48
+ case "timestamp":
49
+ return "timestamptz(0)";
50
+ case "timestampl":
51
+ case "utclong":
52
+ return "timestamptz(6)";
53
+ case "raw":
54
+ return isUuid(t) ? "uuid" : "bytea";
55
+ case "rawstring":
56
+ return "bytea";
57
+ }
58
+ }
59
+ /**
60
+ * ABAP has no NULL: character-like and numeric columns are NOT NULL with their initial value as
61
+ * default. Dates, times, time stamps, UUIDs and binaries store their initial value as NULL.
62
+ */
63
+ export function sqlDefault(t) {
64
+ switch (t.kind) {
65
+ case "numc":
66
+ return `'${"0".repeat(t.length ?? 1)}'`;
67
+ case "char":
68
+ case "string":
69
+ case "sstring":
70
+ case "cuky":
71
+ case "unit":
72
+ case "lang":
73
+ case "clnt":
74
+ return "''";
75
+ case "bool":
76
+ return "false";
77
+ case "int1":
78
+ case "int2":
79
+ case "int4":
80
+ case "int8":
81
+ case "dec":
82
+ case "curr":
83
+ case "quan":
84
+ case "decfloat16":
85
+ case "decfloat34":
86
+ case "fltp":
87
+ return "0";
88
+ default:
89
+ return undefined;
90
+ }
91
+ }
92
+ function columnDefinition(column) {
93
+ const parts = [quoteIdentifier(column.name), sqlType(column.type)];
94
+ const initial = sqlDefault(column.type);
95
+ if (column.key || initial !== undefined) {
96
+ parts.push("NOT NULL");
97
+ }
98
+ if (!column.key && initial !== undefined) {
99
+ parts.push(`DEFAULT ${initial}`);
100
+ }
101
+ return parts.join(" ");
102
+ }
103
+ function createTable(table) {
104
+ const columns = table.columns.filter((c) => !c.client);
105
+ const keys = columns.filter((c) => c.key).map((c) => quoteIdentifier(c.name));
106
+ const lines = columns.map((c) => ` ${columnDefinition(c)}`);
107
+ if (keys.length > 0) {
108
+ lines.push(` PRIMARY KEY (${keys.join(", ")})`);
109
+ }
110
+ const comment = table.description === undefined ? "" : `COMMENT ON TABLE ${quoteIdentifier(table.name)} IS '${table.description.replace(/'/g, "''")}';\n`;
111
+ return `CREATE TABLE IF NOT EXISTS ${quoteIdentifier(table.name)} (\n${lines.join(",\n")}\n);\n${comment}`;
112
+ }
113
+ /** Column of the persistent table an element of a managed entity is stored in. */
114
+ export function persistedColumn(model, entity, field) {
115
+ const lookup = findEntityBehavior(model, entity.name);
116
+ const mapped = lookup?.entity.mapping?.fields[field];
117
+ if (mapped !== undefined) {
118
+ return mapped;
119
+ }
120
+ const f = entity.fields.find((x) => same(x.name, field));
121
+ if (f?.column !== undefined) {
122
+ return f.column;
123
+ }
124
+ return lookup?.entity.mapping?.corresponding ? field.toLowerCase() : undefined;
125
+ }
126
+ /** Foreign keys child → parent derived from the to-parent associations of managed entities. */
127
+ function foreignKeys(model) {
128
+ const statements = [];
129
+ for (const behavior of model.behaviors.filter((b) => b.implementationType === "managed")) {
130
+ for (const child of behavior.entities) {
131
+ const entity = model.entities.find((e) => same(e.name, child.entity));
132
+ const toParent = entity?.associations.find((a) => a.kind === "toParent");
133
+ const parent = toParent === undefined ? undefined : behavior.entities.find((e) => same(e.entity, toParent.target));
134
+ const parentEntity = parent === undefined ? undefined : model.entities.find((e) => same(e.name, parent.entity));
135
+ if (entity === undefined || toParent === undefined || parent === undefined || parentEntity === undefined) {
136
+ continue;
137
+ }
138
+ if (child.persistentTable === undefined || parent.persistentTable === undefined) {
139
+ continue;
140
+ }
141
+ const parentTable = model.tables.find((t) => t.name === parent.persistentTable);
142
+ const parentKeys = parentTable?.columns.filter((c) => c.key && !c.client).map((c) => c.name) ?? [];
143
+ const pairs = toParent.on.map((p) => ({ child: persistedColumn(model, entity, p.source), parent: persistedColumn(model, parentEntity, p.target) }));
144
+ if (pairs.some((p) => p.child === undefined || p.parent === undefined)) {
145
+ continue;
146
+ }
147
+ const referenced = pairs.map((p) => p.parent);
148
+ // only a reference to the whole primary key of the parent can be a foreign key
149
+ if (referenced.length !== parentKeys.length || !parentKeys.every((k) => referenced.includes(k))) {
150
+ continue;
151
+ }
152
+ const name = `${child.persistentTable}_${toParent.name.replace(/^_/, "")}_fk`.toLowerCase().slice(0, 63);
153
+ const childColumns = pairs.map((p) => quoteIdentifier(p.child)).join(", ");
154
+ const parentColumns = pairs.map((p) => quoteIdentifier(p.parent)).join(", ");
155
+ statements.push(`DO $$ BEGIN\n ALTER TABLE ${quoteIdentifier(child.persistentTable)} ADD CONSTRAINT ${quoteIdentifier(name)}\n` +
156
+ ` FOREIGN KEY (${childColumns}) REFERENCES ${quoteIdentifier(parent.persistentTable)} (${parentColumns})\n` +
157
+ ` ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;\nEXCEPTION WHEN duplicate_object THEN NULL; END $$;\n` +
158
+ `CREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${name.slice(0, 59)}_idx`)} ON ${quoteIdentifier(child.persistentTable)} (${childColumns});\n`);
159
+ }
160
+ }
161
+ return statements;
162
+ }
163
+ /** Views in dependency order: a view entity before the projections on top of it. */
164
+ function orderedViews(model) {
165
+ const result = [];
166
+ const visit = (entity, stack) => {
167
+ if (result.includes(entity) || stack.has(entity.name) || entity.sqlView === undefined || (entity.draft !== undefined && "admin" in entity.draft)) {
168
+ return;
169
+ }
170
+ stack.add(entity.name);
171
+ const source = sourceEntityOf(model, entity);
172
+ if (source !== undefined) {
173
+ visit(source, stack);
174
+ }
175
+ result.push(entity);
176
+ };
177
+ for (const entity of model.entities) {
178
+ visit(entity, new Set());
179
+ }
180
+ return result;
181
+ }
182
+ /**
183
+ * The entity a view reads, undefined when it reads a table: a table entity (D55) has the name of
184
+ * its table, a view entity on it reads the table.
185
+ */
186
+ function sourceEntityOf(model, entity) {
187
+ const source = entity.source;
188
+ if (source === undefined || (entity.kind === "view" && model.tables.some((t) => same(t.name, source)))) {
189
+ return undefined;
190
+ }
191
+ return model.entities.find((e) => same(e.name, source));
192
+ }
193
+ function createView(model, entity) {
194
+ const source = entity.source ?? "";
195
+ const sourceEntity = sourceEntityOf(model, entity);
196
+ const from = sourceEntity?.sqlView ?? source.toLowerCase();
197
+ const plainColumn = (field) => quoteIdentifier(sourceEntity === undefined ? field.column ?? field.name.toLowerCase() : field.baseField ?? field.name);
198
+ const refs = {
199
+ column: (name) => quoteIdentifier(name),
200
+ element: (name) => {
201
+ const target = findField(entity, name);
202
+ return target === undefined ? "NULL" : fieldSql(target);
203
+ },
204
+ };
205
+ const fieldSql = (field) => field.expression === undefined ? plainColumn(field) : calculatedColumn(field.expression, field.type, sqlType, refs);
206
+ const columns = entity.fields.filter((field) => field.draft !== true).map((field) => ` ${fieldSql(field)} AS ${quoteIdentifier(field.name)}`);
207
+ return `CREATE VIEW ${quoteIdentifier(entity.sqlView ?? "")} AS SELECT\n${columns.join(",\n")}\nFROM ${quoteIdentifier(from)};\n`;
208
+ }
209
+ /**
210
+ * A column in ABAP form, as the ABAP SQL generated by @abaplint/transpiler expects it (the
211
+ * transpiler's own schemas store every value in its ABAP character or packed form). Fixed-length
212
+ * character types become `bpchar`, whose comparisons ignore trailing blanks like ABAP; the
213
+ * initial values that the tables store as NULL (dates, times, time stamps, UUIDs, binaries)
214
+ * become the ABAP initial values.
215
+ */
216
+ export function abapSqlColumn(expression, t) {
217
+ switch (t.kind) {
218
+ case "char":
219
+ case "numc":
220
+ case "cuky":
221
+ case "unit":
222
+ case "lang":
223
+ case "clnt":
224
+ return `${expression}::bpchar`;
225
+ case "string":
226
+ case "sstring":
227
+ return expression;
228
+ case "bool":
229
+ return `(CASE WHEN ${expression} THEN 'X' ELSE '' END)::bpchar`;
230
+ case "int1":
231
+ case "int2":
232
+ case "int4":
233
+ case "int8":
234
+ case "dec":
235
+ case "curr":
236
+ case "quan":
237
+ case "decfloat16":
238
+ case "decfloat34":
239
+ case "fltp":
240
+ return expression;
241
+ case "dats":
242
+ return `coalesce(to_char(${expression}, 'YYYYMMDD'), '00000000')::bpchar`;
243
+ case "tims":
244
+ return `coalesce(to_char(${expression}, 'HH24MISS'), '000000')::bpchar`;
245
+ case "timestamp":
246
+ return `coalesce(to_char(${expression} AT TIME ZONE 'UTC', 'YYYYMMDDHH24MISS')::numeric(15,0), 0)`;
247
+ case "timestampl":
248
+ return `coalesce(to_char(${expression} AT TIME ZONE 'UTC', 'YYYYMMDDHH24MISS.US')::numeric(21,7), 0)`;
249
+ case "utclong":
250
+ return `coalesce(to_char(${expression} AT TIME ZONE 'UTC', 'YYYY-MM-DD"T"HH24:MI:SS.US'), '')`;
251
+ case "raw":
252
+ return isUuid(t)
253
+ ? `coalesce(upper(replace(${expression}::text, '-', '')), '${"0".repeat(32)}')::bpchar`
254
+ : `coalesce(upper(encode(${expression}, 'hex')), '${"0".repeat(2 * (t.length ?? 1))}')::bpchar`;
255
+ case "rawstring":
256
+ return `coalesce(upper(encode(${expression}, 'hex')), '')`;
257
+ }
258
+ }
259
+ /** Name of the view of a table or CDS entity in the ABAP SQL schema (`abap.buildDbTableName`). */
260
+ export function abapSqlView(name) {
261
+ return `${quoteIdentifier(ABAP_SQL_SCHEMA)}.${quoteIdentifier(name.toLowerCase())}`;
262
+ }
263
+ function abapSqlViewStatement(name, columns, from) {
264
+ const list = columns.map((c) => ` ${abapSqlColumn(c.expression, c.type)} AS ${quoteIdentifier(c.name.toLowerCase())}`);
265
+ return `CREATE VIEW ${abapSqlView(name)} AS SELECT\n${list.join(",\n")}\nFROM ${quoteIdentifier(from)};\n`;
266
+ }
267
+ /** Functions from the ABAP form back to the column types, for the writes of the savers. */
268
+ const ABAP_SQL_FUNCTIONS = (schema) => `CREATE FUNCTION ${schema}."to_date"(v text) RETURNS date LANGUAGE sql IMMUTABLE AS
269
+ $f$ SELECT CASE WHEN coalesce(btrim(v), '') IN ('', '00000000') THEN NULL ELSE to_date(v, 'YYYYMMDD') END $f$;
270
+ CREATE FUNCTION ${schema}."to_time"(v text) RETURNS time LANGUAGE sql IMMUTABLE AS
271
+ $f$ SELECT CASE WHEN coalesce(btrim(v), '') = '' THEN NULL ELSE to_timestamp(v, 'HH24MISS')::time END $f$;
272
+ CREATE FUNCTION ${schema}."to_timestamp"(v numeric) RETURNS timestamptz LANGUAGE sql IMMUTABLE AS
273
+ $f$ SELECT CASE WHEN coalesce(v, 0) = 0 THEN NULL ELSE make_timestamptz(
274
+ substr(lpad(trunc(v)::text, 14, '0'), 1, 4)::int, substr(lpad(trunc(v)::text, 14, '0'), 5, 2)::int,
275
+ substr(lpad(trunc(v)::text, 14, '0'), 7, 2)::int, substr(lpad(trunc(v)::text, 14, '0'), 9, 2)::int,
276
+ substr(lpad(trunc(v)::text, 14, '0'), 11, 2)::int, (substr(lpad(trunc(v)::text, 14, '0'), 13, 2)::numeric + (v - trunc(v)))::double precision,
277
+ 'UTC') END $f$;
278
+ CREATE FUNCTION ${schema}."to_utclong"(v text) RETURNS timestamptz LANGUAGE sql IMMUTABLE AS
279
+ $f$ SELECT CASE WHEN coalesce(btrim(v), '') = '' THEN NULL ELSE (v || 'Z')::timestamptz END $f$;
280
+ CREATE FUNCTION ${schema}."to_uuid"(v text) RETURNS uuid LANGUAGE sql IMMUTABLE AS
281
+ $f$ SELECT CASE WHEN coalesce(btrim(v), '') = '' OR btrim(v) ~ '^0+$' THEN NULL ELSE btrim(v)::uuid END $f$;
282
+ CREATE FUNCTION ${schema}."to_bytea"(v text) RETURNS bytea LANGUAGE sql IMMUTABLE AS
283
+ $f$ SELECT CASE WHEN coalesce(btrim(v), '') = '' OR btrim(v) ~ '^0+$' THEN NULL ELSE decode(btrim(v), 'hex') END $f$;
284
+ `;
285
+ /** A value in ABAP form (a column of the ABAP SQL views) as the value of the table column. */
286
+ export function nativeSqlValue(expression, t) {
287
+ const schema = quoteIdentifier(ABAP_SQL_SCHEMA);
288
+ switch (t.kind) {
289
+ case "char":
290
+ case "sstring":
291
+ case "cuky":
292
+ case "unit":
293
+ case "lang":
294
+ case "clnt":
295
+ return `coalesce(${expression}::text, '')`;
296
+ case "numc":
297
+ return `coalesce(nullif(btrim(${expression}::text), ''), '${"0".repeat(t.length ?? 1)}')`;
298
+ case "string":
299
+ return `coalesce(${expression}::text, '')`;
300
+ case "bool":
301
+ return `(coalesce(btrim(${expression}::text), '') <> '')`;
302
+ case "int1":
303
+ case "int2":
304
+ case "int4":
305
+ case "int8":
306
+ case "dec":
307
+ case "curr":
308
+ case "quan":
309
+ case "decfloat16":
310
+ case "decfloat34":
311
+ case "fltp":
312
+ return `coalesce(${expression}, 0)`;
313
+ case "dats":
314
+ return `${schema}."to_date"(${expression}::text)`;
315
+ case "tims":
316
+ return `${schema}."to_time"(${expression}::text)`;
317
+ case "timestamp":
318
+ case "timestampl":
319
+ return `${schema}."to_timestamp"(${expression}::numeric)`;
320
+ case "utclong":
321
+ return `${schema}."to_utclong"(${expression}::text)`;
322
+ case "raw":
323
+ return isUuid(t) ? `${schema}."to_uuid"(${expression}::text)` : `${schema}."to_bytea"(${expression}::text)`;
324
+ case "rawstring":
325
+ return `${schema}."to_bytea"(${expression}::text)`;
326
+ }
327
+ }
328
+ /**
329
+ * The view of a table takes the writes of the savers (INSERT, UPDATE, DELETE of the ABAP SQL):
330
+ * an INSTEAD OF trigger writes the table, the values converted back from their ABAP form.
331
+ */
332
+ function abapSqlWriteTrigger(table) {
333
+ const schema = quoteIdentifier(ABAP_SQL_SCHEMA);
334
+ const columns = table.columns.filter((c) => !c.client);
335
+ const keys = columns.filter((c) => c.key);
336
+ const name = quoteIdentifier(`${table.name.toLowerCase()}$write`);
337
+ const value = (row, c) => nativeSqlValue(`${row}.${quoteIdentifier(c.name.toLowerCase())}`, c.type);
338
+ const where = keys.map((k) => `${quoteIdentifier(k.name)} = ${value("OLD", k)}`).join(" AND ");
339
+ const target = quoteIdentifier(table.name);
340
+ return [
341
+ `CREATE FUNCTION ${schema}.${name}() RETURNS trigger LANGUAGE plpgsql SET search_path FROM CURRENT AS $f$`,
342
+ "BEGIN",
343
+ " IF TG_OP = 'INSERT' THEN",
344
+ ` INSERT INTO ${target} (${columns.map((c) => quoteIdentifier(c.name)).join(", ")})`,
345
+ ` VALUES (${columns.map((c) => value("NEW", c)).join(", ")});`,
346
+ " RETURN NEW;",
347
+ " ELSIF TG_OP = 'UPDATE' THEN",
348
+ ` UPDATE ${target} SET ${columns.map((c) => `${quoteIdentifier(c.name)} = ${value("NEW", c)}`).join(", ")}`,
349
+ ` WHERE ${where};`,
350
+ " RETURN NEW;",
351
+ " END IF;",
352
+ ` DELETE FROM ${target} WHERE ${where};`,
353
+ " RETURN OLD;",
354
+ "END $f$;",
355
+ `CREATE TRIGGER ${name} INSTEAD OF INSERT OR UPDATE OR DELETE ON ${abapSqlView(table.name)} FOR EACH ROW EXECUTE FUNCTION ${schema}.${name}();`,
356
+ "",
357
+ ].join("\n");
358
+ }
359
+ /**
360
+ * The schema of the ABAP SQL of the behavior pools: one view per table (without the client
361
+ * column, decision D9), with a trigger that takes the writes of the savers, and one view per CDS
362
+ * entity, column names in lower case. Recreated with the schema.
363
+ */
364
+ function abapSqlSchema(model, views) {
365
+ const statements = [`DROP SCHEMA IF EXISTS ${quoteIdentifier(ABAP_SQL_SCHEMA)} CASCADE;\nCREATE SCHEMA ${quoteIdentifier(ABAP_SQL_SCHEMA)};\n`, ABAP_SQL_FUNCTIONS(quoteIdentifier(ABAP_SQL_SCHEMA))];
366
+ for (const table of model.tables) {
367
+ const columns = table.columns.filter((c) => !c.client).map((c) => ({ expression: quoteIdentifier(c.name), type: c.type, name: c.name }));
368
+ statements.push(abapSqlViewStatement(table.name, columns, table.name));
369
+ if (table.columns.some((c) => c.key && !c.client)) {
370
+ statements.push(abapSqlWriteTrigger(table));
371
+ }
372
+ }
373
+ const tables = new Set(model.tables.map((t) => t.name.toLowerCase()));
374
+ for (const entity of views) {
375
+ if (tables.has(entity.name.toLowerCase())) {
376
+ continue;
377
+ }
378
+ const columns = entity.fields.filter((f) => f.draft !== true).map((f) => ({ expression: quoteIdentifier(f.name), type: f.type, name: f.name }));
379
+ statements.push(abapSqlViewStatement(entity.name, columns, entity.sqlView ?? ""));
380
+ }
381
+ return statements;
382
+ }
383
+ export function generateSql(model) {
384
+ const header = [
385
+ "-- Generated by Open RAP Runtime: do not edit.",
386
+ `-- Service ${model.service.name}. Applying this script twice is harmless.`,
387
+ "",
388
+ ].join("\n");
389
+ const tables = model.tables.map(createTable);
390
+ const views = orderedViews(model);
391
+ const drop = views.length === 0 ? "" : `DROP VIEW IF EXISTS ${[...views].reverse().map((v) => quoteIdentifier(v.sqlView ?? "")).join(", ")} CASCADE;\n`;
392
+ const viewStatements = views.map((v) => createView(model, v));
393
+ const abapSql = abapSqlSchema(model, views);
394
+ const schema = [header, "-- tables", ...tables, ...standardData(model), "-- compositions", ...foreignKeys(model), ...[frameworkTables(model)].filter((t) => t !== ""), ...draftTables(model), "-- CDS views", drop, ...viewStatements, ...draftViews(model), "-- ABAP SQL of the behavior pools (values in ABAP form)", ...abapSql].join("\n");
395
+ return { schema, tables: model.tables.map((t) => t.name), views: views.map((v) => v.sqlView ?? "") };
396
+ }
397
+ /**
398
+ * Draft (D54): one table per entity of a draft BO (its elements, named as in the base view, and the
399
+ * draft columns), and the administrative data of the drafts.
400
+ */
401
+ function draftTables(model) {
402
+ const statements = [];
403
+ const done = new Set();
404
+ for (const behavior of model.behaviors.filter((b) => b.implementationType === "managed" && b.draft === true)) {
405
+ for (const entityBehavior of behavior.entities) {
406
+ const entity = model.entities.find((e) => same(e.name, entityBehavior.entity));
407
+ if (entity === undefined || entityBehavior.draftTable === undefined || done.has(entityBehavior.draftTable)) {
408
+ continue;
409
+ }
410
+ done.add(entityBehavior.draftTable);
411
+ const lines = entity.fields
412
+ .filter((f) => f.draft !== true && f.expression === undefined)
413
+ .map((f) => ` ${columnDefinition({ name: f.name, type: f.type, key: f.key, notNull: f.key, client: false })}`);
414
+ lines.push(' "DraftUUID" uuid NOT NULL', ' "HasActiveEntity" boolean NOT NULL DEFAULT false', ' "DraftEntityCreationDateTime" timestamptz(6) NOT NULL DEFAULT now()', ' "DraftEntityLastChangeDateTime" timestamptz(6) NOT NULL DEFAULT now()');
415
+ lines.push(` PRIMARY KEY (${entity.fields.filter((f) => f.key && f.draft !== true).map((f) => quoteIdentifier(f.name)).join(", ")})`);
416
+ statements.push(`CREATE TABLE IF NOT EXISTS ${quoteIdentifier(entityBehavior.draftTable)} (\n${lines.join(",\n")}\n);\nCREATE INDEX IF NOT EXISTS ${quoteIdentifier(`${entityBehavior.draftTable}_draft_idx`)} ON ${quoteIdentifier(entityBehavior.draftTable)} ("DraftUUID");\n`);
417
+ }
418
+ }
419
+ if (statements.length > 0) {
420
+ statements.unshift("-- drafts (D54)");
421
+ statements.push(`CREATE TABLE IF NOT EXISTS "rapt_draft_admin" (
422
+ "DraftUUID" uuid PRIMARY KEY,
423
+ "CreationDateTime" timestamptz(6) NOT NULL DEFAULT now(),
424
+ "CreatedByUser" varchar(12) NOT NULL DEFAULT '',
425
+ "LastChangeDateTime" timestamptz(6) NOT NULL DEFAULT now(),
426
+ "LastChangedByUser" varchar(12) NOT NULL DEFAULT '',
427
+ "InProcessByUser" varchar(12) NOT NULL DEFAULT '',
428
+ "RootEntity" text NOT NULL DEFAULT ''
429
+ );
430
+ CREATE TABLE IF NOT EXISTS "rapt_draft_user" (
431
+ "DraftUUID" uuid NOT NULL,
432
+ "UserID" varchar(12) NOT NULL,
433
+ "UserDescription" varchar(80) NOT NULL DEFAULT '',
434
+ "UserAccessRole" varchar(1) NOT NULL DEFAULT 'E',
435
+ "UserEditingState" varchar(1) NOT NULL DEFAULT 'N',
436
+ PRIMARY KEY ("DraftUUID", "UserID")
437
+ );
438
+ `);
439
+ }
440
+ return statements;
441
+ }
442
+ /**
443
+ * Draft (D54): the view an exposed entity of a draft BO is read from, its active instances
444
+ * (IsActiveEntity true, HasDraftEntity when a draft exists) and its drafts (IsActiveEntity false).
445
+ */
446
+ function draftViews(model) {
447
+ const statements = [];
448
+ for (const entity of model.entities) {
449
+ const draft = entity.draft;
450
+ if (draft === undefined || "admin" in draft) {
451
+ continue;
452
+ }
453
+ const fields = entity.fields.filter((f) => f.draft !== true);
454
+ const baseName = (f) => baseFieldOf(model, entity, f)?.name ?? f.name;
455
+ const keys = fields.filter((f) => f.key);
456
+ const exists = keys.map((k) => `d.${quoteIdentifier(baseName(k))} = a.${quoteIdentifier(k.name)}`).join(" AND ");
457
+ statements.push(`CREATE VIEW ${quoteIdentifier(draft.view)} AS
458
+ SELECT ${fields.map((f) => `a.${quoteIdentifier(f.name)}`).join(", ")}, TRUE AS "IsActiveEntity", FALSE AS "HasActiveEntity",
459
+ EXISTS (SELECT 1 FROM ${quoteIdentifier(draft.table)} d WHERE ${exists}) AS "HasDraftEntity",
460
+ (SELECT d."DraftUUID" FROM ${quoteIdentifier(draft.table)} d WHERE ${exists} LIMIT 1) AS "DraftUUID"
461
+ FROM ${quoteIdentifier(entity.sqlView ?? "")} a
462
+ UNION ALL
463
+ SELECT ${fields.map((f) => `${draftFieldSql(model, entity, f)} AS ${quoteIdentifier(f.name)}`).join(", ")}, FALSE, d."HasActiveEntity", FALSE, d."DraftUUID"
464
+ FROM ${quoteIdentifier(draft.table)} d;
465
+ `);
466
+ }
467
+ return statements.length === 0 ? [] : ["-- active instances and drafts of the exposed entities (D54)", ...statements];
468
+ }
469
+ /**
470
+ * A field of an entity of a draft BO read from its draft table `d`: the column of its base field,
471
+ * or its calculated element (D67) computed from the draft values (NULL for a column of the data
472
+ * source the base entity does not expose).
473
+ */
474
+ function draftFieldSql(model, entity, field, depth = 0) {
475
+ const source = entity.kind === "projection" ? sourceEntityOf(model, entity) : undefined;
476
+ if (field.expression !== undefined && depth < 20) {
477
+ const refs = {
478
+ column: (name, type) => {
479
+ if (source !== undefined) {
480
+ const sourceField = findField(source, name);
481
+ return sourceField === undefined ? `NULL::${sqlType(type)}` : draftFieldSql(model, source, sourceField, depth + 1);
482
+ }
483
+ const exposed = entity.fields.find((f) => f.expression === undefined && f.draft !== true && same(f.column ?? f.baseField ?? "", name));
484
+ return exposed === undefined ? `NULL::${sqlType(type)}` : `d.${quoteIdentifier(exposed.name)}`;
485
+ },
486
+ element: (name, type) => {
487
+ const target = findField(entity, name);
488
+ return target === undefined ? `NULL::${sqlType(type)}` : draftFieldSql(model, entity, target, depth + 1);
489
+ },
490
+ };
491
+ return calculatedColumn(field.expression, field.type, sqlType, refs);
492
+ }
493
+ if (source !== undefined) {
494
+ const sourceField = findField(source, field.baseField ?? field.name);
495
+ if (sourceField !== undefined) {
496
+ return draftFieldSql(model, source, sourceField, depth + 1);
497
+ }
498
+ }
499
+ return `d.${quoteIdentifier(field.name)}`;
500
+ }
501
+ /**
502
+ * The reference data of the standard views (I_Currency…, D44), as SAP delivers it: inserted when
503
+ * missing, never changed (rows added or changed by the application stay).
504
+ */
505
+ function standardData(model) {
506
+ const statements = [];
507
+ for (const table of model.tables.filter((t) => t.standard === true)) {
508
+ const computed = standardSql(table.name);
509
+ if (computed !== undefined) {
510
+ statements.push(`-- reference data of ${table.name} (standard views, D44)\n${computed}`);
511
+ continue;
512
+ }
513
+ const data = standardRows(table.name);
514
+ if (data.length === 0) {
515
+ continue;
516
+ }
517
+ const columns = Object.keys(data[0] ?? {});
518
+ const keys = table.columns.filter((c) => c.key && !c.client).map((c) => quoteIdentifier(c.name));
519
+ const value = (v) => (typeof v === "number" ? String(v) : `'${v.replace(/'/g, "''")}'`);
520
+ statements.push(`-- reference data of ${table.name} (standard views, D44)\nINSERT INTO ${quoteIdentifier(table.name)} (${columns.map(quoteIdentifier).join(", ")}) VALUES\n${data
521
+ .map((row) => ` (${columns.map((c) => value(row[c] ?? "")).join(", ")})`)
522
+ .join(",\n")}\nON CONFLICT (${keys.join(", ")}) DO NOTHING;`);
523
+ }
524
+ return statements;
525
+ }
526
+ /**
527
+ * The tables of the services of the clean-room framework (D40): the number ranges of
528
+ * cl_numberrange_runtime (and the intervals of rapt/number-ranges.json) and the application log
529
+ * of cl_bali_*. A configured interval keeps its current number when its bounds change.
530
+ */
531
+ function frameworkTables(model) {
532
+ const numberRanges = model.services?.numberRanges === true || (model.numberRanges ?? []).length > 0;
533
+ const applicationLog = model.services?.applicationLog === true;
534
+ const background = model.services?.background === true;
535
+ const mail = model.services?.mail === true;
536
+ if (!numberRanges && !applicationLog && !background && !mail) {
537
+ return "";
538
+ }
539
+ const literal = (value) => `'${value.replace(/'/g, "''")}'`;
540
+ const intervals = (model.numberRanges ?? []).map((i) => `INSERT INTO rapt_number_range (nr_object, nr_subobject, nr_interval, nr_toyear, from_number, to_number) VALUES (${literal(i.object)}, ${literal(i.subobject ?? "")}, ${literal(i.interval)}, ${literal(i.toyear ?? "")}, ${i.from}, ${i.to})\n ON CONFLICT (nr_object, nr_subobject, nr_interval, nr_toyear) DO UPDATE SET from_number = excluded.from_number, to_number = excluded.to_number;`);
541
+ const parts = ["-- number ranges, application log, background processes and mails of the behavior pools (D40, D41)"];
542
+ if (numberRanges) {
543
+ parts.push(`CREATE TABLE IF NOT EXISTS "rapt_number_range" (
544
+ "nr_object" text NOT NULL,
545
+ "nr_subobject" text NOT NULL DEFAULT '',
546
+ "nr_interval" text NOT NULL,
547
+ "nr_toyear" text NOT NULL DEFAULT '',
548
+ "from_number" numeric(20) NOT NULL,
549
+ "to_number" numeric(20) NOT NULL,
550
+ "current_number" numeric(20),
551
+ PRIMARY KEY ("nr_object", "nr_subobject", "nr_interval", "nr_toyear")
552
+ );`, ...intervals);
553
+ }
554
+ if (applicationLog) {
555
+ parts.push(`CREATE TABLE IF NOT EXISTS "rapt_application_log" (
556
+ "log_handle" text PRIMARY KEY,
557
+ "log_object" text NOT NULL,
558
+ "log_subobject" text NOT NULL DEFAULT '',
559
+ "external_id" text NOT NULL DEFAULT '',
560
+ "log_user" text NOT NULL DEFAULT '',
561
+ "log_timestamp" timestamptz NOT NULL DEFAULT now(),
562
+ "expiry_date" date
563
+ );
564
+ CREATE INDEX IF NOT EXISTS "rapt_application_log_object_idx" ON "rapt_application_log" ("log_object", "log_subobject", "external_id");
565
+ CREATE TABLE IF NOT EXISTS "rapt_application_log_item" (
566
+ "log_handle" text NOT NULL REFERENCES "rapt_application_log" ON DELETE CASCADE,
567
+ "item_number" integer NOT NULL,
568
+ "severity" text NOT NULL DEFAULT '',
569
+ "category" text NOT NULL DEFAULT '',
570
+ "message_text" text NOT NULL DEFAULT '',
571
+ "msgid" text NOT NULL DEFAULT '',
572
+ "msgno" text NOT NULL DEFAULT '',
573
+ "msgv1" text NOT NULL DEFAULT '',
574
+ "msgv2" text NOT NULL DEFAULT '',
575
+ "msgv3" text NOT NULL DEFAULT '',
576
+ "msgv4" text NOT NULL DEFAULT '',
577
+ "item_timestamp" numeric(21,7),
578
+ PRIMARY KEY ("log_handle", "item_number")
579
+ );`);
580
+ }
581
+ if (background) {
582
+ parts.push(`CREATE TABLE IF NOT EXISTS "rapt_background_process" (
583
+ "process_id" text PRIMARY KEY,
584
+ "process_name" text NOT NULL DEFAULT '',
585
+ "state" text NOT NULL,
586
+ "error_text" text NOT NULL DEFAULT '',
587
+ "process_user" text NOT NULL DEFAULT '',
588
+ "created_at" timestamptz NOT NULL DEFAULT now(),
589
+ "finished_at" timestamptz
590
+ );`);
591
+ }
592
+ if (mail) {
593
+ parts.push(`CREATE TABLE IF NOT EXISTS "rapt_mail" (
594
+ "mail_id" text PRIMARY KEY,
595
+ "sender" text NOT NULL,
596
+ "recipients" text NOT NULL,
597
+ "subject" text NOT NULL DEFAULT '',
598
+ "raw_message" text NOT NULL,
599
+ "state" text NOT NULL,
600
+ "error_text" text NOT NULL DEFAULT '',
601
+ "mail_user" text NOT NULL DEFAULT '',
602
+ "created_at" timestamptz NOT NULL DEFAULT now(),
603
+ "sent_at" timestamptz
604
+ );`);
605
+ }
606
+ return `${parts.join("\n")}\n`;
607
+ }
608
+ /** The view of the base (view) entity behind a projection: the one the RAP runtime reads. */
609
+ export function baseViewOf(model, entity) {
610
+ return baseEntityOf(model, entity).sqlView;
611
+ }
612
+ //# sourceMappingURL=sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../../src/gen/sql.ts"],"names":[],"mappings":"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"}