@intentius/sql-yodeler 0.3.0 → 0.4.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 (201) hide show
  1. package/README.md +1 -1
  2. package/dist/apply-steps/index.d.ts +65 -0
  3. package/dist/apply-steps/index.js +106 -0
  4. package/dist/apply-steps/index.js.map +1 -0
  5. package/dist/approval-mode/index.d.ts +78 -0
  6. package/dist/approval-mode/index.js +105 -0
  7. package/dist/approval-mode/index.js.map +1 -0
  8. package/dist/chant/access.d.ts +87 -0
  9. package/dist/chant/access.js +169 -0
  10. package/dist/chant/access.js.map +1 -0
  11. package/dist/chant/drift.d.ts +17 -1
  12. package/dist/chant/drift.js +55 -2
  13. package/dist/chant/drift.js.map +1 -1
  14. package/dist/chant/plan.d.ts +18 -2
  15. package/dist/chant/plan.js +21 -3
  16. package/dist/chant/plan.js.map +1 -1
  17. package/dist/ci/render.d.ts +54 -10
  18. package/dist/ci/render.js +249 -52
  19. package/dist/ci/render.js.map +1 -1
  20. package/dist/cleanup/index.d.ts +86 -0
  21. package/dist/cleanup/index.js +207 -0
  22. package/dist/cleanup/index.js.map +1 -0
  23. package/dist/commands/apply.js +153 -20
  24. package/dist/commands/apply.js.map +1 -1
  25. package/dist/commands/approve.d.ts +13 -0
  26. package/dist/commands/approve.js +206 -24
  27. package/dist/commands/approve.js.map +1 -1
  28. package/dist/commands/ci.js +12 -0
  29. package/dist/commands/ci.js.map +1 -1
  30. package/dist/commands/cleanup.d.ts +13 -0
  31. package/dist/commands/cleanup.js +138 -0
  32. package/dist/commands/cleanup.js.map +1 -0
  33. package/dist/commands/config.d.ts +3 -0
  34. package/dist/commands/config.js +136 -0
  35. package/dist/commands/config.js.map +1 -0
  36. package/dist/commands/drift.js +34 -3
  37. package/dist/commands/drift.js.map +1 -1
  38. package/dist/commands/index.js +6 -0
  39. package/dist/commands/index.js.map +1 -1
  40. package/dist/commands/lint.js +30 -6
  41. package/dist/commands/lint.js.map +1 -1
  42. package/dist/commands/new.js +133 -34
  43. package/dist/commands/new.js.map +1 -1
  44. package/dist/commands/plan.js +42 -5
  45. package/dist/commands/plan.js.map +1 -1
  46. package/dist/commands/test.d.ts +3 -0
  47. package/dist/commands/test.js +164 -0
  48. package/dist/commands/test.js.map +1 -0
  49. package/dist/config/define.d.ts +117 -2
  50. package/dist/config/define.js +2 -0
  51. package/dist/config/define.js.map +1 -1
  52. package/dist/config/load.js +74 -10
  53. package/dist/config/load.js.map +1 -1
  54. package/dist/config/settings.d.ts +18 -0
  55. package/dist/config/settings.js +26 -0
  56. package/dist/config/settings.js.map +1 -1
  57. package/dist/credentials.d.ts +119 -0
  58. package/dist/credentials.js +119 -0
  59. package/dist/credentials.js.map +1 -0
  60. package/dist/exit.js +1 -1
  61. package/dist/exit.js.map +1 -1
  62. package/dist/index.d.ts +5 -1
  63. package/dist/index.js +2 -0
  64. package/dist/index.js.map +1 -1
  65. package/dist/init/adopt.js +1 -1
  66. package/dist/init/adopt.js.map +1 -1
  67. package/dist/init/clickhouse-access.d.ts +64 -0
  68. package/dist/init/clickhouse-access.js +211 -0
  69. package/dist/init/clickhouse-access.js.map +1 -0
  70. package/dist/init/live.d.ts +4 -0
  71. package/dist/init/live.js +16 -0
  72. package/dist/init/live.js.map +1 -1
  73. package/dist/lint/access.d.ts +18 -0
  74. package/dist/lint/access.js +34 -0
  75. package/dist/lint/access.js.map +1 -0
  76. package/dist/lint/check.js +23 -6
  77. package/dist/lint/check.js.map +1 -1
  78. package/dist/lint/config.d.ts +7 -1
  79. package/dist/lint/config.js +11 -5
  80. package/dist/lint/config.js.map +1 -1
  81. package/dist/lint/index.d.ts +2 -0
  82. package/dist/lint/index.js +2 -0
  83. package/dist/lint/index.js.map +1 -1
  84. package/dist/lint/naming.d.ts +62 -0
  85. package/dist/lint/naming.js +138 -0
  86. package/dist/lint/naming.js.map +1 -0
  87. package/dist/lint/rules.d.ts +37 -4
  88. package/dist/lint/rules.js +16 -4
  89. package/dist/lint/rules.js.map +1 -1
  90. package/dist/lint/schema-checks.d.ts +63 -0
  91. package/dist/lint/schema-checks.js +128 -0
  92. package/dist/lint/schema-checks.js.map +1 -0
  93. package/dist/lint/statements.d.ts +22 -1
  94. package/dist/lint/statements.js +40 -1
  95. package/dist/lint/statements.js.map +1 -1
  96. package/dist/mcp/tools.d.ts +1 -1
  97. package/dist/mcp/tools.js +1 -1
  98. package/dist/mcp/tools.js.map +1 -1
  99. package/dist/migrations/checkpoint.js +0 -2
  100. package/dist/migrations/checkpoint.js.map +1 -1
  101. package/dist/migrations/checks.d.ts +19 -1
  102. package/dist/migrations/checks.js +15 -0
  103. package/dist/migrations/checks.js.map +1 -1
  104. package/dist/migrations/create.d.ts +13 -4
  105. package/dist/migrations/create.js +24 -9
  106. package/dist/migrations/create.js.map +1 -1
  107. package/dist/migrations/routines.d.ts +5 -15
  108. package/dist/migrations/routines.js +5 -30
  109. package/dist/migrations/routines.js.map +1 -1
  110. package/dist/pr/model.d.ts +4 -1
  111. package/dist/pr/model.js +13 -5
  112. package/dist/pr/model.js.map +1 -1
  113. package/dist/pr/render.d.ts +4 -1
  114. package/dist/pr/render.js +22 -8
  115. package/dist/pr/render.js.map +1 -1
  116. package/dist/pr/tenants.d.ts +37 -0
  117. package/dist/pr/tenants.js +138 -0
  118. package/dist/pr/tenants.js.map +1 -0
  119. package/dist/probe.d.ts +27 -0
  120. package/dist/probe.js +106 -0
  121. package/dist/probe.js.map +1 -0
  122. package/dist/project.d.ts +16 -0
  123. package/dist/project.js +29 -1
  124. package/dist/project.js.map +1 -1
  125. package/dist/replay/clickhouse.d.ts +31 -0
  126. package/dist/replay/clickhouse.js +103 -6
  127. package/dist/replay/clickhouse.js.map +1 -1
  128. package/dist/replay/replay.d.ts +5 -2
  129. package/dist/replay/replay.js.map +1 -1
  130. package/dist/report/audit.d.ts +1 -1
  131. package/dist/report/audit.js +20 -3
  132. package/dist/report/audit.js.map +1 -1
  133. package/dist/schemas.d.ts +3 -1
  134. package/dist/schemas.js +2 -0
  135. package/dist/schemas.js.map +1 -1
  136. package/dist/sources/ddl.d.ts +15 -20
  137. package/dist/sources/ddl.js +34 -328
  138. package/dist/sources/ddl.js.map +1 -1
  139. package/dist/sources/index.js +2 -2
  140. package/dist/sources/index.js.map +1 -1
  141. package/dist/steps/backfill.d.ts +40 -5
  142. package/dist/steps/backfill.js +128 -8
  143. package/dist/steps/backfill.js.map +1 -1
  144. package/dist/steps/index.d.ts +19 -1
  145. package/dist/steps/index.js +34 -7
  146. package/dist/steps/index.js.map +1 -1
  147. package/dist/steps/kinds.d.ts +42 -4
  148. package/dist/steps/kinds.js +88 -14
  149. package/dist/steps/kinds.js.map +1 -1
  150. package/dist/steps/postgres-migration.d.ts +3 -0
  151. package/dist/steps/postgres-migration.js +7 -3
  152. package/dist/steps/postgres-migration.js.map +1 -1
  153. package/dist/steps/rebuild.d.ts +15 -6
  154. package/dist/steps/rebuild.js +12 -9
  155. package/dist/steps/rebuild.js.map +1 -1
  156. package/dist/tenants/index.d.ts +2 -1
  157. package/dist/tenants/index.js +3 -4
  158. package/dist/tenants/index.js.map +1 -1
  159. package/dist/tenants/wave.d.ts +128 -0
  160. package/dist/tenants/wave.js +254 -0
  161. package/dist/tenants/wave.js.map +1 -0
  162. package/dist/testing/define.d.ts +62 -0
  163. package/dist/testing/define.js +32 -0
  164. package/dist/testing/define.js.map +1 -0
  165. package/dist/testing/files.d.ts +5 -0
  166. package/dist/testing/files.js +18 -0
  167. package/dist/testing/files.js.map +1 -0
  168. package/dist/testing/report.d.ts +14 -0
  169. package/dist/testing/report.js +83 -0
  170. package/dist/testing/report.js.map +1 -0
  171. package/dist/testing/run.d.ts +104 -0
  172. package/dist/testing/run.js +328 -0
  173. package/dist/testing/run.js.map +1 -0
  174. package/dist/versioned/approval.d.ts +6 -0
  175. package/dist/versioned/approval.js +11 -5
  176. package/dist/versioned/approval.js.map +1 -1
  177. package/dist/versioned/checks.d.ts +8 -2
  178. package/dist/versioned/checks.js +34 -13
  179. package/dist/versioned/checks.js.map +1 -1
  180. package/dist/versioned/driver.d.ts +2 -2
  181. package/dist/versioned/engine.d.ts +10 -0
  182. package/dist/versioned/engine.js +8 -4
  183. package/dist/versioned/engine.js.map +1 -1
  184. package/dist/versioned/explain.d.ts +2 -0
  185. package/dist/versioned/explain.js +3 -1
  186. package/dist/versioned/explain.js.map +1 -1
  187. package/dist/versioned/state.js +1 -1
  188. package/dist/versioned/state.js.map +1 -1
  189. package/dist/waves/index.d.ts +58 -13
  190. package/dist/waves/index.js +109 -24
  191. package/dist/waves/index.js.map +1 -1
  192. package/dist/waves/record.d.ts +10 -0
  193. package/dist/waves/record.js.map +1 -1
  194. package/package.json +7 -7
  195. package/schemas/apply.schema.json +1 -1
  196. package/schemas/cleanup.schema.json +40 -0
  197. package/schemas/lint-rules.schema.json +4 -0
  198. package/schemas/new.schema.json +41 -3
  199. package/schemas/plan.schema.json +39 -0
  200. package/schemas/report.schema.json +1 -1
  201. package/schemas/test.schema.json +41 -0
