chkit 0.1.0-beta.9 → 0.1.1
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 +38 -2
- package/dist/bin/chkit.js +230 -203
- package/dist/bin/chkit.js.map +1 -1
- package/dist/bin/clickhouse-resource.d.ts +4 -0
- package/dist/bin/clickhouse-resource.d.ts.map +1 -0
- package/dist/bin/clickhouse-resource.js +11 -0
- package/dist/bin/clickhouse-resource.js.map +1 -0
- package/dist/bin/command-dispatch.d.ts +13 -0
- package/dist/bin/command-dispatch.d.ts.map +1 -0
- package/dist/bin/command-dispatch.js +186 -0
- package/dist/bin/command-dispatch.js.map +1 -0
- package/dist/bin/commands/check.d.ts +1 -1
- package/dist/bin/commands/check.d.ts.map +1 -1
- package/dist/bin/commands/check.js +157 -107
- package/dist/bin/commands/check.js.map +1 -1
- package/dist/bin/commands/drift.d.ts +6 -2
- package/dist/bin/commands/drift.d.ts.map +1 -1
- package/dist/bin/commands/drift.js +49 -8
- package/dist/bin/commands/drift.js.map +1 -1
- package/dist/bin/commands/generate.d.ts.map +1 -1
- package/dist/bin/commands/generate.js +4 -0
- package/dist/bin/commands/generate.js.map +1 -1
- package/dist/bin/commands/migrate.d.ts.map +1 -1
- package/dist/bin/commands/migrate.js +189 -171
- package/dist/bin/commands/migrate.js.map +1 -1
- package/dist/bin/commands/status.d.ts.map +1 -1
- package/dist/bin/commands/status.js +15 -5
- package/dist/bin/commands/status.js.map +1 -1
- package/dist/bin/config.d.ts.map +1 -1
- package/dist/bin/config.js +14 -5
- package/dist/bin/config.js.map +1 -1
- package/dist/bin/debug.d.ts +3 -0
- package/dist/bin/debug.d.ts.map +1 -0
- package/dist/bin/debug.js +14 -0
- package/dist/bin/debug.js.map +1 -0
- package/dist/bin/help.d.ts.map +1 -1
- package/dist/bin/help.js +1 -0
- package/dist/bin/help.js.map +1 -1
- package/dist/bin/internal-plugins/index.d.ts +3 -0
- package/dist/bin/internal-plugins/index.d.ts.map +1 -0
- package/dist/bin/internal-plugins/index.js +5 -0
- package/dist/bin/internal-plugins/index.js.map +1 -0
- package/dist/bin/internal-plugins/skill-hint.d.ts +31 -0
- package/dist/bin/internal-plugins/skill-hint.d.ts.map +1 -0
- package/dist/bin/internal-plugins/skill-hint.js +172 -0
- package/dist/bin/internal-plugins/skill-hint.js.map +1 -0
- package/dist/bin/journal-store.d.ts +3 -6
- package/dist/bin/journal-store.d.ts.map +1 -1
- package/dist/bin/journal-store.js +87 -16
- package/dist/bin/journal-store.js.map +1 -1
- package/dist/bin/json-output.d.ts +2 -5
- package/dist/bin/json-output.d.ts.map +1 -1
- package/dist/bin/json-output.js +1 -1
- package/dist/bin/json-output.js.map +1 -1
- package/dist/bin/lib.d.ts +2 -5
- package/dist/bin/lib.d.ts.map +1 -1
- package/dist/bin/lib.js +2 -5
- package/dist/bin/lib.js.map +1 -1
- package/dist/bin/logging.d.ts +3 -0
- package/dist/bin/logging.d.ts.map +1 -0
- package/dist/bin/logging.js +31 -0
- package/dist/bin/logging.js.map +1 -0
- package/dist/bin/migration-store.d.ts +2 -2
- package/dist/bin/migration-store.d.ts.map +1 -1
- package/dist/bin/migration-store.js +1 -1
- package/dist/bin/migration-store.js.map +1 -1
- package/dist/bin/plugin-runtime.d.ts +9 -1
- package/dist/bin/plugin-runtime.d.ts.map +1 -1
- package/dist/bin/plugin-runtime.js +251 -2
- package/dist/bin/plugin-runtime.js.map +1 -1
- package/dist/bin/safety-markers.d.ts +3 -4
- package/dist/bin/safety-markers.d.ts.map +1 -1
- package/dist/bin/safety-markers.js +4 -13
- package/dist/bin/safety-markers.js.map +1 -1
- package/dist/bin/schema-loader.d.ts +1 -1
- package/dist/bin/schema-loader.d.ts.map +1 -1
- package/dist/bin/schema-loader.js +7 -2
- package/dist/bin/schema-loader.js.map +1 -1
- package/dist/bin/table-scope.d.ts +1 -2
- package/dist/bin/table-scope.d.ts.map +1 -1
- package/dist/bin/table-scope.js +1 -1
- package/dist/bin/table-scope.js.map +1 -1
- package/dist/commands/check/command.d.ts +3 -0
- package/dist/commands/check/command.d.ts.map +1 -0
- package/dist/commands/check/command.js +106 -0
- package/dist/commands/check/command.js.map +1 -0
- package/dist/commands/check/output.d.ts +35 -0
- package/dist/commands/check/output.d.ts.map +1 -0
- package/dist/commands/check/output.js +105 -0
- package/dist/commands/check/output.js.map +1 -0
- package/dist/commands/drift/command.d.ts +3 -0
- package/dist/commands/drift/command.d.ts.map +1 -0
- package/dist/commands/drift/command.js +128 -0
- package/dist/commands/drift/command.js.map +1 -0
- package/dist/commands/drift/compare.d.ts +66 -0
- package/dist/commands/drift/compare.d.ts.map +1 -0
- package/dist/commands/drift/compare.js +220 -0
- package/dist/commands/drift/compare.js.map +1 -0
- package/dist/commands/drift/diff.d.ts +8 -0
- package/dist/commands/drift/diff.d.ts.map +1 -0
- package/dist/commands/drift/diff.js +46 -0
- package/dist/commands/drift/diff.js.map +1 -0
- package/dist/commands/drift/payload.d.ts +38 -0
- package/dist/commands/drift/payload.d.ts.map +1 -0
- package/dist/commands/drift/payload.js +111 -0
- package/dist/commands/drift/payload.js.map +1 -0
- package/dist/commands/generate/command.d.ts +3 -0
- package/dist/commands/generate/command.d.ts.map +1 -0
- package/dist/commands/generate/command.js +166 -0
- package/dist/commands/generate/command.js.map +1 -0
- package/dist/commands/generate/output.d.ts +8 -0
- package/dist/commands/generate/output.d.ts.map +1 -0
- package/dist/commands/generate/output.js +59 -0
- package/dist/commands/generate/output.js.map +1 -0
- package/dist/commands/generate/plan-pipeline.d.ts +7 -0
- package/dist/commands/generate/plan-pipeline.d.ts.map +1 -0
- package/dist/commands/generate/plan-pipeline.js +143 -0
- package/dist/commands/generate/plan-pipeline.js.map +1 -0
- package/dist/commands/generate/rename-mappings.d.ts +29 -0
- package/dist/commands/generate/rename-mappings.d.ts.map +1 -0
- package/dist/commands/generate/rename-mappings.js +195 -0
- package/dist/commands/generate/rename-mappings.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +101 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/migrate/apply.d.ts +33 -0
- package/dist/commands/migrate/apply.d.ts.map +1 -0
- package/dist/commands/migrate/apply.js +143 -0
- package/dist/commands/migrate/apply.js.map +1 -0
- package/dist/commands/migrate/async-apply.d.ts +30 -0
- package/dist/commands/migrate/async-apply.d.ts.map +1 -0
- package/dist/commands/migrate/async-apply.js +258 -0
- package/dist/commands/migrate/async-apply.js.map +1 -0
- package/dist/commands/migrate/command.d.ts +3 -0
- package/dist/commands/migrate/command.d.ts.map +1 -0
- package/dist/commands/migrate/command.js +207 -0
- package/dist/commands/migrate/command.js.map +1 -0
- package/dist/commands/migrate/destructive.d.ts +7 -0
- package/dist/commands/migrate/destructive.d.ts.map +1 -0
- package/dist/commands/migrate/destructive.js +24 -0
- package/dist/commands/migrate/destructive.js.map +1 -0
- package/dist/commands/migrate/prompts.d.ts +6 -0
- package/dist/commands/migrate/prompts.d.ts.map +1 -0
- package/dist/commands/migrate/prompts.js +40 -0
- package/dist/commands/migrate/prompts.js.map +1 -0
- package/dist/commands/migrate/scope.d.ts +12 -0
- package/dist/commands/migrate/scope.d.ts.map +1 -0
- package/dist/commands/migrate/scope.js +35 -0
- package/dist/commands/migrate/scope.js.map +1 -0
- package/dist/commands/plugin.d.ts +3 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +129 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/query.d.ts +17 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +155 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/skills.d.ts +13 -0
- package/dist/commands/skills.d.ts.map +1 -0
- package/dist/commands/skills.js +25 -0
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +69 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/drift.d.ts +7 -6
- package/dist/drift.d.ts.map +1 -1
- package/dist/drift.js +19 -8
- package/dist/drift.js.map +1 -1
- package/dist/internal-plugins/core/plugin.d.ts +2 -0
- package/dist/internal-plugins/core/plugin.d.ts.map +1 -0
- package/dist/internal-plugins/core/plugin.js +21 -0
- package/dist/internal-plugins/core/plugin.js.map +1 -0
- package/dist/internal-plugins/index.d.ts +3 -0
- package/dist/internal-plugins/index.d.ts.map +1 -0
- package/dist/internal-plugins/index.js +6 -0
- package/dist/internal-plugins/index.js.map +1 -0
- package/dist/internal-plugins/skill-hint/agent-detect.d.ts +20 -0
- package/dist/internal-plugins/skill-hint/agent-detect.d.ts.map +1 -0
- package/dist/internal-plugins/skill-hint/agent-detect.js +68 -0
- package/dist/internal-plugins/skill-hint/agent-detect.js.map +1 -0
- package/dist/internal-plugins/skill-hint/plugin.d.ts +16 -0
- package/dist/internal-plugins/skill-hint/plugin.d.ts.map +1 -0
- package/dist/internal-plugins/skill-hint/plugin.js +60 -0
- package/dist/internal-plugins/skill-hint/plugin.js.map +1 -0
- package/dist/internal-plugins/skill-hint/prompt.d.ts +5 -0
- package/dist/internal-plugins/skill-hint/prompt.d.ts.map +1 -0
- package/dist/internal-plugins/skill-hint/prompt.js +37 -0
- package/dist/internal-plugins/skill-hint/prompt.js.map +1 -0
- package/dist/internal-plugins/skill-hint/state.d.ts +7 -0
- package/dist/internal-plugins/skill-hint/state.d.ts.map +1 -0
- package/dist/internal-plugins/skill-hint/state.js +23 -0
- package/dist/internal-plugins/skill-hint/state.js.map +1 -0
- package/dist/plugins.d.ts +109 -27
- package/dist/plugins.d.ts.map +1 -1
- package/dist/plugins.js +0 -6
- package/dist/plugins.js.map +1 -1
- package/dist/runtime/command-dispatch.d.ts +18 -0
- package/dist/runtime/command-dispatch.d.ts.map +1 -0
- package/dist/runtime/command-dispatch.js +227 -0
- package/dist/runtime/command-dispatch.js.map +1 -0
- package/dist/runtime/command-registry.d.ts +31 -0
- package/dist/runtime/command-registry.d.ts.map +1 -0
- package/dist/runtime/command-registry.js +74 -0
- package/dist/runtime/command-registry.js.map +1 -0
- package/dist/runtime/config-merge.d.ts +4 -0
- package/dist/runtime/config-merge.d.ts.map +1 -0
- package/dist/runtime/config-merge.js +72 -0
- package/dist/runtime/config-merge.js.map +1 -0
- package/dist/runtime/config.d.ts +30 -0
- package/dist/runtime/config.d.ts.map +1 -0
- package/dist/runtime/config.js +173 -0
- package/dist/runtime/config.js.map +1 -0
- package/dist/runtime/debug.d.ts +3 -0
- package/dist/runtime/debug.d.ts.map +1 -0
- package/dist/runtime/debug.js +14 -0
- package/dist/runtime/debug.js.map +1 -0
- package/dist/runtime/deps.d.ts +28 -0
- package/dist/runtime/deps.d.ts.map +1 -0
- package/dist/runtime/deps.js +91 -0
- package/dist/runtime/deps.js.map +1 -0
- package/dist/runtime/extract-config-path.d.ts +2 -0
- package/dist/runtime/extract-config-path.d.ts.map +1 -0
- package/dist/runtime/extract-config-path.js +13 -0
- package/dist/runtime/extract-config-path.js.map +1 -0
- package/dist/runtime/global-flags.d.ts +16 -0
- package/dist/runtime/global-flags.d.ts.map +1 -0
- package/dist/runtime/global-flags.js +7 -0
- package/dist/runtime/global-flags.js.map +1 -0
- package/dist/runtime/help.d.ts +5 -0
- package/dist/runtime/help.d.ts.map +1 -0
- package/dist/runtime/help.js +94 -0
- package/dist/runtime/help.js.map +1 -0
- package/dist/runtime/journal-store.d.ts +31 -0
- package/dist/runtime/journal-store.d.ts.map +1 -0
- package/dist/runtime/journal-store.js +250 -0
- package/dist/runtime/journal-store.js.map +1 -0
- package/dist/runtime/json-output.d.ts +25 -0
- package/dist/runtime/json-output.d.ts.map +1 -0
- package/dist/runtime/json-output.js +50 -0
- package/dist/runtime/json-output.js.map +1 -0
- package/dist/runtime/logging.d.ts +3 -0
- package/dist/runtime/logging.d.ts.map +1 -0
- package/dist/runtime/logging.js +31 -0
- package/dist/runtime/logging.js.map +1 -0
- package/dist/runtime/migration-metadata.d.ts +5 -0
- package/dist/runtime/migration-metadata.d.ts.map +1 -0
- package/dist/runtime/migration-metadata.js +29 -0
- package/dist/runtime/migration-metadata.js.map +1 -0
- package/dist/runtime/migration-store.d.ts +22 -0
- package/dist/runtime/migration-store.d.ts.map +1 -0
- package/dist/runtime/migration-store.js +60 -0
- package/dist/runtime/migration-store.js.map +1 -0
- package/dist/runtime/plugin-runtime/errors.d.ts +3 -0
- package/dist/runtime/plugin-runtime/errors.d.ts.map +1 -0
- package/dist/runtime/plugin-runtime/errors.js +13 -0
- package/dist/runtime/plugin-runtime/errors.js.map +1 -0
- package/dist/runtime/plugin-runtime/executor-debug.d.ts +3 -0
- package/dist/runtime/plugin-runtime/executor-debug.d.ts.map +1 -0
- package/dist/runtime/plugin-runtime/executor-debug.js +65 -0
- package/dist/runtime/plugin-runtime/executor-debug.js.map +1 -0
- package/dist/runtime/plugin-runtime/hooks.d.ts +23 -0
- package/dist/runtime/plugin-runtime/hooks.d.ts.map +1 -0
- package/dist/runtime/plugin-runtime/hooks.js +148 -0
- package/dist/runtime/plugin-runtime/hooks.js.map +1 -0
- package/dist/runtime/plugin-runtime/index.d.ts +9 -0
- package/dist/runtime/plugin-runtime/index.d.ts.map +1 -0
- package/dist/runtime/plugin-runtime/index.js +184 -0
- package/dist/runtime/plugin-runtime/index.js.map +1 -0
- package/dist/runtime/plugin-runtime/loader.d.ts +11 -0
- package/dist/runtime/plugin-runtime/loader.d.ts.map +1 -0
- package/dist/runtime/plugin-runtime/loader.js +37 -0
- package/dist/runtime/plugin-runtime/loader.js.map +1 -0
- package/dist/runtime/plugin-runtime/null-executor.d.ts +3 -0
- package/dist/runtime/plugin-runtime/null-executor.d.ts.map +1 -0
- package/dist/runtime/plugin-runtime/null-executor.js +17 -0
- package/dist/runtime/plugin-runtime/null-executor.js.map +1 -0
- package/dist/runtime/safety-markers.d.ts +56 -0
- package/dist/runtime/safety-markers.d.ts.map +1 -0
- package/dist/runtime/safety-markers.js +211 -0
- package/dist/runtime/safety-markers.js.map +1 -0
- package/dist/runtime/schema-loader.d.ts +3 -0
- package/dist/runtime/schema-loader.d.ts.map +1 -0
- package/dist/runtime/schema-loader.js +11 -0
- package/dist/runtime/schema-loader.js.map +1 -0
- package/dist/runtime/table-scope.d.ts +33 -0
- package/dist/runtime/table-scope.d.ts.map +1 -0
- package/dist/runtime/table-scope.js +167 -0
- package/dist/runtime/table-scope.js.map +1 -0
- package/dist/runtime/user-config.d.ts +4 -0
- package/dist/runtime/user-config.d.ts.map +1 -0
- package/dist/runtime/user-config.js +11 -0
- package/dist/runtime/user-config.js.map +1 -0
- package/dist/runtime/version.d.ts +2 -0
- package/dist/runtime/version.d.ts.map +1 -0
- package/dist/runtime/version.js +5 -0
- package/dist/runtime/version.js.map +1 -0
- package/package.json +24 -6
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type ClickHouseExecutor } from '@chkit/clickhouse';
|
|
2
|
+
import type { ResolvedChxConfig } from '@chkit/core';
|
|
3
|
+
import type { ParsedFlags, PluginRuntime, TableScope } from '../../plugins.js';
|
|
4
|
+
import type { createJournalStore } from '../../runtime/journal-store.js';
|
|
5
|
+
import { type MigrationJournalEntry } from '../../runtime/migration-store.js';
|
|
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;
|
|
22
|
+
export declare function applyMigration(input: {
|
|
23
|
+
db: ClickHouseExecutor;
|
|
24
|
+
journalStore: JournalStore;
|
|
25
|
+
pluginRuntime: PluginRuntime;
|
|
26
|
+
config: ResolvedChxConfig;
|
|
27
|
+
tableScope: TableScope;
|
|
28
|
+
flags: ParsedFlags;
|
|
29
|
+
migrationsDir: string;
|
|
30
|
+
file: string;
|
|
31
|
+
}): Promise<MigrationJournalEntry>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=apply.d.ts.map
|
|
@@ -0,0 +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,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"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { waitForDDLPropagation } from '@chkit/clickhouse';
|
|
4
|
+
import { debug } from '../../runtime/debug.js';
|
|
5
|
+
import { checksumSQL } from '../../runtime/migration-store.js';
|
|
6
|
+
import { extractExecutableStatements, extractMigrationOperationSummaries, } from '../../runtime/safety-markers.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
|
+
}
|
|
46
|
+
export async function applyMigration(input) {
|
|
47
|
+
const { db, journalStore, pluginRuntime, config, tableScope, flags, migrationsDir, file } = input;
|
|
48
|
+
debug('migrate', `applying ${file}`);
|
|
49
|
+
const sql = await readFile(join(migrationsDir, file), 'utf8');
|
|
50
|
+
const parsedStatements = extractExecutableStatements(sql);
|
|
51
|
+
const operationSummaries = extractMigrationOperationSummaries(sql);
|
|
52
|
+
debug('migrate', `${file}: ${parsedStatements.length} statements, ${operationSummaries.length} operations`);
|
|
53
|
+
const statements = await pluginRuntime.runOnBeforeApply({
|
|
54
|
+
command: 'migrate',
|
|
55
|
+
config,
|
|
56
|
+
tableScope,
|
|
57
|
+
flags,
|
|
58
|
+
migration: file,
|
|
59
|
+
sql,
|
|
60
|
+
statements: parsedStatements,
|
|
61
|
+
});
|
|
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
|
+
}
|
|
73
|
+
for (let i = 0; i < statements.length; i++) {
|
|
74
|
+
const statement = statements[i];
|
|
75
|
+
const operation = operationSummaries[i];
|
|
76
|
+
if (operation?.mode === 'async') {
|
|
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
|
+
}
|
|
94
|
+
// Async ops are DML (loads, backfills) — no DDL propagation to wait on.
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
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));
|
|
122
|
+
if (operation) {
|
|
123
|
+
await waitForDDLPropagation(db, operation.type, operation.key);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const entry = {
|
|
127
|
+
name: file,
|
|
128
|
+
appliedAt: new Date().toISOString().replace('Z', ''),
|
|
129
|
+
checksum: migrationChecksum,
|
|
130
|
+
};
|
|
131
|
+
await journalStore.appendEntry(entry);
|
|
132
|
+
await pluginRuntime.runOnAfterApply({
|
|
133
|
+
command: 'migrate',
|
|
134
|
+
config,
|
|
135
|
+
tableScope,
|
|
136
|
+
flags,
|
|
137
|
+
migration: file,
|
|
138
|
+
statements,
|
|
139
|
+
appliedAt: entry.appliedAt,
|
|
140
|
+
});
|
|
141
|
+
return entry;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/commands/migrate/apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,qBAAqB,EAA2B,MAAM,mBAAmB,CAAA;AAIlF,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAO9C,OAAO,EAAE,WAAW,EAA8B,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,iCAAiC,CAAA;AACxC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAIzB,SAAS,oBAAoB,CAAC,KAA+B,EAAE,KAAa;IAC1E,OAAO,CACL,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,cAAc,KAAK,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,WAAW,CAAC,IAAI,KAAK,CAClG,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC/D,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,GAAG,GAAG,GAAG;IACrD,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/C,OAAO,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;AACrE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAM9B;IACC,MAAM,OAAO,GAAG,IAAI,KAAK,CACvB,aAAa,KAAK,CAAC,IAAI,wBAAwB,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,KAAK;QACnF,KAAK,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;QAC1C,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAC5B,CAAA;IACD,IAAI,KAAK,CAAC,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAA;IACxF,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAa,EACb,aAAqB,EACrB,YAAoB,EACpB,MAAuB,EACvB,SAAS,GAAG,EAAE;IAEd,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IAC5C,OAAO;QACL,cAAc,EAAE,KAAK;QACrB,YAAY;QACZ,aAAa;QACb,OAAO,EAAE,EAAE;QACX,MAAM;QACN,SAAS,EAAE,SAAS;QACpB,UAAU,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QACnD,SAAS;KACV,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KASpC;IACC,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAEjG,KAAK,CAAC,SAAS,EAAE,YAAY,IAAI,EAAE,CAAC,CAAA;IACpC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IAC7D,MAAM,gBAAgB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAA;IACzD,MAAM,kBAAkB,GAAG,kCAAkC,CAAC,GAAG,CAAC,CAAA;IAClE,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,KAAK,gBAAgB,CAAC,MAAM,gBAAgB,kBAAkB,CAAC,MAAM,aAAa,CAAC,CAAA;IAE3G,MAAM,UAAU,GAAG,MAAM,aAAa,CAAC,gBAAgB,CAAC;QACtD,OAAO,EAAE,SAAS;QAClB,MAAM;QACN,UAAU;QACV,KAAK;QACL,SAAS,EAAE,IAAI;QACf,GAAG;QACH,UAAU,EAAE,gBAAgB;KAC7B,CAAC,CAAA;IAEF,MAAM,iBAAiB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAE1C,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAChE,IACE,YAAY,KAAK,IAAI;QACrB,CAAC,YAAY,CAAC,kBAAkB;QAChC,YAAY,CAAC,QAAQ,KAAK,iBAAiB,EAC3C,CAAC;QACD,MAAM,IAAI,KAAK,CACb,aAAa,IAAI,+CAA+C,YAAY,CAAC,QAAQ,sCAAsC,iBAAiB,+FAA+F,CAC5O,CAAA;IACH,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAW,CAAA;QACzC,MAAM,SAAS,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAA;QACvC,IAAI,SAAS,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,mBAAmB,CAAC;oBACxB,EAAE;oBACF,YAAY;oBACZ,GAAG,EAAE,SAAS;oBACd,aAAa,EAAE,IAAI;oBACnB,iBAAiB;oBACjB,cAAc,EAAE,CAAC;oBACjB,aAAa,EAAE,SAAS,CAAC,IAAI;oBAC7B,YAAY,EAAE,SAAS,CAAC,GAAG;oBAC3B,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;iBACjC,CAAC,CAAA;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;YACtF,CAAC;YACD,wEAAwE;YACxE,SAAQ;QACV,CAAC;QACD,2EAA2E;QAC3E,0EAA0E;QAC1E,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QAC/D,IAAI,oBAAoB,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,CAAC;YACzC,KAAK,CAAC,SAAS,EAAE,GAAG,IAAI,IAAI,CAAC,+CAA+C,CAAC,CAAA;YAC7E,SAAQ;QACV,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,EAAE,IAAI,IAAI,eAAe,CAAA;QACjD,MAAM,KAAK,GAAG,SAAS,EAAE,GAAG,IAAI,aAAa,CAAC,EAAE,CAAA;QAChD,MAAM,SAAS,GAAG,WAAW,IAAI,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;QAC7E,MAAM,YAAY,CAAC,mBAAmB,CACpC,eAAe,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CACtF,CAAA;QACD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,CAAC,MAAM,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAA;YAC/E,MAAM,YAAY,CAAC,mBAAmB,CACpC,eAAe,CACb,YAAY,EACZ,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EACnE,IAAI,CAAC,GAAG,CACT,CACF,CAAA;YACD,MAAM,cAAc,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;QACtF,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,4EAA4E;QAC5E,0EAA0E;QAC1E,MAAM,UAAU,GAAG,CAAC,MAAM,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,CAAA;QAC7E,MAAM,YAAY,CAAC,mBAAmB,CACpC,eAAe,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CACzF,CAAA;QACD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,qBAAqB,CAAC,EAAE,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAA;QAChE,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAA0B;QACnC,IAAI,EAAE,IAAI;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QACpD,QAAQ,EAAE,iBAAiB;KAC5B,CAAA;IACD,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IAErC,MAAM,aAAa,CAAC,eAAe,CAAC;QAClC,OAAO,EAAE,SAAS;QAClB,MAAM;QACN,UAAU;QACV,KAAK;QACL,SAAS,EAAE,IAAI;QACf,UAAU;QACV,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAA;IAEF,OAAO,KAAK,CAAA;AACd,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ClickHouseExecutor } from '@chkit/clickhouse';
|
|
2
|
+
import type { JournalStore, MigrationRowState, OperationState } from '../../runtime/journal-store.js';
|
|
3
|
+
export interface AsyncApplyInput {
|
|
4
|
+
db: ClickHouseExecutor;
|
|
5
|
+
journalStore: JournalStore;
|
|
6
|
+
sql: string;
|
|
7
|
+
migrationName: string;
|
|
8
|
+
migrationChecksum: string;
|
|
9
|
+
statementIndex: number;
|
|
10
|
+
operationType: string;
|
|
11
|
+
operationKey: string;
|
|
12
|
+
beforeRetry: string | null;
|
|
13
|
+
log: (line: string) => void;
|
|
14
|
+
pollIntervalMs?: number;
|
|
15
|
+
sleep?: (ms: number) => Promise<void>;
|
|
16
|
+
now?: () => number;
|
|
17
|
+
}
|
|
18
|
+
export type AsyncApplyResult = {
|
|
19
|
+
kind: 'completed';
|
|
20
|
+
operation: OperationState;
|
|
21
|
+
} | {
|
|
22
|
+
kind: 'skipped';
|
|
23
|
+
operation: OperationState;
|
|
24
|
+
};
|
|
25
|
+
export declare function applyAsyncStatement(input: AsyncApplyInput): Promise<AsyncApplyResult>;
|
|
26
|
+
export declare function upsertOperation(state: MigrationRowState, op: OperationState, now: () => number): MigrationRowState;
|
|
27
|
+
export declare function freshMigrationState(migrationName: string, checksum: string): MigrationRowState;
|
|
28
|
+
export declare function makeDeterministicQueryId(migrationName: string, statementIndex: number): string;
|
|
29
|
+
export declare function isoWithoutZone(date: Date): string;
|
|
30
|
+
//# sourceMappingURL=async-apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-apply.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/async-apply.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,mBAAmB,CAAA;AAGxE,OAAO,KAAK,EACV,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACf,MAAM,gCAAgC,CAAA;AAYvC,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,kBAAkB,CAAA;IACtB,YAAY,EAAE,YAAY,CAAA;IAC1B,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;IACrB,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;IACpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,cAAc,CAAA;CAAE,CAAA;AAElD,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA2I3F;AAoJD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,iBAAiB,EACxB,EAAE,EAAE,cAAc,EAClB,GAAG,EAAE,MAAM,MAAM,GAChB,iBAAiB,CAcnB;AAED,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,iBAAiB,CASnB;AAED,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,CAWR;AA2BD,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAEjD"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { debug } from '../../runtime/debug.js';
|
|
3
|
+
const POLL_INTERVAL_MS = 5_000;
|
|
4
|
+
// A poll request can fail transiently (gateway 504/524, network blip) while the
|
|
5
|
+
// server-side async query keeps running. Tolerate a bounded number of these so a
|
|
6
|
+
// momentary timeout doesn't abort a long-running load; only give up after the budget.
|
|
7
|
+
const MAX_TRANSIENT_POLL_ERRORS = 20;
|
|
8
|
+
function describeError(error) {
|
|
9
|
+
return error instanceof Error ? error.message : String(error);
|
|
10
|
+
}
|
|
11
|
+
export async function applyAsyncStatement(input) {
|
|
12
|
+
const { db, journalStore, sql, migrationName, migrationChecksum, statementIndex, operationType, operationKey, beforeRetry, log, pollIntervalMs = POLL_INTERVAL_MS, sleep = defaultSleep, now = Date.now, } = input;
|
|
13
|
+
const queryId = makeDeterministicQueryId(migrationName, statementIndex);
|
|
14
|
+
debug('migrate:async', `${migrationName}#${statementIndex} query_id=${queryId} type=${operationType}`);
|
|
15
|
+
const initialMigrationState = await journalStore.readMigrationState(migrationName);
|
|
16
|
+
if (initialMigrationState !== null &&
|
|
17
|
+
!initialMigrationState.migrationCompleted &&
|
|
18
|
+
initialMigrationState.checksum !== migrationChecksum) {
|
|
19
|
+
throw new Error(`Migration ${migrationName} has in-progress async journal state for checksum ${initialMigrationState.checksum}, but the current file checksum is ${migrationChecksum}. Restore the original migration file or clear the in-progress journal state before retrying.`);
|
|
20
|
+
}
|
|
21
|
+
const priorOpState = initialMigrationState?.operations.find((op) => op.operationIndex === statementIndex);
|
|
22
|
+
// 1. Already completed → skip entirely
|
|
23
|
+
if (priorOpState?.status === 'completed') {
|
|
24
|
+
log(` ${operationType}: query_id=${queryId} already completed in prior run — skipping`);
|
|
25
|
+
return { kind: 'skipped', operation: priorOpState };
|
|
26
|
+
}
|
|
27
|
+
// 2. Currently in flight on the server → attach
|
|
28
|
+
const inFlight = await db.queryStatus(queryId);
|
|
29
|
+
if (inFlight.status === 'running') {
|
|
30
|
+
log(` ${operationType}: query_id=${queryId} already running on server — attaching to in-flight query`);
|
|
31
|
+
return await pollUntilTerminal({
|
|
32
|
+
db,
|
|
33
|
+
journalStore,
|
|
34
|
+
migrationState: initialMigrationState,
|
|
35
|
+
migrationName,
|
|
36
|
+
migrationChecksum,
|
|
37
|
+
statementIndex,
|
|
38
|
+
operationType,
|
|
39
|
+
operationKey,
|
|
40
|
+
queryId,
|
|
41
|
+
pollAfterTime: '1970-01-01 00:00:00',
|
|
42
|
+
log,
|
|
43
|
+
pollIntervalMs,
|
|
44
|
+
sleep,
|
|
45
|
+
now,
|
|
46
|
+
// No submit promise — query was started by a prior chkit run that's
|
|
47
|
+
// now gone. We only observe its eventual completion.
|
|
48
|
+
submitPromise: null,
|
|
49
|
+
startedAt: priorOpState?.startedAt ?? isoWithoutZone(new Date(now())),
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// 3. Prior in-progress row exists but query is not in system.processes →
|
|
53
|
+
// RETRY. Run before-retry compensation, then resubmit forward.
|
|
54
|
+
// 4. No prior row → FIRST attempt. Skip compensation, submit forward.
|
|
55
|
+
// (priorOpState.status === 'completed' was already returned above.)
|
|
56
|
+
if (priorOpState !== undefined) {
|
|
57
|
+
const errorTail = priorOpState.lastError
|
|
58
|
+
? `: ${firstLine(priorOpState.lastError)}`
|
|
59
|
+
: '';
|
|
60
|
+
log(` ${operationType}: previous attempt of query_id=${queryId} is no longer running (status=${priorOpState.status}${errorTail}) — running before-retry then resubmitting`);
|
|
61
|
+
if (beforeRetry !== null) {
|
|
62
|
+
log(` ${operationType}: running before-retry SQL`);
|
|
63
|
+
await db.command(beforeRetry);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
log(` ${operationType}: submitting async (query_id=${queryId})`);
|
|
68
|
+
}
|
|
69
|
+
const submitAfterTime = priorOpState === undefined ? undefined : isoWithoutZone(new Date(now() - 60_000));
|
|
70
|
+
const startedAt = isoWithoutZone(new Date(now()));
|
|
71
|
+
// Persist the "started" intent BEFORE submitting, so a crash between here
|
|
72
|
+
// and the next event still leaves chkit able to detect "this op was tried."
|
|
73
|
+
await journalStore.writeMigrationState(upsertOperation(initialMigrationState ?? freshMigrationState(migrationName, migrationChecksum), {
|
|
74
|
+
operationIndex: statementIndex,
|
|
75
|
+
operationKey,
|
|
76
|
+
operationType,
|
|
77
|
+
queryId,
|
|
78
|
+
status: 'started',
|
|
79
|
+
startedAt,
|
|
80
|
+
finishedAt: null,
|
|
81
|
+
lastError: '',
|
|
82
|
+
}, now));
|
|
83
|
+
// Re-read so we have the row's actual stored applied_at (matters for
|
|
84
|
+
// subsequent ReplacingMergeTree writes during polling).
|
|
85
|
+
const stateAfterStart = await journalStore.readMigrationState(migrationName);
|
|
86
|
+
const submitPromise = db.submit(sql, queryId);
|
|
87
|
+
return await pollUntilTerminal({
|
|
88
|
+
db,
|
|
89
|
+
journalStore,
|
|
90
|
+
migrationState: stateAfterStart,
|
|
91
|
+
migrationName,
|
|
92
|
+
migrationChecksum,
|
|
93
|
+
statementIndex,
|
|
94
|
+
operationType,
|
|
95
|
+
operationKey,
|
|
96
|
+
queryId,
|
|
97
|
+
pollAfterTime: submitAfterTime,
|
|
98
|
+
log,
|
|
99
|
+
pollIntervalMs,
|
|
100
|
+
sleep,
|
|
101
|
+
now,
|
|
102
|
+
submitPromise,
|
|
103
|
+
startedAt,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
async function pollUntilTerminal(input) {
|
|
107
|
+
const { db, journalStore, migrationState, migrationName, migrationChecksum, statementIndex, operationType, operationKey, queryId, pollAfterTime, log, pollIntervalMs, sleep, now, submitPromise, startedAt, } = input;
|
|
108
|
+
let submitError = null;
|
|
109
|
+
// Capture the submit promise rejection so it doesn't surface as an
|
|
110
|
+
// unhandled rejection. Polling is the source of truth for outcome.
|
|
111
|
+
const submitPromiseGuarded = submitPromise === null
|
|
112
|
+
? null
|
|
113
|
+
: submitPromise.catch((error) => {
|
|
114
|
+
submitError = error instanceof Error ? error : new Error(String(error));
|
|
115
|
+
});
|
|
116
|
+
const pollStartedAt = now();
|
|
117
|
+
let transientPollErrors = 0;
|
|
118
|
+
try {
|
|
119
|
+
for (;;) {
|
|
120
|
+
await sleep(pollIntervalMs);
|
|
121
|
+
let status;
|
|
122
|
+
try {
|
|
123
|
+
status = await db.queryStatus(queryId, pollAfterTime === undefined ? undefined : { afterTime: pollAfterTime });
|
|
124
|
+
transientPollErrors = 0;
|
|
125
|
+
}
|
|
126
|
+
catch (pollError) {
|
|
127
|
+
// The poll request itself failed (e.g. HTTP 524 gateway timeout). The async
|
|
128
|
+
// query is very likely still running server-side, so don't abort the migration —
|
|
129
|
+
// keep polling up to a bounded budget. A re-run re-attaches via the deterministic id.
|
|
130
|
+
transientPollErrors += 1;
|
|
131
|
+
const failedElapsed = Math.floor((now() - pollStartedAt) / 1000);
|
|
132
|
+
if (transientPollErrors > MAX_TRANSIENT_POLL_ERRORS) {
|
|
133
|
+
throw new Error(`Async migration step ${operationType} (query_id ${queryId}): polling failed ${transientPollErrors}× (${describeError(pollError)}). The load may still be running server-side — re-run \`chkit migrate --apply\` to re-attach.`);
|
|
134
|
+
}
|
|
135
|
+
log(` ${operationType}: poll request failed (${describeError(pollError)}) — load may still be running, retrying (elapsed ${failedElapsed}s)`);
|
|
136
|
+
continue;
|
|
137
|
+
}
|
|
138
|
+
const elapsedSec = Math.floor((now() - pollStartedAt) / 1000);
|
|
139
|
+
if (status.status === 'finished') {
|
|
140
|
+
const finishedSec = Math.round((status.durationMs ?? 0) / 1000);
|
|
141
|
+
const finishedOp = {
|
|
142
|
+
operationIndex: statementIndex,
|
|
143
|
+
operationKey,
|
|
144
|
+
operationType,
|
|
145
|
+
queryId,
|
|
146
|
+
status: 'completed',
|
|
147
|
+
startedAt,
|
|
148
|
+
finishedAt: isoWithoutZone(new Date(now())),
|
|
149
|
+
lastError: '',
|
|
150
|
+
};
|
|
151
|
+
const baseState = migrationState ?? freshMigrationState(migrationName, migrationChecksum);
|
|
152
|
+
await journalStore.writeMigrationState(upsertOperation(baseState, finishedOp, now));
|
|
153
|
+
log(` ${operationType}: finished — written=${formatRows(status.writtenRows)} (${formatBytes(status.writtenBytes)}) in ${finishedSec}s`);
|
|
154
|
+
return { kind: 'completed', operation: finishedOp };
|
|
155
|
+
}
|
|
156
|
+
if (status.status === 'failed') {
|
|
157
|
+
const failedOp = {
|
|
158
|
+
operationIndex: statementIndex,
|
|
159
|
+
operationKey,
|
|
160
|
+
operationType,
|
|
161
|
+
queryId,
|
|
162
|
+
status: 'failed',
|
|
163
|
+
startedAt,
|
|
164
|
+
finishedAt: isoWithoutZone(new Date(now())),
|
|
165
|
+
lastError: status.error ?? '<unknown>',
|
|
166
|
+
};
|
|
167
|
+
const baseState = migrationState ?? freshMigrationState(migrationName, migrationChecksum);
|
|
168
|
+
await journalStore.writeMigrationState(upsertOperation(baseState, failedOp, now));
|
|
169
|
+
throw new Error(`Async migration step ${operationType} failed (query_id ${queryId}): ${status.error ?? '<unknown>'}`);
|
|
170
|
+
}
|
|
171
|
+
if (status.status === 'running') {
|
|
172
|
+
log(progressLine(operationType, status, elapsedSec));
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
// status === 'unknown'
|
|
176
|
+
// If submit has already rejected, the query never made it server-side
|
|
177
|
+
// (e.g. SQL parse error) — surface that error. Otherwise it's a
|
|
178
|
+
// transient gap (just-submitted or just-finished); loop.
|
|
179
|
+
if (submitError) {
|
|
180
|
+
throw submitError;
|
|
181
|
+
}
|
|
182
|
+
log(` ${operationType}: status unknown — still polling (elapsed ${elapsedSec}s)`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
if (submitPromiseGuarded) {
|
|
187
|
+
await submitPromiseGuarded.catch(() => { });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export function upsertOperation(state, op, now) {
|
|
192
|
+
const others = state.operations.filter((existing) => existing.operationIndex !== op.operationIndex);
|
|
193
|
+
const operations = [...others, op].sort((a, b) => a.operationIndex - b.operationIndex);
|
|
194
|
+
return {
|
|
195
|
+
...state,
|
|
196
|
+
appliedAt: isoWithoutZone(new Date(now())),
|
|
197
|
+
operations,
|
|
198
|
+
// migrationCompleted stays false until applyMigration explicitly flips it
|
|
199
|
+
migrationCompleted: state.migrationCompleted,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
export function freshMigrationState(migrationName, checksum) {
|
|
203
|
+
return {
|
|
204
|
+
name: migrationName,
|
|
205
|
+
appliedAt: '1970-01-01 00:00:00.000',
|
|
206
|
+
checksum,
|
|
207
|
+
chkitVersion: '',
|
|
208
|
+
migrationCompleted: false,
|
|
209
|
+
operations: [],
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
export function makeDeterministicQueryId(migrationName, statementIndex) {
|
|
213
|
+
const hex = createHash('sha256')
|
|
214
|
+
.update(`chkit:${migrationName}:${statementIndex}`)
|
|
215
|
+
.digest('hex');
|
|
216
|
+
return [
|
|
217
|
+
hex.slice(0, 8),
|
|
218
|
+
hex.slice(8, 12),
|
|
219
|
+
hex.slice(12, 16),
|
|
220
|
+
hex.slice(16, 20),
|
|
221
|
+
hex.slice(20, 32),
|
|
222
|
+
].join('-');
|
|
223
|
+
}
|
|
224
|
+
function progressLine(operationLabel, status, elapsedSec) {
|
|
225
|
+
const rows = formatRows(status.writtenRows);
|
|
226
|
+
const bytes = formatBytes(status.writtenBytes);
|
|
227
|
+
return ` ${operationLabel}: written=${rows} (${bytes}), elapsed ${elapsedSec}s`;
|
|
228
|
+
}
|
|
229
|
+
function formatRows(value) {
|
|
230
|
+
if (value === undefined || value === 0)
|
|
231
|
+
return '0 rows';
|
|
232
|
+
if (value >= 1_000_000)
|
|
233
|
+
return `${(value / 1_000_000).toFixed(2)}M rows`;
|
|
234
|
+
if (value >= 1_000)
|
|
235
|
+
return `${(value / 1_000).toFixed(1)}K rows`;
|
|
236
|
+
return `${value} rows`;
|
|
237
|
+
}
|
|
238
|
+
function formatBytes(value) {
|
|
239
|
+
if (value === undefined || value === 0)
|
|
240
|
+
return '0 B';
|
|
241
|
+
if (value >= 1024 ** 3)
|
|
242
|
+
return `${(value / 1024 ** 3).toFixed(2)} GiB`;
|
|
243
|
+
if (value >= 1024 ** 2)
|
|
244
|
+
return `${(value / 1024 ** 2).toFixed(1)} MiB`;
|
|
245
|
+
if (value >= 1024)
|
|
246
|
+
return `${(value / 1024).toFixed(1)} KiB`;
|
|
247
|
+
return `${value} B`;
|
|
248
|
+
}
|
|
249
|
+
export function isoWithoutZone(date) {
|
|
250
|
+
return date.toISOString().replace('Z', '');
|
|
251
|
+
}
|
|
252
|
+
function firstLine(value) {
|
|
253
|
+
return value.split('\n')[0] ?? value;
|
|
254
|
+
}
|
|
255
|
+
function defaultSleep(ms) {
|
|
256
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=async-apply.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async-apply.js","sourceRoot":"","sources":["../../../src/commands/migrate/async-apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/command.ts"],"names":[],"mappings":"AAGA,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAkCjF,eAAO,MAAM,cAAc,EAAE,gBAK5B,CAAA"}
|