chkit 0.1.0-beta.28 → 0.1.0-beta.29
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.
- package/README.md +29 -1
- package/dist/bin/chkit.js +60 -10
- package/dist/bin/chkit.js.map +1 -1
- package/dist/commands/drift/payload.d.ts +14 -0
- package/dist/commands/drift/payload.d.ts.map +1 -1
- package/dist/commands/drift/payload.js +20 -5
- package/dist/commands/drift/payload.js.map +1 -1
- package/dist/commands/generate/plan-pipeline.js +2 -2
- package/dist/commands/generate/plan-pipeline.js.map +1 -1
- package/dist/commands/init.d.ts +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +60 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate/apply.d.ts +15 -0
- package/dist/commands/migrate/apply.d.ts.map +1 -1
- package/dist/commands/migrate/apply.js +91 -14
- package/dist/commands/migrate/apply.js.map +1 -1
- package/dist/commands/migrate/async-apply.d.ts +4 -1
- package/dist/commands/migrate/async-apply.d.ts.map +1 -1
- package/dist/commands/migrate/async-apply.js +3 -3
- package/dist/commands/migrate/async-apply.js.map +1 -1
- package/dist/commands/migrate/command.js +27 -7
- package/dist/commands/migrate/command.js.map +1 -1
- package/dist/commands/migrate/destructive.d.ts.map +1 -1
- package/dist/commands/migrate/destructive.js +9 -1
- package/dist/commands/migrate/destructive.js.map +1 -1
- package/dist/commands/migrate/scope.d.ts +11 -1
- package/dist/commands/migrate/scope.d.ts.map +1 -1
- package/dist/commands/migrate/scope.js +11 -1
- package/dist/commands/migrate/scope.js.map +1 -1
- package/dist/commands/query.d.ts +9 -0
- package/dist/commands/query.d.ts.map +1 -1
- package/dist/commands/query.js +48 -7
- package/dist/commands/query.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +8 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/plugins.d.ts +8 -0
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js.map +1 -1
- package/dist/runtime/config.d.ts +8 -0
- package/dist/runtime/config.d.ts.map +1 -1
- package/dist/runtime/config.js +50 -3
- package/dist/runtime/config.js.map +1 -1
- package/dist/runtime/journal-store.d.ts +1 -0
- package/dist/runtime/journal-store.d.ts.map +1 -1
- package/dist/runtime/journal-store.js +29 -4
- package/dist/runtime/journal-store.js.map +1 -1
- package/dist/runtime/json-output.d.ts +20 -0
- package/dist/runtime/json-output.d.ts.map +1 -1
- package/dist/runtime/json-output.js +23 -0
- package/dist/runtime/json-output.js.map +1 -1
- package/dist/runtime/plugin-runtime/index.d.ts.map +1 -1
- package/dist/runtime/plugin-runtime/index.js +7 -1
- package/dist/runtime/plugin-runtime/index.js.map +1 -1
- package/dist/runtime/safety-markers.d.ts +23 -0
- package/dist/runtime/safety-markers.d.ts.map +1 -1
- package/dist/runtime/safety-markers.js +96 -2
- package/dist/runtime/safety-markers.js.map +1 -1
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -19,9 +19,11 @@ Define your ClickHouse schema in TypeScript, generate migrations automatically,
|
|
|
19
19
|
## Install
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
bun add -d chkit
|
|
22
|
+
bun add -d chkit @chkit/core
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
+
`@chkit/core` provides the `table()` / schema DSL your `*.schema.ts` files import, so it is required alongside the CLI.
|
|
26
|
+
|
|
25
27
|
## Usage
|
|
26
28
|
|
|
27
29
|
```bash
|
|
@@ -46,6 +48,11 @@ bunx chkit check
|
|
|
46
48
|
|
|
47
49
|
All commands support `--json` for machine-readable output and `--config <path>` to specify a custom config file.
|
|
48
50
|
|
|
51
|
+
## Requirements
|
|
52
|
+
|
|
53
|
+
- **Node 20+** or **Bun** — chkit loads your TypeScript config and schema files on both runtimes.
|
|
54
|
+
- **ClickHouse 24.x or newer** — chkit targets recent ClickHouse (self-hosted, ClickHouse Cloud, or ObsessionDB). Some schema features are version-gated; see [ClickHouse compatibility](https://chkit.obsessiondb.com/guides/clickhouse-compatibility/).
|
|
55
|
+
|
|
49
56
|
## Plugins
|
|
50
57
|
|
|
51
58
|
| Plugin | Description |
|
|
@@ -67,6 +74,27 @@ npx skills add obsessiondb/chkit
|
|
|
67
74
|
|
|
68
75
|
See the [chkit documentation](https://chkit.obsessiondb.com).
|
|
69
76
|
|
|
77
|
+
## Versioning & releases
|
|
78
|
+
|
|
79
|
+
chkit is **pre-1.0**. While the version is `0.x`, the public API is still
|
|
80
|
+
stabilizing and **any release may contain breaking changes** — this is the
|
|
81
|
+
standard [SemVer](https://semver.org/#spec-item-4) `0.x` contract. Pin an exact
|
|
82
|
+
version (or a tight range) if you need reproducible installs.
|
|
83
|
+
|
|
84
|
+
- **`latest` tracks the current beta line.** Until 1.0 ships, installing
|
|
85
|
+
`chkit` with no tag (`bun add -d chkit`) gives you the latest `0.1.0-beta.x`
|
|
86
|
+
build. This is intentional for the pre-1.0 period.
|
|
87
|
+
- **All publishable packages release in lockstep.** `chkit`, `create-chkit`,
|
|
88
|
+
and every `@chkit/*` package share a single version, so a given chkit version
|
|
89
|
+
always lines up with matching plugin and core versions — there is no
|
|
90
|
+
cross-package version skew.
|
|
91
|
+
- **Public vs. internal surface.** The supported public API is the `chkit` CLI,
|
|
92
|
+
`@chkit/core`, and the `@chkit/plugin-*` packages. `@chkit/clickhouse` and
|
|
93
|
+
`@chkit/codegen` are internal and not meant to be installed directly.
|
|
94
|
+
- **At 1.0** chkit will commit to real SemVer (breaking changes only in major
|
|
95
|
+
bumps) and a deprecation policy. Until then, treat minor/patch bumps as
|
|
96
|
+
potentially breaking.
|
|
97
|
+
|
|
70
98
|
## License
|
|
71
99
|
|
|
72
100
|
[MIT](../../LICENSE)
|
package/dist/bin/chkit.js
CHANGED
|
@@ -9,6 +9,7 @@ import { debug } from '../runtime/debug.js';
|
|
|
9
9
|
import { extractConfigPath } from '../runtime/extract-config-path.js';
|
|
10
10
|
import { GLOBAL_FLAGS } from '../runtime/global-flags.js';
|
|
11
11
|
import { formatCommandHelp, formatGlobalHelp } from '../runtime/help.js';
|
|
12
|
+
import { emitJsonError, hasEmittedJson } from '../runtime/json-output.js';
|
|
12
13
|
import { configureCliLogging } from '../runtime/logging.js';
|
|
13
14
|
import { loadPluginRuntime } from '../runtime/plugin-runtime/index.js';
|
|
14
15
|
import { CLI_VERSION } from '../runtime/version.js';
|
|
@@ -63,6 +64,31 @@ function formatFatalError(error) {
|
|
|
63
64
|
}
|
|
64
65
|
return String(error) || 'Unknown error';
|
|
65
66
|
}
|
|
67
|
+
function toJsonError(error) {
|
|
68
|
+
const code = error instanceof Error &&
|
|
69
|
+
'code' in error &&
|
|
70
|
+
typeof error.code === 'string'
|
|
71
|
+
? error.code
|
|
72
|
+
: 'error';
|
|
73
|
+
return { code, message: formatFatalError(error) };
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Report a usage error from a non-throwing early-return path (unknown command,
|
|
77
|
+
* missing project config, plugin not configured). Mirrors the top-level catch:
|
|
78
|
+
* the human message always goes to stderr; in --json mode a parseable error
|
|
79
|
+
* envelope goes to stdout (instead of nothing — or, for unknown commands, help
|
|
80
|
+
* text that would break a `jq` consumer). Sets a failing exit code.
|
|
81
|
+
*/
|
|
82
|
+
function reportUsageError(input) {
|
|
83
|
+
console.error(input.message);
|
|
84
|
+
if (input.jsonMode) {
|
|
85
|
+
emitJsonError(input.command, { code: input.code, message: input.message });
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
input.onText?.();
|
|
89
|
+
}
|
|
90
|
+
process.exitCode = 1;
|
|
91
|
+
}
|
|
66
92
|
function resolveExitCode() {
|
|
67
93
|
if (typeof process.exitCode === 'number')
|
|
68
94
|
return process.exitCode;
|
|
@@ -103,7 +129,7 @@ async function run() {
|
|
|
103
129
|
return;
|
|
104
130
|
}
|
|
105
131
|
if (commandName === 'init') {
|
|
106
|
-
await cmdInit();
|
|
132
|
+
await cmdInit(argv.slice(1));
|
|
107
133
|
return;
|
|
108
134
|
}
|
|
109
135
|
const configPathArg = extractConfigPath(argv);
|
|
@@ -113,9 +139,13 @@ async function run() {
|
|
|
113
139
|
allowSynthesizedProfileConfig: allowsConfiglessObsessionDBBootstrap(commandName, argv),
|
|
114
140
|
});
|
|
115
141
|
if (configSource !== 'project' && PROJECT_ONLY_COMMANDS.has(commandName)) {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
142
|
+
reportUsageError({
|
|
143
|
+
command: commandName,
|
|
144
|
+
code: 'project_config_required',
|
|
145
|
+
message: `Command "${commandName}" requires a project config (clickhouse.config.ts) in the current directory.\n` +
|
|
146
|
+
`You are running chkit from a user profile (no local config found).`,
|
|
147
|
+
jsonMode: argv.includes('--json'),
|
|
148
|
+
});
|
|
119
149
|
return;
|
|
120
150
|
}
|
|
121
151
|
const pluginRuntime = await loadPluginRuntime({
|
|
@@ -147,6 +177,7 @@ async function run() {
|
|
|
147
177
|
isInteractive: process.stdin.isTTY === true && process.stderr.isTTY === true,
|
|
148
178
|
jsonMode: argv.includes('--json'),
|
|
149
179
|
flags: initFlags,
|
|
180
|
+
config,
|
|
150
181
|
};
|
|
151
182
|
await pluginRuntime.runOnInit(initCtx);
|
|
152
183
|
let completed = false;
|
|
@@ -161,14 +192,24 @@ async function run() {
|
|
|
161
192
|
if (!resolved) {
|
|
162
193
|
const wellKnown = WELL_KNOWN_PLUGIN_COMMANDS[commandName];
|
|
163
194
|
if (wellKnown) {
|
|
164
|
-
|
|
165
|
-
|
|
195
|
+
reportUsageError({
|
|
196
|
+
command: commandName,
|
|
197
|
+
code: 'plugin_not_configured',
|
|
198
|
+
message: `${wellKnown} plugin is not configured. Add it to config.plugins first.`,
|
|
199
|
+
jsonMode: argv.includes('--json'),
|
|
200
|
+
});
|
|
166
201
|
return;
|
|
167
202
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
203
|
+
reportUsageError({
|
|
204
|
+
command: commandName,
|
|
205
|
+
code: 'unknown_command',
|
|
206
|
+
message: `Unknown command: ${commandName}`,
|
|
207
|
+
jsonMode: argv.includes('--json'),
|
|
208
|
+
onText: () => {
|
|
209
|
+
console.log('');
|
|
210
|
+
console.log(formatGlobalHelp(registry, CLI_VERSION));
|
|
211
|
+
},
|
|
212
|
+
});
|
|
172
213
|
return;
|
|
173
214
|
}
|
|
174
215
|
if (argv.includes('--help') || argv.includes('-h')) {
|
|
@@ -241,6 +282,15 @@ run()
|
|
|
241
282
|
...('code' in error ? { code: error.code } : {}),
|
|
242
283
|
}
|
|
243
284
|
: error);
|
|
285
|
+
const argv = process.argv.slice(2);
|
|
286
|
+
const jsonMode = argv.includes('--json');
|
|
287
|
+
// In --json mode emit a machine-readable envelope to stdout (so a pipe to
|
|
288
|
+
// jq doesn't break on the first error) unless a command already wrote a
|
|
289
|
+
// structured JSON payload. The human-readable message always goes to
|
|
290
|
+
// stderr — stdout stays parseable, stderr stays diagnostic.
|
|
291
|
+
if (jsonMode && !hasEmittedJson()) {
|
|
292
|
+
emitJsonError(argv[0] ?? 'chkit', toJsonError(error));
|
|
293
|
+
}
|
|
244
294
|
console.error(formatFatalError(error));
|
|
245
295
|
process.exit(1);
|
|
246
296
|
});
|
package/dist/bin/chkit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chkit.js","sourceRoot":"","sources":["../../src/bin/chkit.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"chkit.js","sourceRoot":"","sources":["../../src/bin/chkit.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,5 +20,19 @@ export interface DriftPayload {
|
|
|
20
20
|
objectDrift: ObjectDriftDetail[];
|
|
21
21
|
tableDrift: TableDriftDetail[];
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Decide whether a schema has drifted. Objects that exist in ClickHouse but are
|
|
25
|
+
* not in the schema (`extra_object` → `extraCount`) are NOT drift by default:
|
|
26
|
+
* on a shared database every unmanaged table would otherwise break the CI gate.
|
|
27
|
+
* Opt in with `check.failOnExtraObjects` to treat them as drift (e.g. when chkit
|
|
28
|
+
* owns the whole database).
|
|
29
|
+
*/
|
|
30
|
+
export declare function computeDrifted(input: {
|
|
31
|
+
missingCount: number;
|
|
32
|
+
kindMismatchCount: number;
|
|
33
|
+
tableDriftCount: number;
|
|
34
|
+
extraCount: number;
|
|
35
|
+
failOnExtraObjects: boolean;
|
|
36
|
+
}): boolean;
|
|
23
37
|
export declare function buildDriftPayload(config: ChxConfig, metaDir: string, snapshot: Snapshot, scope?: TableScope, executor?: ClickHouseExecutor): Promise<DriftPayload>;
|
|
24
38
|
//# sourceMappingURL=payload.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/commands/drift/payload.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,kBAAkB,EAAwB,MAAM,mBAAmB,CAAA;AACzG,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAA;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,cAAc,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,UAAU,EAAE,gBAAgB,EAAE,CAAA;CAC/B;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,CAAC,EAAE,UAAU,EAClB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../../src/commands/drift/payload.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,kBAAkB,EAAwB,MAAM,mBAAmB,CAAA;AACzG,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAmB,MAAM,aAAa,CAAA;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAA;AAC9D,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,UAAU,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,cAAc,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC3E,WAAW,EAAE,iBAAiB,EAAE,CAAA;IAChC,UAAU,EAAE,gBAAgB,EAAE,CAAA;CAC/B;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,YAAY,EAAE,MAAM,CAAA;IACpB,iBAAiB,EAAE,MAAM,CAAA;IACzB,eAAe,EAAE,MAAM,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;CAC5B,GAAG,OAAO,CAOV;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,QAAQ,EAClB,KAAK,CAAC,EAAE,UAAU,EAClB,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,YAAY,CAAC,CA8FvB"}
|
|
@@ -2,6 +2,19 @@ import { join } from 'node:path';
|
|
|
2
2
|
import { isUnknownDatabaseError } from '@chkit/clickhouse';
|
|
3
3
|
import { debug } from '../../runtime/debug.js';
|
|
4
4
|
import { compareSchemaObjects, compareTableShape, } from './compare.js';
|
|
5
|
+
/**
|
|
6
|
+
* Decide whether a schema has drifted. Objects that exist in ClickHouse but are
|
|
7
|
+
* not in the schema (`extra_object` → `extraCount`) are NOT drift by default:
|
|
8
|
+
* on a shared database every unmanaged table would otherwise break the CI gate.
|
|
9
|
+
* Opt in with `check.failOnExtraObjects` to treat them as drift (e.g. when chkit
|
|
10
|
+
* owns the whole database).
|
|
11
|
+
*/
|
|
12
|
+
export function computeDrifted(input) {
|
|
13
|
+
return (input.missingCount > 0 ||
|
|
14
|
+
input.kindMismatchCount > 0 ||
|
|
15
|
+
input.tableDriftCount > 0 ||
|
|
16
|
+
(input.failOnExtraObjects && input.extraCount > 0));
|
|
17
|
+
}
|
|
5
18
|
export async function buildDriftPayload(config, metaDir, snapshot, scope, executor) {
|
|
6
19
|
const selectedTables = scope?.enabled && scope.matchCount > 0 ? new Set(scope.matchedTables) : undefined;
|
|
7
20
|
if (!executor)
|
|
@@ -75,11 +88,13 @@ export async function buildDriftPayload(config, metaDir, snapshot, scope, execut
|
|
|
75
88
|
.filter((item) => item !== null)
|
|
76
89
|
.sort((a, b) => a.table.localeCompare(b.table));
|
|
77
90
|
debug('drift', `comparison: missing=${missing.length}, extra=${extra.length}, kindMismatches=${kindMismatches.length}, objectDrift=${objectDrift.length}, tableDrift=${tableDrift.length}`);
|
|
78
|
-
const drifted =
|
|
79
|
-
|
|
80
|
-
kindMismatches.length
|
|
81
|
-
|
|
82
|
-
|
|
91
|
+
const drifted = computeDrifted({
|
|
92
|
+
missingCount: missing.length,
|
|
93
|
+
kindMismatchCount: kindMismatches.length,
|
|
94
|
+
tableDriftCount: tableDrift.length,
|
|
95
|
+
extraCount: extra.length,
|
|
96
|
+
failOnExtraObjects: config.check?.failOnExtraObjects === true,
|
|
97
|
+
});
|
|
83
98
|
return {
|
|
84
99
|
scope,
|
|
85
100
|
snapshotFile: join(metaDir, 'snapshot.json'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/commands/drift/payload.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"payload.js","sourceRoot":"","sources":["../../../src/commands/drift/payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@ export function applyExplicitTableRenames(plan, mappings) {
|
|
|
56
56
|
type: 'alter_table_rename_table',
|
|
57
57
|
key: `table:${mapping.newDatabase}.${mapping.newName}:rename_table`,
|
|
58
58
|
risk: 'caution',
|
|
59
|
-
sql: `RENAME TABLE ${mapping.oldDatabase}.${mapping.oldName} TO ${mapping.newDatabase}.${mapping.newName};`,
|
|
59
|
+
sql: `RENAME TABLE IF EXISTS ${mapping.oldDatabase}.${mapping.oldName} TO ${mapping.newDatabase}.${mapping.newName};`,
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
const operations = [
|
|
@@ -96,7 +96,7 @@ export function buildExplicitColumnRenameSuggestions(plan, mappings) {
|
|
|
96
96
|
: 'Explicitly confirmed by schema metadata (renamedFrom).',
|
|
97
97
|
dropOperationKey,
|
|
98
98
|
addOperationKey,
|
|
99
|
-
confirmationSQL: `ALTER TABLE ${mapping.database}.${mapping.table} RENAME COLUMN \`${mapping.from}\` TO \`${mapping.to}\`;`,
|
|
99
|
+
confirmationSQL: `ALTER TABLE ${mapping.database}.${mapping.table} RENAME COLUMN IF EXISTS \`${mapping.from}\` TO \`${mapping.to}\`;`,
|
|
100
100
|
});
|
|
101
101
|
}
|
|
102
102
|
return suggestions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-pipeline.js","sourceRoot":"","sources":["../../../src/commands/generate/plan-pipeline.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,8BAA8B,CAC5C,IAAmB,EACnB,mBAA6C;IAE7C,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEjD,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/C,MAAM,gBAAgB,GAAyB,EAAE,CAAA;IAEjD,KAAK,MAAM,UAAU,IAAI,mBAAmB,EAAE,CAAC;QAC7C,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;QACtD,qBAAqB,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,CAAA;QACrD,gBAAgB,CAAC,IAAI,CAAC;YACpB,IAAI,EAAE,2BAA2B;YACjC,GAAG,EAAE,SAAS,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,KAAK,kBAAkB,UAAU,CAAC,IAAI,IAAI,UAAU,CAAC,EAAE,EAAE;YACzG,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,UAAU,CAAC,eAAe;SAChC,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QACnF,GAAG,gBAAgB;KACpB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,MAAM,SAAS,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QACrD,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,SAAS,CAAA;QACrC,OAAO,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,UAAU;QACV,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC;QACtC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAC9C,CAAC,UAAU,EAAE,EAAE,CACb,CAAC,mBAAmB,CAAC,IAAI,CACvB,CAAC,QAAQ,EAAE,EAAE,CACX,QAAQ,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ;YACzC,QAAQ,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK;YACnC,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,IAAI;YACjC,QAAQ,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAChC,CACJ;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,IAAmB,EACnB,QAA8B;IAE9B,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAEtC,MAAM,qBAAqB,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/C,MAAM,eAAe,GAAyB,EAAE,CAAA;IAChD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAC9G,CAAA;IAED,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,qBAAqB,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5E,qBAAqB,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;QAC5E,IAAI,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,YAAY,OAAO,CAAC,WAAW,EAAE,CAAA;YAC/C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,eAAe,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,iBAAiB;oBACvB,GAAG,EAAE,KAAK;oBACV,IAAI,EAAE,MAAM;oBACZ,GAAG,EAAE,iCAAiC,OAAO,CAAC,WAAW,GAAG;iBAC7D,CAAC,CAAA;gBACF,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;QACD,eAAe,CAAC,IAAI,CAAC;YACnB,IAAI,EAAE,0BAA0B;YAChC,GAAG,EAAE,SAAS,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,eAAe;YACnE,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"plan-pipeline.js","sourceRoot":"","sources":["../../../src/commands/generate/plan-pipeline.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function cmdInit(): Promise<void>;
|
|
1
|
+
export declare function cmdInit(argv?: string[]): Promise<void>;
|
|
2
2
|
//# sourceMappingURL=init.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAeA,wBAAsB,OAAO,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChE"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
|
+
import process from 'node:process';
|
|
1
2
|
import { relative, resolve } from 'node:path';
|
|
2
3
|
import { DEFAULT_CONFIG_FILE, writeIfMissing } from '../runtime/config.js';
|
|
3
|
-
export async function cmdInit() {
|
|
4
|
+
export async function cmdInit(argv = []) {
|
|
4
5
|
const cwd = process.cwd();
|
|
5
6
|
const configPath = resolve(cwd, DEFAULT_CONFIG_FILE);
|
|
6
7
|
const schemaPath = resolve(cwd, 'src/db/schema/example.ts');
|
|
8
|
+
const options = parseInitOptions(argv);
|
|
7
9
|
const wroteConfig = await writeIfMissing(configPath, `import { defineConfig } from '@chkit/core'\n\nexport default defineConfig({\n schema: './src/db/schema/**/*.ts',\n outDir: './chkit',\n migrationsDir: './chkit/migrations',\n metaDir: './chkit/meta',\n plugins: [\n // Register plugins inline. Example:\n // import { codegen } from '@chkit/plugin-codegen'\n // codegen({ emitZod: true }),\n ],\n clickhouse: {\n url: process.env.CLICKHOUSE_URL ?? 'http://localhost:8123',\n username: process.env.CLICKHOUSE_USER ?? 'default',\n password: process.env.CLICKHOUSE_PASSWORD ?? '',\n database: process.env.CLICKHOUSE_DB ?? 'default',\n },\n})\n`);
|
|
8
10
|
const wroteSchema = await writeIfMissing(schemaPath, `import { schema, table } from '@chkit/core'\n\nconst events = table({\n database: 'default',\n name: 'events',\n engine: 'MergeTree',\n columns: [\n { name: 'id', type: 'UInt64' },\n { name: 'source', type: 'String' },\n { name: 'ingested_at', type: 'DateTime64(3)', default: 'fn:now64(3)' },\n ],\n primaryKey: ['id'],\n orderBy: ['id'],\n partitionBy: 'toYYYYMM(ingested_at)',\n})\n\nexport default schema(events)\n`);
|
|
9
11
|
if (wroteConfig)
|
|
10
12
|
console.log(`Created ${relative(cwd, configPath)}`);
|
|
11
13
|
if (wroteSchema)
|
|
12
14
|
console.log(`Created ${relative(cwd, schemaPath)}`);
|
|
15
|
+
// Interactive onboarding only when attached to a TTY (or explicitly requested via flags),
|
|
16
|
+
// and not opted out with --yes. Keeps `chkit init` a silent file-writer for CI/scripts.
|
|
17
|
+
if (await maybeRunOnboarding(configPath, options))
|
|
18
|
+
return;
|
|
13
19
|
if (wroteConfig || wroteSchema) {
|
|
14
20
|
console.log('');
|
|
15
21
|
console.log('Next steps:');
|
|
@@ -21,4 +27,57 @@ export async function cmdInit() {
|
|
|
21
27
|
console.log('Docs: https://chkit.obsessiondb.com/getting-started/add-to-existing-project/');
|
|
22
28
|
}
|
|
23
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Runs the shared ObsessionDB onboarding flow when appropriate. Returns true if it ran
|
|
32
|
+
* (so the caller skips the static next-steps). The plugin is an optional dependency, so a
|
|
33
|
+
* failed import degrades silently to the non-interactive path.
|
|
34
|
+
*/
|
|
35
|
+
async function maybeRunOnboarding(configPath, options) {
|
|
36
|
+
const explicit = options.connect !== undefined || options.email !== undefined;
|
|
37
|
+
const interactive = process.stdin.isTTY === true;
|
|
38
|
+
if (options.yes || (!interactive && !explicit))
|
|
39
|
+
return false;
|
|
40
|
+
// The plugin is an optional dependency: a missing import degrades to static next-steps. But a
|
|
41
|
+
// failure *inside* onboarding (bad OTP, failed claim) is a real error — only the import is
|
|
42
|
+
// guarded so onboarding failures propagate and automation sees a non-zero exit, not a false pass.
|
|
43
|
+
let runOnboarding;
|
|
44
|
+
try {
|
|
45
|
+
;
|
|
46
|
+
({ runOnboarding } = await import('@chkit/plugin-obsessiondb'));
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return false;
|
|
50
|
+
}
|
|
51
|
+
await runOnboarding({
|
|
52
|
+
configPath,
|
|
53
|
+
connect: options.connect,
|
|
54
|
+
email: options.email,
|
|
55
|
+
code: options.code,
|
|
56
|
+
orgName: options.orgName,
|
|
57
|
+
});
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
function parseInitOptions(argv) {
|
|
61
|
+
const options = { yes: false };
|
|
62
|
+
for (let i = 0; i < argv.length; i += 1) {
|
|
63
|
+
const token = argv[i];
|
|
64
|
+
if (!token)
|
|
65
|
+
continue;
|
|
66
|
+
const eq = token.indexOf('=');
|
|
67
|
+
const name = eq === -1 ? token : token.slice(0, eq);
|
|
68
|
+
const inlineValue = eq === -1 ? undefined : token.slice(eq + 1);
|
|
69
|
+
const value = () => inlineValue ?? argv[++i];
|
|
70
|
+
if (name === '--yes' || name === '-y')
|
|
71
|
+
options.yes = true;
|
|
72
|
+
else if (name === '--connect')
|
|
73
|
+
options.connect = value();
|
|
74
|
+
else if (name === '--email')
|
|
75
|
+
options.email = value();
|
|
76
|
+
else if (name === '--code')
|
|
77
|
+
options.code = value();
|
|
78
|
+
else if (name === '--org-name')
|
|
79
|
+
options.orgName = value();
|
|
80
|
+
}
|
|
81
|
+
return options;
|
|
82
|
+
}
|
|
24
83
|
//# sourceMappingURL=init.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,21 @@ import type { ParsedFlags, PluginRuntime, TableScope } from '../../plugins.js';
|
|
|
4
4
|
import type { createJournalStore } from '../../runtime/journal-store.js';
|
|
5
5
|
import { type MigrationJournalEntry } from '../../runtime/migration-store.js';
|
|
6
6
|
type JournalStore = ReturnType<typeof createJournalStore>;
|
|
7
|
+
/** One-line, length-capped preview of a SQL statement for error messages. */
|
|
8
|
+
export declare function previewStatement(sql: string, max?: number): string;
|
|
9
|
+
/**
|
|
10
|
+
* Wrap a statement-execution failure with the context a user needs to locate
|
|
11
|
+
* it (#10): the migration file, the failed statement's position, and a SQL
|
|
12
|
+
* preview — on top of the cleaned ClickHouse message. Without this, a rejected
|
|
13
|
+
* migration surfaces only the raw CH exception with no file or statement.
|
|
14
|
+
*/
|
|
15
|
+
export declare function statementError(input: {
|
|
16
|
+
file: string;
|
|
17
|
+
index: number;
|
|
18
|
+
total: number;
|
|
19
|
+
statement: string;
|
|
20
|
+
error: unknown;
|
|
21
|
+
}): Error;
|
|
7
22
|
export declare function applyMigration(input: {
|
|
8
23
|
db: ClickHouseExecutor;
|
|
9
24
|
journalStore: JournalStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE9E,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/apply.ts"],"names":[],"mappings":"AAGA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE9E,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAe,KAAK,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAY1F,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAYzD,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAG/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,OAAO,CAAA;CACf,GAAG,KAAK,CAQR;AAsBD,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,EAAE,EAAE,kBAAkB,CAAA;IACtB,YAAY,EAAE,YAAY,CAAA;IAC1B,aAAa,EAAE,aAAa,CAAA;IAC5B,MAAM,EAAE,iBAAiB,CAAA;IACzB,UAAU,EAAE,UAAU,CAAA;IACtB,KAAK,EAAE,WAAW,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,MAAM,CAAA;CACb,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAoHjC"}
|
|
@@ -4,7 +4,45 @@ import { waitForDDLPropagation } from '@chkit/clickhouse';
|
|
|
4
4
|
import { debug } from '../../runtime/debug.js';
|
|
5
5
|
import { checksumSQL } from '../../runtime/migration-store.js';
|
|
6
6
|
import { extractExecutableStatements, extractMigrationOperationSummaries, } from '../../runtime/safety-markers.js';
|
|
7
|
-
import { applyAsyncStatement } from './async-apply.js';
|
|
7
|
+
import { applyAsyncStatement, freshMigrationState, isoWithoutZone, upsertOperation, } from './async-apply.js';
|
|
8
|
+
function operationIsCompleted(state, index) {
|
|
9
|
+
return (state?.operations.some((op) => op.operationIndex === index && op.status === 'completed') ?? false);
|
|
10
|
+
}
|
|
11
|
+
function errorMessage(error) {
|
|
12
|
+
return error instanceof Error ? error.message : String(error);
|
|
13
|
+
}
|
|
14
|
+
/** One-line, length-capped preview of a SQL statement for error messages. */
|
|
15
|
+
export function previewStatement(sql, max = 120) {
|
|
16
|
+
const oneLine = sql.replace(/\s+/g, ' ').trim();
|
|
17
|
+
return oneLine.length > max ? `${oneLine.slice(0, max)}…` : oneLine;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Wrap a statement-execution failure with the context a user needs to locate
|
|
21
|
+
* it (#10): the migration file, the failed statement's position, and a SQL
|
|
22
|
+
* preview — on top of the cleaned ClickHouse message. Without this, a rejected
|
|
23
|
+
* migration surfaces only the raw CH exception with no file or statement.
|
|
24
|
+
*/
|
|
25
|
+
export function statementError(input) {
|
|
26
|
+
const wrapped = new Error(`Migration ${input.file} failed at statement ${input.index + 1} of ${input.total}:\n` +
|
|
27
|
+
` ${previewStatement(input.statement)}\n` +
|
|
28
|
+
errorMessage(input.error));
|
|
29
|
+
if (input.error instanceof Error && input.error.stack)
|
|
30
|
+
wrapped.stack = input.error.stack;
|
|
31
|
+
return wrapped;
|
|
32
|
+
}
|
|
33
|
+
function syncOperationState(index, operationType, operationKey, status, lastError = '') {
|
|
34
|
+
const timestamp = isoWithoutZone(new Date());
|
|
35
|
+
return {
|
|
36
|
+
operationIndex: index,
|
|
37
|
+
operationKey,
|
|
38
|
+
operationType,
|
|
39
|
+
queryId: '',
|
|
40
|
+
status,
|
|
41
|
+
startedAt: timestamp,
|
|
42
|
+
finishedAt: status === 'started' ? null : timestamp,
|
|
43
|
+
lastError,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
8
46
|
export async function applyMigration(input) {
|
|
9
47
|
const { db, journalStore, pluginRuntime, config, tableScope, flags, migrationsDir, file } = input;
|
|
10
48
|
debug('migrate', `applying ${file}`);
|
|
@@ -22,26 +60,65 @@ export async function applyMigration(input) {
|
|
|
22
60
|
statements: parsedStatements,
|
|
23
61
|
});
|
|
24
62
|
const migrationChecksum = checksumSQL(sql);
|
|
63
|
+
// Resume support (#6): if a prior run left per-statement journal state for
|
|
64
|
+
// this migration, statements already marked completed are skipped instead of
|
|
65
|
+
// replayed — so a partial failure no longer bricks the migration on re-run
|
|
66
|
+
// with "column already exists". Guard against resuming across a file edit.
|
|
67
|
+
const initialState = await journalStore.readMigrationState(file);
|
|
68
|
+
if (initialState !== null &&
|
|
69
|
+
!initialState.migrationCompleted &&
|
|
70
|
+
initialState.checksum !== migrationChecksum) {
|
|
71
|
+
throw new Error(`Migration ${file} has in-progress journal state for checksum ${initialState.checksum}, but the current file checksum is ${migrationChecksum}. Restore the original migration file or clear the in-progress journal state before retrying.`);
|
|
72
|
+
}
|
|
25
73
|
for (let i = 0; i < statements.length; i++) {
|
|
26
74
|
const statement = statements[i];
|
|
27
75
|
const operation = operationSummaries[i];
|
|
28
76
|
if (operation?.mode === 'async') {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
77
|
+
try {
|
|
78
|
+
await applyAsyncStatement({
|
|
79
|
+
db,
|
|
80
|
+
journalStore,
|
|
81
|
+
sql: statement,
|
|
82
|
+
migrationName: file,
|
|
83
|
+
migrationChecksum,
|
|
84
|
+
statementIndex: i,
|
|
85
|
+
operationType: operation.type,
|
|
86
|
+
operationKey: operation.key,
|
|
87
|
+
beforeRetry: operation.beforeRetry,
|
|
88
|
+
log: (line) => console.log(line),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
throw statementError({ file, index: i, total: statements.length, statement, error });
|
|
93
|
+
}
|
|
41
94
|
// Async ops are DML (loads, backfills) — no DDL propagation to wait on.
|
|
42
95
|
continue;
|
|
43
96
|
}
|
|
44
|
-
|
|
97
|
+
// Sync DDL path with per-statement journaling + resume. Re-read state each
|
|
98
|
+
// iteration so async ops written above (or in a prior run) are preserved.
|
|
99
|
+
const stateBefore = await journalStore.readMigrationState(file);
|
|
100
|
+
if (operationIsCompleted(stateBefore, i)) {
|
|
101
|
+
debug('migrate', `${file}#${i}: already completed in a prior run — skipping`);
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const opType = operation?.type ?? 'sql_statement';
|
|
105
|
+
const opKey = operation?.key ?? `statement:${i}`;
|
|
106
|
+
const baseState = stateBefore ?? freshMigrationState(file, migrationChecksum);
|
|
107
|
+
await journalStore.writeMigrationState(upsertOperation(baseState, syncOperationState(i, opType, opKey, 'started'), Date.now));
|
|
108
|
+
try {
|
|
109
|
+
await db.command(statement);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const stateOnError = (await journalStore.readMigrationState(file)) ?? baseState;
|
|
113
|
+
await journalStore.writeMigrationState(upsertOperation(stateOnError, syncOperationState(i, opType, opKey, 'failed', errorMessage(error)), Date.now));
|
|
114
|
+
throw statementError({ file, index: i, total: statements.length, statement, error });
|
|
115
|
+
}
|
|
116
|
+
// Mark completed as soon as the statement has executed — BEFORE waiting for
|
|
117
|
+
// DDL propagation. The statement already ran, so if the propagation wait
|
|
118
|
+
// later times out and throws, a re-run must skip this statement rather than
|
|
119
|
+
// replay it into an "already exists" error (the brick this fix prevents).
|
|
120
|
+
const stateAfter = (await journalStore.readMigrationState(file)) ?? baseState;
|
|
121
|
+
await journalStore.writeMigrationState(upsertOperation(stateAfter, syncOperationState(i, opType, opKey, 'completed'), Date.now));
|
|
45
122
|
if (operation) {
|
|
46
123
|
await waitForDDLPropagation(db, operation.type, operation.key);
|
|
47
124
|
}
|