@@ -1,347 +1,53 @@
1
1
  /**
2
2
  * A file of DDL, as an ORM prints it (Prisma's `migrate diff --script`,
3
3
  * Drizzle's `generate`, Django's `sqlmigrate`, SQLAlchemy's `CreateTable`),
4
- * read with the sql lexicon's own parsers and written out as declarations:
5
- * one TypeScript file of `table`, `index`, `view`, ... templates, the same
6
- * file `chant import` writes. The build then treats them like any other
7
- * declaration in `src/`.
4
+ * read by the sql lexicon's public `.sql` file API and written out as
5
+ * declarations: one TypeScript file of `table`, `index`, `view`, ...
6
+ * templates, the same file `chant import` writes. The build then treats
7
+ * them like any other declaration in `src/`.
8
8
  *
9
- * What is read:
10
- *
11
- * - Postgres: `CREATE SCHEMA`, `TABLE`, `INDEX`, `VIEW`, `MATERIALIZED VIEW`,
12
- * `SEQUENCE`, `TYPE ... AS ENUM`, `DOMAIN`, `EXTENSION` and `COMMENT ON`,
13
- * each parsed by the lexicon's Postgres parser. `ALTER TABLE <t> ADD
14
- * [CONSTRAINT <c>] FOREIGN KEY | UNIQUE | PRIMARY KEY | CHECK ...`, the
15
- * form ORMs print foreign keys in, is folded into `<t>`'s CREATE TABLE as
16
- * a table constraint. `BEGIN` and `COMMIT` are skipped.
17
- * - ClickHouse: `CREATE DATABASE`, `TABLE`, `VIEW` and `MATERIALIZED VIEW`,
18
- * as `chant import <file>.sql` reads them.
19
- *
20
- * Any other statement is an error naming it: a statement left out would be
21
- * a schema yodel does not manage, silently.
9
+ * What is read is what chant reads from a `.sql` file in `src/`
10
+ * (`sqlFileDeclarations`): CREATE statements, on Postgres also GRANT, REVOKE
11
+ * and ALTER DEFAULT PRIVILEGES, with `COMMENT ON`,
12
+ * `ALTER TABLE ... ROW LEVEL SECURITY` and `ALTER TABLE <t> ADD <table
13
+ * constraint>` (the form ORMs print foreign keys in) folded into the object
14
+ * they finish. `BEGIN` and `COMMIT` are skipped. Any other statement is an
15
+ * error naming it: a statement left out would be a schema yodel does not
16
+ * manage, silently.
22
17
  *
23
18
  * `schema` (a Postgres schema, a ClickHouse database) qualifies the names
24
19
  * the DDL leaves unqualified, as an ORM does when the schema comes from its
25
- * connection: on Postgres an object's own name, an index's table, a foreign
26
- * key's table and a column type naming an enum or domain the file creates;
27
- * on ClickHouse an object's own name.
20
+ * connection.
28
21
  */
29
22
  import { YodelError } from "../project.js";
30
- const isTrivia = (t) => t.kind === "ws" || t.kind === "comment";
31
- const isName = (t) => t !== undefined && (t.kind === "ident" || t.kind === "qident");
32
- const word = (t, ...words) => t !== undefined && t.kind === "ident" && words.includes(t.text.toUpperCase());
33
- /** A name as SQL text: bare when it is a plain lower-case identifier, else double-quoted. */
34
- const quoteIdent = (name) => (/^[a-z_][a-z0-9_]*$/.test(name) ? name : `"${name.replace(/"/g, '""')}"`);
35
- /** The statements of a file, each as its tokens (trivia kept inside, trimmed at the ends), split on top-level `;`. */
36
- function splitTokens(tokens) {
37
- const out = [];
38
- let current = [];
39
- const flush = () => {
40
- let from = 0;
41
- let to = current.length;
42
- const trivia = (i) => {
43
- const t = current[i];
44
- return t !== undefined && isTrivia(t);
45
- };
46
- while (from < to && trivia(from))
47
- from++;
48
- while (to > from && trivia(to - 1))
49
- to--;
50
- if (to > from)
51
- out.push(current.slice(from, to));
52
- current = [];
53
- };
54
- for (const t of tokens) {
55
- if (t.kind === "punct" && t.text === ";")
56
- flush();
57
- else
58
- current.push(t);
59
- }
60
- flush();
61
- return out;
23
+ /** The lexicon, loaded when a source is read: a project without sources does not pay for it. */
24
+ const lexicon = () => import("@intentius/chant-lexicon-sql");
25
+ const readOptions = (options) => ({ origin: options.origin, ...(options.schema !== undefined ? { schema: options.schema } : {}) });
26
+ /** chant's error for a statement it cannot declare, as yodel's, with what a DDL source holds. */
27
+ async function ddlError(e) {
28
+ if (!(e instanceof (await lexicon()).SqlFileError))
29
+ return e;
30
+ return new YodelError(`${e.message}\nA DDL source holds what chant reads from a .sql file: CREATE statements, and on Postgres the COMMENT ON and ALTER TABLE ... ADD that finish them.`);
62
31
  }
63
- const text = (tokens) => tokens.map((t) => t.text).join("");
64
- const firstLine = (s) => (s.split("\n")[0] ?? "").slice(0, 100);
65
32
  /** Turns a file of DDL into declarations. */
66
33
  export async function ddlToDeclarations(dialect, ddl, options) {
67
- const ir = dialect === "postgres" ? await postgresIR(ddl, options) : await clickhouseIR(ddl, options);
68
- if (ir.resources.length === 0)
69
- throw new YodelError(`${options.origin}: the DDL creates no objects`);
70
- const files = dialect === "postgres"
71
- ? new (await import("@intentius/chant-lexicon-sql/postgres/import/generator")).PostgresGenerator(options.header).generate(ir)
72
- : new (await import("@intentius/chant-lexicon-sql/clickhouse/import/generator")).ClickHouseGenerator(options.header).generate(ir);
73
- const [file] = files;
74
- if (!file || files.length !== 1)
75
- throw new YodelError(`${options.origin}: the lexicon's generator wrote ${String(files.length)} files, expected one`);
76
- return {
77
- content: file.content,
78
- objects: ir.resources.map((r) => {
79
- const p = r.properties;
80
- const qualifier = p.schema ?? p.database;
81
- return { export: r.logicalId, type: r.type, name: qualifier ? `${qualifier}.${p.name}` : p.name };
82
- }),
83
- };
84
- }
85
- // ---------- ClickHouse ----------
86
- async function clickhouseIR(ddl, options) {
87
- const { tokenizeText } = await import("@intentius/chant-lexicon-sql/clickhouse/tokens");
88
- const { parseCreate } = await import("@intentius/chant-lexicon-sql/clickhouse/parser");
89
- const { describeStatement, objectsToIR } = await import("@intentius/chant-lexicon-sql/clickhouse/import/ir");
90
- const objects = [];
91
- const problems = [];
92
- for (const stmt of splitTokens(tokenizeText(ddl, 0))) {
93
- let sql = text(stmt);
94
- if (!/^CREATE\b/i.test(sql)) {
95
- problems.push(`not a CREATE statement: ${firstLine(sql)}`);
96
- continue;
97
- }
98
- try {
99
- const tokens = tokenizeText(sql, 0);
100
- const node = parseCreate(tokens);
101
- const name = tokens.slice(node.name.from, node.name.to).filter((t) => !isTrivia(t));
102
- const [only] = name;
103
- if (options.schema && node.statement !== "database" && only && name.length === 1) {
104
- const at = tokens.indexOf(only);
105
- sql = text(tokens.slice(0, at)) + `${quoteIdent(options.schema)}.` + text(tokens.slice(at));
106
- }
107
- objects.push(describeStatement(sql));
108
- }
109
- catch (e) {
110
- problems.push(`does not parse (${e instanceof Error ? e.message : String(e)}): ${firstLine(sql)}`);
111
- }
112
- }
113
- if (problems.length > 0)
114
- throw ddlError(options.origin, problems);
115
- return objectsToIR(objects);
116
- }
117
- // ---------- Postgres ----------
118
- const PG_TYPE = {
119
- schema: "Postgres::Schema",
120
- table: "Postgres::Table",
121
- index: "Postgres::Index",
122
- view: "Postgres::View",
123
- sequence: "Postgres::Sequence",
124
- enum: "Postgres::Enum",
125
- domain: "Postgres::Domain",
126
- extension: "Postgres::Extension",
127
- };
128
- function ddlError(origin, problems) {
129
- return new YodelError(`${origin}: ${String(problems.length)} statement(s) yodel cannot read as declarations:\n${problems.map((p) => ` - ${p}`).join("\n")}\n` +
130
- `A DDL source holds CREATE statements (and, on Postgres, COMMENT ON and ALTER TABLE ... ADD of a table constraint).`);
131
- }
132
- async function postgresIR(ddl, options) {
133
- const { tokenizeText } = await import("@intentius/chant-lexicon-sql/postgres/tokens");
134
- const { parseStatements, identValue } = await import("@intentius/chant-lexicon-sql/postgres/parser");
135
- const { objectsToIR } = await import("@intentius/chant-lexicon-sql/postgres/import/ir");
136
- const problems = [];
137
- const parsed = [];
138
- const alters = [];
139
- for (const stmt of splitTokens(tokenizeText(ddl, 0))) {
140
- const sig = stmt.filter((t) => !isTrivia(t));
141
- const sql = text(stmt);
142
- if (sig.length === 1 && word(sig[0], "BEGIN", "COMMIT"))
143
- continue;
144
- if (word(sig[0], "ALTER") && word(sig[1], "TABLE")) {
145
- const alter = readAlterAdd(stmt, sig, identValue);
146
- if (alter)
147
- alters.push({ ...alter, sql });
148
- else
149
- problems.push(`an ALTER TABLE other than ADD of a table constraint: ${firstLine(sql)}`);
150
- continue;
151
- }
152
- if (!word(sig[0], "CREATE", "COMMENT")) {
153
- problems.push(`not a CREATE statement: ${firstLine(sql)}`);
154
- continue;
155
- }
156
- try {
157
- const tokens = tokenizeText(sql, 0);
158
- const nodes = parseStatements(tokens);
159
- for (const node of nodes)
160
- parsed.push({ tokens, node });
161
- }
162
- catch (e) {
163
- problems.push(`does not parse (${e instanceof Error ? e.message : String(e)}): ${firstLine(sql)}`);
164
- }
165
- }
166
- if (problems.length > 0)
167
- throw ddlError(options.origin, problems);
168
- const nameOf = (tokens, n) => n.pieces.length > 0 ? n.pieces : tokens.slice(n.span.from, n.span.to).filter((t) => isName(t)).map((t) => identValue(t));
169
- const qualify = (pieces) => {
170
- const name = pieces[pieces.length - 1] ?? "";
171
- const schema = pieces.length >= 2 ? pieces[pieces.length - 2] : options.schema;
172
- return schema ? { schema, name } : { name };
173
- };
174
- const key = (q) => `${q.schema ?? ""}.${q.name}`;
175
- // The types the file creates, so a column of one is qualified with the rest.
176
- const fileTypes = new Set();
177
- for (const { tokens, node } of parsed) {
178
- if (node.statement === "enum" || node.statement === "domain") {
179
- const pieces = nameOf(tokens, node.name);
180
- const [only] = pieces;
181
- if (only !== undefined && pieces.length === 1)
182
- fileTypes.add(only);
183
- }
184
- }
185
- const objects = [];
186
- const byName = new Map();
187
- for (const { tokens, node } of parsed) {
188
- const inserts = new Set();
189
- /** Qualifies an unqualified name in the statement, when `schema` is set. */
190
- const mark = (n) => {
191
- if (!n || !options.schema)
192
- return;
193
- const names = tokens.slice(n.span.from, n.span.to).filter((t) => !isTrivia(t));
194
- const [only] = names;
195
- if (only && names.length === 1 && isName(only))
196
- inserts.add(tokens.indexOf(only));
197
- };
198
- if (node.statement === "comment") {
199
- const target = qualify(nameOf(tokens, node.objectType === "COLUMN" ? { ...node.target, pieces: nameOf(tokens, node.target).slice(0, -1) } : node.target));
200
- const owner = byName.get(key(target));
201
- if (!owner) {
202
- problems.push(`COMMENT ON ${node.objectType} for an object the file does not create: ${firstLine(text(tokens))}`);
203
- continue;
204
- }
205
- if (node.objectType !== "COLUMN" || nameOf(tokens, node.target).length < 3)
206
- mark(node.target);
207
- owner.statements.push(rewrite(tokens, inserts, options.schema));
208
- continue;
209
- }
210
- if (node.statement === "policy" || node.statement === "role" || node.statement === "grant" || node.statement === "rowSecurity") {
211
- problems.push(`access control (a policy, role, grant or row security) is not read from a DDL source: ${firstLine(text(tokens))}`);
212
- continue;
213
- }
214
- if (node.statement === "index") {
215
- if (!node.name) {
216
- problems.push(`an index with no name (the declaration needs one): ${firstLine(text(tokens))}`);
217
- continue;
218
- }
219
- mark(node.table);
220
- }
221
- else if (node.statement === "table") {
222
- for (const c of [...node.columns.flatMap((col) => col.constraints), ...node.constraints])
223
- mark(c.references?.table);
224
- if (options.schema) {
225
- for (const col of node.columns) {
226
- if (!col.type)
227
- continue;
228
- const type = tokens.slice(col.type.from, col.type.to).filter((t) => !isTrivia(t));
229
- const first = type[0];
230
- if (first && isName(first) && fileTypes.has(identValue(first)) && !(type[1]?.kind === "punct" && type[1].text === "."))
231
- inserts.add(tokens.indexOf(first));
232
- }
233
- }
234
- }
235
- else if (node.statement === "schema" && !node.name) {
236
- problems.push(`a CREATE SCHEMA with no name: ${firstLine(text(tokens))}`);
237
- continue;
238
- }
239
- // An index takes its table's schema: its own name is never qualified.
240
- if (node.statement !== "schema" && node.statement !== "extension" && node.statement !== "index")
241
- mark(node.name);
242
- const pieces = node.name ? nameOf(tokens, node.name) : [];
243
- const q = node.statement === "schema" || node.statement === "extension" ? { name: pieces[pieces.length - 1] ?? "" } : node.statement === "index" ? qualify([...nameOf(tokens, node.table).slice(0, -1), pieces[pieces.length - 1] ?? ""]) : qualify(pieces);
244
- const type = node.statement === "view" && node.materialized ? "Postgres::MaterializedView" : (PG_TYPE[node.statement] ?? node.statement);
245
- const object = { type, ...q, statements: [rewrite(tokens, inserts, options.schema)], constraints: [] };
246
- objects.push(object);
247
- if (node.statement !== "index")
248
- byName.set(key(q), object);
34
+ const { sqlFileDeclarations } = await lexicon();
35
+ try {
36
+ const { content, objects } = sqlFileDeclarations(dialect, ddl, { ...readOptions(options), ...(options.header !== undefined ? { header: options.header } : {}) });
37
+ return { content, objects: objects.map((o) => ({ export: o.export, type: o.type, name: o.name })) };
249
38
  }
250
- for (const alter of alters) {
251
- const table = byName.get(key(qualify(alter.table)));
252
- if (!table || table.type !== "Postgres::Table") {
253
- problems.push(`ALTER TABLE of a table the file does not create: ${firstLine(alter.sql)}`);
254
- continue;
255
- }
256
- table.constraints.push(await qualifyConstraint(alter.constraint, options.schema));
39
+ catch (e) {
40
+ throw await ddlError(e);
257
41
  }
258
- if (problems.length > 0)
259
- throw ddlError(options.origin, problems);
260
- return objectsToIR(objects.map((o) => {
261
- const [create = [], ...comments] = o.statements;
262
- const ddl = [o.constraints.length > 0 ? addConstraints(create, o.constraints) : text(create), ...comments.map((c) => text(c))].join(";\n");
263
- return { type: o.type, ...(o.schema ? { schema: o.schema } : {}), name: o.name, ddl };
264
- }));
265
42
  }
266
- /** The statement's tokens with `schema.` inserted before each marked one. */
267
- function rewrite(tokens, inserts, schema) {
268
- if (!schema || inserts.size === 0)
269
- return [...tokens];
270
- const out = [];
271
- tokens.forEach((t, i) => {
272
- if (inserts.has(i))
273
- out.push({ kind: "ident", text: `${quoteIdent(schema)}.`, part: 0, start: 0, end: 0 });
274
- out.push(t);
275
- });
276
- return out;
277
- }
278
- /** `ALTER TABLE [ONLY] [IF EXISTS] <name> ADD <table constraint>`: the table's name pieces and the constraint's text. */
279
- function readAlterAdd(stmt, sig, identValue) {
280
- let i = 2;
281
- if (word(sig[i], "IF") && word(sig[i + 1], "EXISTS"))
282
- i += 2;
283
- if (word(sig[i], "ONLY"))
284
- i++;
285
- const table = [];
286
- for (let t = sig[i]; t && isName(t); t = sig[i]) {
287
- table.push(identValue(t));
288
- i++;
289
- const dot = sig[i];
290
- if (dot?.kind === "punct" && dot.text === ".")
291
- i++;
292
- else
293
- break;
43
+ /** The objects a file of DDL creates, without writing declarations. */
44
+ export async function ddlObjects(dialect, ddl, options) {
45
+ const { readSqlFile } = await lexicon();
46
+ try {
47
+ return readSqlFile(dialect, ddl, readOptions(options)).map((o) => ({ export: o.export, type: o.type, name: o.name }));
294
48
  }
295
- if (table.length === 0 || !word(sig[i], "ADD"))
296
- return undefined;
297
- i++;
298
- if (!word(sig[i], "CONSTRAINT", "FOREIGN", "UNIQUE", "PRIMARY", "CHECK", "EXCLUDE"))
299
- return undefined;
300
- // One constraint: a comma at depth 0 starts another ALTER action, which is not read.
301
- let depth = 0;
302
- for (const t of sig.slice(i)) {
303
- if (t.kind === "punct" && t.text === "(")
304
- depth++;
305
- else if (t.kind === "punct" && t.text === ")")
306
- depth--;
307
- else if (t.kind === "punct" && t.text === "," && depth === 0)
308
- return undefined;
49
+ catch (e) {
50
+ throw await ddlError(e);
309
51
  }
310
- const start = sig[i];
311
- return start ? { table, constraint: text(stmt.slice(stmt.indexOf(start))) } : undefined;
312
- }
313
- /** Qualifies the table a folded FOREIGN KEY references, when it is unqualified. */
314
- async function qualifyConstraint(constraint, schema) {
315
- if (!schema)
316
- return constraint;
317
- const { tokenizeText } = await import("@intentius/chant-lexicon-sql/postgres/tokens");
318
- const tokens = tokenizeText(constraint, 0);
319
- const sig = tokens.map((t, i) => ({ t, i })).filter((x) => !isTrivia(x.t));
320
- const inserts = new Set();
321
- sig.forEach((x, k) => {
322
- const target = sig[k + 1];
323
- const dot = sig[k + 2]?.t;
324
- if (word(x.t, "REFERENCES") && target && isName(target.t) && !(dot?.kind === "punct" && dot.text === "."))
325
- inserts.add(target.i);
326
- });
327
- return text(rewrite(tokens, inserts, schema));
328
- }
329
- /** A CREATE TABLE with table constraints added at the end of its column list (the `)` matching the first `(`). */
330
- function addConstraints(create, constraints) {
331
- let depth = 0;
332
- const close = create.findIndex((t) => {
333
- if (t.kind !== "punct")
334
- return false;
335
- if (t.text === "(")
336
- depth++;
337
- else if (t.text === ")")
338
- return --depth === 0;
339
- return false;
340
- });
341
- if (close < 0)
342
- return text(create);
343
- const before = text(create.slice(0, close)).replace(/\s+$/, "");
344
- const indent = /\n([ \t]+)\S[^\n]*$/.exec(before)?.[1] ?? " ";
345
- return `${before}${constraints.map((c) => `,\n${indent}${c}`).join("")}\n${text(create.slice(close))}`;
346
52
  }
347
53
  //# sourceMappingURL=ddl.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../src/sources/ddl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ddl.js","sourceRoot":"","sources":["../../src/sources/ddl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,UAAU,EAAmB,MAAM,eAAe,CAAC;AA2B5D,gGAAgG;AAChG,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,8BAA8B,CAAC,CAAC;AAE7D,MAAM,WAAW,GAAG,CAAC,OAAmB,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;AAE/I,iGAAiG;AACjG,KAAK,UAAU,QAAQ,CAAC,CAAU;IAChC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,CAAC;IAC7D,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,OAAO,qJAAqJ,CAAC,CAAC;AAC3L,CAAC;AAED,6CAA6C;AAC7C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,OAAmB,EAAE,GAAW,EAAE,OAAmB;IAC3F,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjK,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;IACtG,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAmB,EAAE,GAAW,EAAE,OAAmB;IACpF,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,EAAE,CAAC;IACxC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACxH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;AACH,CAAC"}
@@ -27,7 +27,7 @@ import { exec } from "node:child_process";
27
27
  import { existsSync, readFileSync, writeFileSync } from "node:fs";
28
28
  import { isAbsolute, join, relative } from "node:path";
29
29
  import { YodelError } from "../project.js";
30
- import { ddlToDeclarations } from "./ddl.js";
30
+ import { ddlObjects, ddlToDeclarations } from "./ddl.js";
31
31
  const SOURCE_NAME = /^[a-z][a-z0-9-]*$/;
32
32
  /** The generated file a source writes, relative to the project directory. */
33
33
  export const generatedPath = (project, name) => join(project.sourceDir, `${name}.generated.ts`);
@@ -125,7 +125,7 @@ export function duplicateExport(buildOutput, synced) {
125
125
  async function builtName(dialect, type, ddl) {
126
126
  try {
127
127
  const first = ddl.split(/;\s*\n\s*COMMENT ON\b/i)[0] ?? ddl;
128
- const [object] = (await ddlToDeclarations(dialect, first, { origin: "build" })).objects;
128
+ const [object] = await ddlObjects(dialect, first, { origin: "build" });
129
129
  return object && (type === undefined || object.type === type) ? object.name : undefined;
130
130
  }
131
131
  catch {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"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"}
@@ -2,7 +2,16 @@
2
2
  * A backfill step: a data migration the author writes, run inside the
3
3
  * migration between the statements around it, resumable from receipts.
4
4
  *
5
- * The step names a module in the migration's directory (`backfill.ts` by
5
+ * The common case is a form, the step's options in `migration.json`
6
+ * ({@link BackfillForm}): a table, an integer key and a batch size (or a
7
+ * list of batches), and the SQL of one batch with `{from}` and `{to}` (or
8
+ * `{batch}`) in it. `yodel new <name> --backfill` writes it from
9
+ * `backfills/<name>.json`. When the step runs, yodel builds the Op below
10
+ * from it ({@link formOp}): one `effect()` per batch, the batches read from
11
+ * the table's smallest and largest key at that moment, aligned to the
12
+ * batch size so a rerun sees the same ranges.
13
+ *
14
+ * The advanced case: the step names a module in the migration's directory (`backfill.ts` by
6
15
  * default) that exports a chant Op as `op` (or as its default export). Each
7
16
  * step of its phases is an `effect()` step: one batch of the backfill, with
8
17
  * its own receipt. The nested steps run SQL on the environment's server with
@@ -62,15 +71,23 @@ import type { ClickHousePort } from "../history/index.js";
62
71
  import type { PgClient } from "../history/postgres/index.js";
63
72
  import type { PgTimeouts } from "../versioned/postgres/executor.js";
64
73
  import { type RunOpOptions } from "./run.js";
65
- import { type BackfillStep } from "./kinds.js";
74
+ import { type BackfillForm, type BackfillStep } from "./kinds.js";
66
75
  /** The activity a backfill's steps run SQL with: `activity("yodelSql", { sql, settings? })`. */
67
76
  export declare const SQL_ACTIVITY = "yodelSql";
68
77
  /** The step `yodel new --backfill` adds to a migration. */
69
78
  export declare function backfillStep(migrationName: string, file?: string): BackfillStep;
79
+ /** The default place `yodel new <name> --backfill` reads a form from (and writes its template at), in the project directory. */
80
+ export declare const formPath: (name: string) => string;
81
+ /** What one batch of a form runs, as the plan shows it. */
82
+ export declare function describeFormSql(form: BackfillForm): string;
83
+ /** The step `yodel new --backfill` adds for a form: the form is the step's options, so it is in the checksum and the plan shows it. */
84
+ export declare function backfillFormStep(migrationName: string, form: BackfillForm): BackfillStep;
70
85
  /** Text only the template holds: a backfill still carrying it has not been written. */
71
86
  export declare const TEMPLATE_MARK = "write the backfill of";
72
87
  /** What `yodel new --backfill <file>` writes at `<file>` when there is none yet. */
73
88
  export declare function backfillTemplate(name: string, dialect?: SqlDialect): string;
89
+ /** What `yodel new <name> --backfill` writes at `backfills/<name>.json` when there is none yet: a form to fill in. */
90
+ export declare function formTemplate(name: string, dialect?: SqlDialect): string;
74
91
  /** The Op config a module exports as `op` or as its default export. */
75
92
  export declare function exportedOp(mod: Record<string, unknown>): OpConfig | undefined;
76
93
  /** What is wrong with a backfill's Op, if anything: every phase step is an effect() step, and there are no gates. */
@@ -79,7 +96,10 @@ export declare function backfillProblems(config: OpConfig): string[];
79
96
  export declare function loadBackfill(path: string, text?: string): Promise<OpConfig>;
80
97
  export interface BackfillSummary {
81
98
  op: "backfill";
82
- file: string;
99
+ /** The module, for a backfill written as an Op. */
100
+ file?: string;
101
+ /** The table, for a backfill written as a form. */
102
+ table?: string;
83
103
  /** The Op's name. */
84
104
  name: string;
85
105
  /** Batches (effect steps) the Op has. */
@@ -124,9 +144,24 @@ export interface RunBackfillOptions extends Omit<RunOpOptions, "activities" | "c
124
144
  postgres?: PgBackfillServer | undefined;
125
145
  receipts: ReceiptStore;
126
146
  log?: (line: string) => void;
147
+ /** On a tenant (#56): renames the template in each statement the backfill sends. */
148
+ rename?: ((sql: string) => string) | undefined;
149
+ }
150
+ /** One batch of a form: the receipt's name and the values its placeholders take. */
151
+ export interface FormBatch {
152
+ id: string;
153
+ values: Record<string, string>;
127
154
  }
128
- /** Runs a backfill step to the end, counting batches as they skip or finish. */
129
- export declare function runBackfill(file: string, run: RunBackfillOptions): Promise<{
155
+ /** The ranges `[from, to)` of width `size`, aligned to multiples of it, that cover `lo` to `hi`. */
156
+ export declare function keyRanges(lo: bigint, hi: bigint, size: number): FormBatch[];
157
+ /** A form's batches: its list, or the ranges of its key over the table's rows now (none when the table is empty). */
158
+ export declare function formBatches(form: BackfillForm, read: (sql: string) => Promise<Array<Record<string, unknown>>>, dialect: "clickhouse" | "postgres"): Promise<FormBatch[]>;
159
+ /** The SQL of one batch: each placeholder replaced by its value. */
160
+ export declare function batchSql(form: BackfillForm, batch: FormBatch): string[];
161
+ /** The Op a form runs: one effect() per batch, each running its statements with `yodelSql` and writing its receipt last. */
162
+ export declare function formOp(name: string, form: BackfillForm, batches: readonly FormBatch[]): Promise<OpConfig>;
163
+ /** Runs a backfill step to the end, counting batches as they skip or finish. `source` is the module's file, or the step's form. */
164
+ export declare function runBackfill(source: string | BackfillForm, run: RunBackfillOptions): Promise<{
130
165
  summary: BackfillSummary;
131
166
  records: StepRecord[];
132
167
  }>;