chkit 0.1.0-beta.25 → 0.1.0-beta.27
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/dist/commands/generate/command.js +1 -1
- package/dist/commands/generate/command.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/migrate/apply.d.ts.map +1 -1
- package/dist/commands/migrate/apply.js +20 -2
- package/dist/commands/migrate/apply.js.map +1 -1
- package/dist/commands/migrate/async-apply.d.ts +27 -0
- package/dist/commands/migrate/async-apply.d.ts.map +1 -0
- package/dist/commands/migrate/async-apply.js +234 -0
- package/dist/commands/migrate/async-apply.js.map +1 -0
- package/dist/commands/migrate/command.d.ts.map +1 -1
- package/dist/commands/migrate/command.js +15 -2
- package/dist/commands/migrate/command.js.map +1 -1
- package/dist/runtime/journal-store.d.ts +22 -2
- package/dist/runtime/journal-store.d.ts.map +1 -1
- package/dist/runtime/journal-store.js +92 -19
- package/dist/runtime/journal-store.js.map +1 -1
- 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/safety-markers.d.ts +11 -1
- package/dist/runtime/safety-markers.d.ts.map +1 -1
- package/dist/runtime/safety-markers.js +42 -10
- package/dist/runtime/safety-markers.js.map +1 -1
- package/package.json +5 -5
|
@@ -14,7 +14,7 @@ import { emitGenerateApplyOutput, emitGeneratePlanOutput } from './output.js';
|
|
|
14
14
|
import { debug } from '../../runtime/debug.js';
|
|
15
15
|
const GENERATE_FLAGS = defineFlags([
|
|
16
16
|
{ name: '--name', type: 'string', description: 'Migration name', placeholder: '<name>' },
|
|
17
|
-
{ name: '--migration-id', type: 'string', description: '
|
|
17
|
+
{ name: '--migration-id', type: 'string', description: 'Override the default timestamp migration prefix', placeholder: '<id>' },
|
|
18
18
|
{ name: '--rename-table', type: 'string[]', description: 'Explicit table rename mapping', placeholder: '<mapping>' },
|
|
19
19
|
{ name: '--rename-column', type: 'string[]', description: 'Explicit column rename mapping', placeholder: '<mapping>' },
|
|
20
20
|
{ name: '--dryrun', type: 'boolean', description: 'Print plan without writing artifacts' },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/generate/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClD,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE1D,OAAO,EAAE,WAAW,EAAE,UAAU,EAAyB,MAAM,kBAAkB,CAAA;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAA;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EACL,8BAA8B,EAC9B,sBAAsB,EACtB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,yBAAyB,EACzB,8BAA8B,EAC9B,iCAAiC,EACjC,oCAAoC,GACrC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,gCAAgC,EAChC,iCAAiC,EACjC,gCAAgC,EAChC,2BAA2B,EAC3B,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,wBAAwB,EACxB,kCAAkC,EAClC,0BAA0B,GAC3B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,MAAM,cAAc,GAAG,WAAW,CAAC;IACjC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE;IACxF,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/generate/command.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/init.js
CHANGED
|
@@ -18,7 +18,7 @@ export async function cmdInit() {
|
|
|
18
18
|
console.log(' 3. Run: bunx chkit generate --name init');
|
|
19
19
|
console.log(' 4. Run: bunx chkit migrate --apply');
|
|
20
20
|
console.log('');
|
|
21
|
-
console.log('Docs: https://chkit.obsessiondb.com/getting-started/');
|
|
21
|
+
console.log('Docs: https://chkit.obsessiondb.com/getting-started/add-to-existing-project/');
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
//# 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;AAE1E,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAA;IAE3D,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,UAAU,EACV,2mBAA2mB,CAC5mB,CAAA;IAED,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,UAAU,EACV,obAAob,CACrb,CAAA;IAED,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;IACpE,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;IAEpE,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAA;QAC7G,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;QACrE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,
|
|
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;AAE1E,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;IACpD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,0BAA0B,CAAC,CAAA;IAE3D,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,UAAU,EACV,2mBAA2mB,CAC5mB,CAAA;IAED,MAAM,WAAW,GAAG,MAAM,cAAc,CACtC,UAAU,EACV,obAAob,CACrb,CAAA;IAED,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;IACpE,IAAI,WAAW;QAAE,OAAO,CAAC,GAAG,CAAC,WAAW,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC,CAAA;IAEpE,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;QAC1B,OAAO,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAA;QAC7G,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAA;QACrE,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QACxD,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAA;QACnD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QACf,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAA;IAC7F,CAAC;AACH,CAAC"}
|
|
@@ -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,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAe,KAAK,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;
|
|
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,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACxE,OAAO,EAAe,KAAK,qBAAqB,EAAE,MAAM,kCAAkC,CAAA;AAO1F,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEzD,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,CAgEjC"}
|
|
@@ -4,6 +4,7 @@ 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
8
|
export async function applyMigration(input) {
|
|
8
9
|
const { db, journalStore, pluginRuntime, config, tableScope, flags, migrationsDir, file } = input;
|
|
9
10
|
debug('migrate', `applying ${file}`);
|
|
@@ -20,10 +21,27 @@ export async function applyMigration(input) {
|
|
|
20
21
|
sql,
|
|
21
22
|
statements: parsedStatements,
|
|
22
23
|
});
|
|
24
|
+
const migrationChecksum = checksumSQL(sql);
|
|
23
25
|
for (let i = 0; i < statements.length; i++) {
|
|
24
26
|
const statement = statements[i];
|
|
25
|
-
await db.command(statement);
|
|
26
27
|
const operation = operationSummaries[i];
|
|
28
|
+
if (operation?.mode === 'async') {
|
|
29
|
+
await applyAsyncStatement({
|
|
30
|
+
db,
|
|
31
|
+
journalStore,
|
|
32
|
+
sql: statement,
|
|
33
|
+
migrationName: file,
|
|
34
|
+
migrationChecksum,
|
|
35
|
+
statementIndex: i,
|
|
36
|
+
operationType: operation.type,
|
|
37
|
+
operationKey: operation.key,
|
|
38
|
+
beforeRetry: operation.beforeRetry,
|
|
39
|
+
log: (line) => console.log(line),
|
|
40
|
+
});
|
|
41
|
+
// Async ops are DML (loads, backfills) — no DDL propagation to wait on.
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
await db.command(statement);
|
|
27
45
|
if (operation) {
|
|
28
46
|
await waitForDDLPropagation(db, operation.type, operation.key);
|
|
29
47
|
}
|
|
@@ -31,7 +49,7 @@ export async function applyMigration(input) {
|
|
|
31
49
|
const entry = {
|
|
32
50
|
name: file,
|
|
33
51
|
appliedAt: new Date().toISOString().replace('Z', ''),
|
|
34
|
-
checksum:
|
|
52
|
+
checksum: migrationChecksum,
|
|
35
53
|
};
|
|
36
54
|
await journalStore.appendEntry(entry);
|
|
37
55
|
await pluginRuntime.runOnAfterApply({
|
|
@@ -1 +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;AAE9C,OAAO,EAAE,WAAW,EAA8B,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EACL,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,iCAAiC,CAAA;
|
|
1
|
+
{"version":3,"file":"apply.js","sourceRoot":"","sources":["../../../src/commands/migrate/apply.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ClickHouseExecutor } from '@chkit/clickhouse';
|
|
2
|
+
import type { JournalStore, 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 makeDeterministicQueryId(migrationName: string, statementIndex: number): string;
|
|
27
|
+
//# 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,EAEZ,cAAc,EACf,MAAM,gCAAgC,CAAA;AAIvC,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;AAkKD,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,GACrB,MAAM,CAWR"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { debug } from '../../runtime/debug.js';
|
|
3
|
+
const POLL_INTERVAL_MS = 5_000;
|
|
4
|
+
export async function applyAsyncStatement(input) {
|
|
5
|
+
const { db, journalStore, sql, migrationName, migrationChecksum, statementIndex, operationType, operationKey, beforeRetry, log, pollIntervalMs = POLL_INTERVAL_MS, sleep = defaultSleep, now = Date.now, } = input;
|
|
6
|
+
const queryId = makeDeterministicQueryId(migrationName, statementIndex);
|
|
7
|
+
debug('migrate:async', `${migrationName}#${statementIndex} query_id=${queryId} type=${operationType}`);
|
|
8
|
+
const initialMigrationState = await journalStore.readMigrationState(migrationName);
|
|
9
|
+
if (initialMigrationState !== null &&
|
|
10
|
+
!initialMigrationState.migrationCompleted &&
|
|
11
|
+
initialMigrationState.checksum !== migrationChecksum) {
|
|
12
|
+
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.`);
|
|
13
|
+
}
|
|
14
|
+
const priorOpState = initialMigrationState?.operations.find((op) => op.operationIndex === statementIndex);
|
|
15
|
+
// 1. Already completed → skip entirely
|
|
16
|
+
if (priorOpState?.status === 'completed') {
|
|
17
|
+
log(` ${operationType}: query_id=${queryId} already completed in prior run — skipping`);
|
|
18
|
+
return { kind: 'skipped', operation: priorOpState };
|
|
19
|
+
}
|
|
20
|
+
// 2. Currently in flight on the server → attach
|
|
21
|
+
const inFlight = await db.queryStatus(queryId);
|
|
22
|
+
if (inFlight.status === 'running') {
|
|
23
|
+
log(` ${operationType}: query_id=${queryId} already running on server — attaching to in-flight query`);
|
|
24
|
+
return await pollUntilTerminal({
|
|
25
|
+
db,
|
|
26
|
+
journalStore,
|
|
27
|
+
migrationState: initialMigrationState,
|
|
28
|
+
migrationName,
|
|
29
|
+
migrationChecksum,
|
|
30
|
+
statementIndex,
|
|
31
|
+
operationType,
|
|
32
|
+
operationKey,
|
|
33
|
+
queryId,
|
|
34
|
+
pollAfterTime: '1970-01-01 00:00:00',
|
|
35
|
+
log,
|
|
36
|
+
pollIntervalMs,
|
|
37
|
+
sleep,
|
|
38
|
+
now,
|
|
39
|
+
// No submit promise — query was started by a prior chkit run that's
|
|
40
|
+
// now gone. We only observe its eventual completion.
|
|
41
|
+
submitPromise: null,
|
|
42
|
+
startedAt: priorOpState?.startedAt ?? isoWithoutZone(new Date(now())),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
// 3. Prior in-progress row exists but query is not in system.processes →
|
|
46
|
+
// RETRY. Run before-retry compensation, then resubmit forward.
|
|
47
|
+
// 4. No prior row → FIRST attempt. Skip compensation, submit forward.
|
|
48
|
+
// (priorOpState.status === 'completed' was already returned above.)
|
|
49
|
+
if (priorOpState !== undefined) {
|
|
50
|
+
const errorTail = priorOpState.lastError
|
|
51
|
+
? `: ${firstLine(priorOpState.lastError)}`
|
|
52
|
+
: '';
|
|
53
|
+
log(` ${operationType}: previous attempt of query_id=${queryId} is no longer running (status=${priorOpState.status}${errorTail}) — running before-retry then resubmitting`);
|
|
54
|
+
if (beforeRetry !== null) {
|
|
55
|
+
log(` ${operationType}: running before-retry SQL`);
|
|
56
|
+
await db.command(beforeRetry);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
log(` ${operationType}: submitting async (query_id=${queryId})`);
|
|
61
|
+
}
|
|
62
|
+
const submitAfterTime = priorOpState === undefined ? undefined : isoWithoutZone(new Date(now() - 60_000));
|
|
63
|
+
const startedAt = isoWithoutZone(new Date(now()));
|
|
64
|
+
// Persist the "started" intent BEFORE submitting, so a crash between here
|
|
65
|
+
// and the next event still leaves chkit able to detect "this op was tried."
|
|
66
|
+
await journalStore.writeMigrationState(upsertOperation(initialMigrationState ?? freshMigrationState(migrationName, migrationChecksum), {
|
|
67
|
+
operationIndex: statementIndex,
|
|
68
|
+
operationKey,
|
|
69
|
+
operationType,
|
|
70
|
+
queryId,
|
|
71
|
+
status: 'started',
|
|
72
|
+
startedAt,
|
|
73
|
+
finishedAt: null,
|
|
74
|
+
lastError: '',
|
|
75
|
+
}, now));
|
|
76
|
+
// Re-read so we have the row's actual stored applied_at (matters for
|
|
77
|
+
// subsequent ReplacingMergeTree writes during polling).
|
|
78
|
+
const stateAfterStart = await journalStore.readMigrationState(migrationName);
|
|
79
|
+
const submitPromise = db.submit(sql, queryId);
|
|
80
|
+
return await pollUntilTerminal({
|
|
81
|
+
db,
|
|
82
|
+
journalStore,
|
|
83
|
+
migrationState: stateAfterStart,
|
|
84
|
+
migrationName,
|
|
85
|
+
migrationChecksum,
|
|
86
|
+
statementIndex,
|
|
87
|
+
operationType,
|
|
88
|
+
operationKey,
|
|
89
|
+
queryId,
|
|
90
|
+
pollAfterTime: submitAfterTime,
|
|
91
|
+
log,
|
|
92
|
+
pollIntervalMs,
|
|
93
|
+
sleep,
|
|
94
|
+
now,
|
|
95
|
+
submitPromise,
|
|
96
|
+
startedAt,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
async function pollUntilTerminal(input) {
|
|
100
|
+
const { db, journalStore, migrationState, migrationName, migrationChecksum, statementIndex, operationType, operationKey, queryId, pollAfterTime, log, pollIntervalMs, sleep, now, submitPromise, startedAt, } = input;
|
|
101
|
+
let submitError = null;
|
|
102
|
+
// Capture the submit promise rejection so it doesn't surface as an
|
|
103
|
+
// unhandled rejection. Polling is the source of truth for outcome.
|
|
104
|
+
const submitPromiseGuarded = submitPromise === null
|
|
105
|
+
? null
|
|
106
|
+
: submitPromise.catch((error) => {
|
|
107
|
+
submitError = error instanceof Error ? error : new Error(String(error));
|
|
108
|
+
});
|
|
109
|
+
const pollStartedAt = now();
|
|
110
|
+
try {
|
|
111
|
+
for (;;) {
|
|
112
|
+
await sleep(pollIntervalMs);
|
|
113
|
+
const status = await db.queryStatus(queryId, pollAfterTime === undefined ? undefined : { afterTime: pollAfterTime });
|
|
114
|
+
const elapsedSec = Math.floor((now() - pollStartedAt) / 1000);
|
|
115
|
+
if (status.status === 'finished') {
|
|
116
|
+
const finishedSec = Math.round((status.durationMs ?? 0) / 1000);
|
|
117
|
+
const finishedOp = {
|
|
118
|
+
operationIndex: statementIndex,
|
|
119
|
+
operationKey,
|
|
120
|
+
operationType,
|
|
121
|
+
queryId,
|
|
122
|
+
status: 'completed',
|
|
123
|
+
startedAt,
|
|
124
|
+
finishedAt: isoWithoutZone(new Date(now())),
|
|
125
|
+
lastError: '',
|
|
126
|
+
};
|
|
127
|
+
const baseState = migrationState ?? freshMigrationState(migrationName, migrationChecksum);
|
|
128
|
+
await journalStore.writeMigrationState(upsertOperation(baseState, finishedOp, now));
|
|
129
|
+
log(` ${operationType}: finished — written=${formatRows(status.writtenRows)} (${formatBytes(status.writtenBytes)}) in ${finishedSec}s`);
|
|
130
|
+
return { kind: 'completed', operation: finishedOp };
|
|
131
|
+
}
|
|
132
|
+
if (status.status === 'failed') {
|
|
133
|
+
const failedOp = {
|
|
134
|
+
operationIndex: statementIndex,
|
|
135
|
+
operationKey,
|
|
136
|
+
operationType,
|
|
137
|
+
queryId,
|
|
138
|
+
status: 'failed',
|
|
139
|
+
startedAt,
|
|
140
|
+
finishedAt: isoWithoutZone(new Date(now())),
|
|
141
|
+
lastError: status.error ?? '<unknown>',
|
|
142
|
+
};
|
|
143
|
+
const baseState = migrationState ?? freshMigrationState(migrationName, migrationChecksum);
|
|
144
|
+
await journalStore.writeMigrationState(upsertOperation(baseState, failedOp, now));
|
|
145
|
+
throw new Error(`Async migration step ${operationType} failed (query_id ${queryId}): ${status.error ?? '<unknown>'}`);
|
|
146
|
+
}
|
|
147
|
+
if (status.status === 'running') {
|
|
148
|
+
log(progressLine(operationType, status, elapsedSec));
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
// status === 'unknown'
|
|
152
|
+
// If submit has already rejected, the query never made it server-side
|
|
153
|
+
// (e.g. SQL parse error) — surface that error. Otherwise it's a
|
|
154
|
+
// transient gap (just-submitted or just-finished); loop.
|
|
155
|
+
if (submitError) {
|
|
156
|
+
throw submitError;
|
|
157
|
+
}
|
|
158
|
+
log(` ${operationType}: status unknown — still polling (elapsed ${elapsedSec}s)`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
if (submitPromiseGuarded) {
|
|
163
|
+
await submitPromiseGuarded.catch(() => { });
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
function upsertOperation(state, op, now) {
|
|
168
|
+
const others = state.operations.filter((existing) => existing.operationIndex !== op.operationIndex);
|
|
169
|
+
const operations = [...others, op].sort((a, b) => a.operationIndex - b.operationIndex);
|
|
170
|
+
return {
|
|
171
|
+
...state,
|
|
172
|
+
appliedAt: isoWithoutZone(new Date(now())),
|
|
173
|
+
operations,
|
|
174
|
+
// migrationCompleted stays false until applyMigration explicitly flips it
|
|
175
|
+
migrationCompleted: state.migrationCompleted,
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
function freshMigrationState(migrationName, checksum) {
|
|
179
|
+
return {
|
|
180
|
+
name: migrationName,
|
|
181
|
+
appliedAt: '1970-01-01 00:00:00.000',
|
|
182
|
+
checksum,
|
|
183
|
+
chkitVersion: '',
|
|
184
|
+
migrationCompleted: false,
|
|
185
|
+
operations: [],
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
export function makeDeterministicQueryId(migrationName, statementIndex) {
|
|
189
|
+
const hex = createHash('sha256')
|
|
190
|
+
.update(`chkit:${migrationName}:${statementIndex}`)
|
|
191
|
+
.digest('hex');
|
|
192
|
+
return [
|
|
193
|
+
hex.slice(0, 8),
|
|
194
|
+
hex.slice(8, 12),
|
|
195
|
+
hex.slice(12, 16),
|
|
196
|
+
hex.slice(16, 20),
|
|
197
|
+
hex.slice(20, 32),
|
|
198
|
+
].join('-');
|
|
199
|
+
}
|
|
200
|
+
function progressLine(operationLabel, status, elapsedSec) {
|
|
201
|
+
const rows = formatRows(status.writtenRows);
|
|
202
|
+
const bytes = formatBytes(status.writtenBytes);
|
|
203
|
+
return ` ${operationLabel}: written=${rows} (${bytes}), elapsed ${elapsedSec}s`;
|
|
204
|
+
}
|
|
205
|
+
function formatRows(value) {
|
|
206
|
+
if (value === undefined || value === 0)
|
|
207
|
+
return '0 rows';
|
|
208
|
+
if (value >= 1_000_000)
|
|
209
|
+
return `${(value / 1_000_000).toFixed(2)}M rows`;
|
|
210
|
+
if (value >= 1_000)
|
|
211
|
+
return `${(value / 1_000).toFixed(1)}K rows`;
|
|
212
|
+
return `${value} rows`;
|
|
213
|
+
}
|
|
214
|
+
function formatBytes(value) {
|
|
215
|
+
if (value === undefined || value === 0)
|
|
216
|
+
return '0 B';
|
|
217
|
+
if (value >= 1024 ** 3)
|
|
218
|
+
return `${(value / 1024 ** 3).toFixed(2)} GiB`;
|
|
219
|
+
if (value >= 1024 ** 2)
|
|
220
|
+
return `${(value / 1024 ** 2).toFixed(1)} MiB`;
|
|
221
|
+
if (value >= 1024)
|
|
222
|
+
return `${(value / 1024).toFixed(1)} KiB`;
|
|
223
|
+
return `${value} B`;
|
|
224
|
+
}
|
|
225
|
+
function isoWithoutZone(date) {
|
|
226
|
+
return date.toISOString().replace('Z', '');
|
|
227
|
+
}
|
|
228
|
+
function firstLine(value) {
|
|
229
|
+
return value.split('\n')[0] ?? value;
|
|
230
|
+
}
|
|
231
|
+
function defaultSleep(ms) {
|
|
232
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
233
|
+
}
|
|
234
|
+
//# 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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../src/commands/migrate/command.ts"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { mkdir } from 'node:fs/promises';
|
|
1
|
+
import { mkdir, readFile } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
2
3
|
import { defineFlags, typedFlags } from '../../plugins.js';
|
|
3
4
|
import { resolveDirs } from '../../runtime/config.js';
|
|
4
5
|
import { GLOBAL_FLAGS } from '../../runtime/global-flags.js';
|
|
5
6
|
import { emitJson } from '../../runtime/json-output.js';
|
|
6
7
|
import { createJournalStore } from '../../runtime/journal-store.js';
|
|
8
|
+
import { extractMigrationMetadata } from '../../runtime/migration-metadata.js';
|
|
7
9
|
import { findChecksumMismatches, listMigrations, readSnapshot, } from '../../runtime/migration-store.js';
|
|
8
10
|
import { resolveTableScope, tableKeysFromDefinitions, } from '../../runtime/table-scope.js';
|
|
9
11
|
import { debug } from '../../runtime/debug.js';
|
|
@@ -104,8 +106,13 @@ async function cmdMigrate(runCtx) {
|
|
|
104
106
|
console.log(`- ${table}`);
|
|
105
107
|
}
|
|
106
108
|
console.log(`Pending migrations: ${pending.length}`);
|
|
107
|
-
for (const file of pending)
|
|
109
|
+
for (const file of pending) {
|
|
108
110
|
console.log(`- ${file}`);
|
|
111
|
+
const sql = await readFile(join(migrationsDir, file), 'utf8');
|
|
112
|
+
const meta = extractMigrationMetadata(sql);
|
|
113
|
+
if (meta.log)
|
|
114
|
+
console.log(` ${meta.log}`);
|
|
115
|
+
}
|
|
109
116
|
}
|
|
110
117
|
if (!executeRequested) {
|
|
111
118
|
if (isBackgroundOrCI() || jsonMode) {
|
|
@@ -150,6 +157,12 @@ async function cmdMigrate(runCtx) {
|
|
|
150
157
|
}
|
|
151
158
|
const appliedNow = [];
|
|
152
159
|
for (const file of pending) {
|
|
160
|
+
if (!jsonMode) {
|
|
161
|
+
const sql = await readFile(join(migrationsDir, file), 'utf8');
|
|
162
|
+
const meta = extractMigrationMetadata(sql);
|
|
163
|
+
if (meta.log)
|
|
164
|
+
console.log(` ${meta.log}`);
|
|
165
|
+
}
|
|
153
166
|
const entry = await applyMigration({
|
|
154
167
|
db,
|
|
155
168
|
journalStore,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/migrate/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../../src/commands/migrate/command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import { type ClickHouseExecutor } from '@chkit/clickhouse';
|
|
2
2
|
import type { MigrationJournal, MigrationJournalEntry } from './migration-store.js';
|
|
3
|
-
|
|
3
|
+
export type OperationStatus = 'started' | 'completed' | 'failed';
|
|
4
|
+
export interface OperationState {
|
|
5
|
+
operationIndex: number;
|
|
6
|
+
operationKey: string;
|
|
7
|
+
operationType: string;
|
|
8
|
+
queryId: string;
|
|
9
|
+
status: OperationStatus;
|
|
10
|
+
startedAt: string;
|
|
11
|
+
finishedAt: string | null;
|
|
12
|
+
lastError: string;
|
|
13
|
+
}
|
|
14
|
+
export interface MigrationRowState {
|
|
15
|
+
name: string;
|
|
16
|
+
appliedAt: string;
|
|
17
|
+
checksum: string;
|
|
18
|
+
chkitVersion: string;
|
|
19
|
+
migrationCompleted: boolean;
|
|
20
|
+
operations: OperationState[];
|
|
21
|
+
}
|
|
22
|
+
export interface JournalStore {
|
|
4
23
|
readJournal(): Promise<MigrationJournal>;
|
|
24
|
+
readMigrationState(migrationName: string): Promise<MigrationRowState | null>;
|
|
25
|
+
writeMigrationState(state: MigrationRowState): Promise<void>;
|
|
5
26
|
appendEntry(entry: MigrationJournalEntry): Promise<void>;
|
|
6
27
|
readonly databaseMissing: boolean;
|
|
7
28
|
}
|
|
8
29
|
export declare function createJournalStore(db: ClickHouseExecutor): JournalStore;
|
|
9
|
-
export {};
|
|
10
30
|
//# sourceMappingURL=journal-store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-store.d.ts","sourceRoot":"","sources":["../../src/runtime/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAInF,UAAU,YAAY;IACpB,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxC,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;CAClC;
|
|
1
|
+
{"version":3,"file":"journal-store.d.ts","sourceRoot":"","sources":["../../src/runtime/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAEnF,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAInF,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAA;AAEhE,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,eAAe,CAAA;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,MAAM,CAAA;IACpB,kBAAkB,EAAE,OAAO,CAAA;IAC3B,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxC,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAA;IAC5E,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5D,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;CAClC;AAkFD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,GAAG,YAAY,CAoKvE"}
|
|
@@ -11,12 +11,46 @@ function resolveJournalTableName() {
|
|
|
11
11
|
}
|
|
12
12
|
return candidate;
|
|
13
13
|
}
|
|
14
|
+
const OPERATIONS_TUPLE_TYPE = 'Array(Tuple(operation_index Int32, operation_key String, operation_type String, query_id String, status LowCardinality(String), started_at DateTime64(3, \'UTC\'), finished_at Nullable(DateTime64(3, \'UTC\')), last_error String))';
|
|
14
15
|
function isRetryableInsertRace(error) {
|
|
15
16
|
if (!(error instanceof Error))
|
|
16
17
|
return false;
|
|
17
18
|
const message = error.message;
|
|
18
19
|
return message.includes('INSERT race condition') || message.includes('Please retry the INSERT');
|
|
19
20
|
}
|
|
21
|
+
function escapeSqlString(value) {
|
|
22
|
+
return value.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
23
|
+
}
|
|
24
|
+
function operationToTupleLiteral(op) {
|
|
25
|
+
const parts = [
|
|
26
|
+
String(op.operationIndex),
|
|
27
|
+
`'${escapeSqlString(op.operationKey)}'`,
|
|
28
|
+
`'${escapeSqlString(op.operationType)}'`,
|
|
29
|
+
`'${escapeSqlString(op.queryId)}'`,
|
|
30
|
+
`'${escapeSqlString(op.status)}'`,
|
|
31
|
+
`'${escapeSqlString(op.startedAt)}'`,
|
|
32
|
+
op.finishedAt === null ? 'NULL' : `'${escapeSqlString(op.finishedAt)}'`,
|
|
33
|
+
`'${escapeSqlString(op.lastError)}'`,
|
|
34
|
+
];
|
|
35
|
+
return `(${parts.join(',')})`;
|
|
36
|
+
}
|
|
37
|
+
function operationsArrayLiteral(operations) {
|
|
38
|
+
if (operations.length === 0)
|
|
39
|
+
return '[]';
|
|
40
|
+
return `[${operations.map(operationToTupleLiteral).join(',')}]`;
|
|
41
|
+
}
|
|
42
|
+
function operationFromTuple(row) {
|
|
43
|
+
return {
|
|
44
|
+
operationIndex: Number(row.operation_index),
|
|
45
|
+
operationKey: row.operation_key,
|
|
46
|
+
operationType: row.operation_type,
|
|
47
|
+
queryId: row.query_id,
|
|
48
|
+
status: row.status,
|
|
49
|
+
startedAt: row.started_at,
|
|
50
|
+
finishedAt: row.finished_at,
|
|
51
|
+
lastError: row.last_error,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
20
54
|
export function createJournalStore(db) {
|
|
21
55
|
const journalTable = resolveJournalTableName();
|
|
22
56
|
debug('journal', `journal table: ${journalTable}${process.env.CHKIT_JOURNAL_TABLE ? ' (from CHKIT_JOURNAL_TABLE)' : ''}`);
|
|
@@ -24,7 +58,9 @@ export function createJournalStore(db) {
|
|
|
24
58
|
name String,
|
|
25
59
|
applied_at DateTime64(3, 'UTC'),
|
|
26
60
|
checksum String,
|
|
27
|
-
chkit_version String
|
|
61
|
+
chkit_version String,
|
|
62
|
+
migration_completed Bool DEFAULT true,
|
|
63
|
+
operations ${OPERATIONS_TUPLE_TYPE} DEFAULT []
|
|
28
64
|
) ENGINE = ReplacingMergeTree(applied_at)
|
|
29
65
|
ORDER BY (name)
|
|
30
66
|
SETTINGS index_granularity = 1`;
|
|
@@ -36,7 +72,8 @@ SETTINGS index_granularity = 1`;
|
|
|
36
72
|
debug('journal', `probing journal table "${journalTable}"`);
|
|
37
73
|
try {
|
|
38
74
|
await db.query(`SELECT name FROM ${journalTable} LIMIT 0`);
|
|
39
|
-
debug('journal', 'journal table exists');
|
|
75
|
+
debug('journal', 'journal table exists — checking schema');
|
|
76
|
+
await ensureSchemaUpgraded();
|
|
40
77
|
bootstrapped = true;
|
|
41
78
|
return;
|
|
42
79
|
}
|
|
@@ -73,6 +110,22 @@ SETTINGS index_granularity = 1`;
|
|
|
73
110
|
}
|
|
74
111
|
bootstrapped = true;
|
|
75
112
|
}
|
|
113
|
+
async function ensureSchemaUpgraded() {
|
|
114
|
+
// Pre-existing journal tables predate per-operation tracking. Add the
|
|
115
|
+
// columns idempotently so older deployments pick them up on first run
|
|
116
|
+
// of the new chkit. ALTER ADD COLUMN IF NOT EXISTS is a metadata op,
|
|
117
|
+
// no data rewrite.
|
|
118
|
+
await db.command(`ALTER TABLE ${journalTable} ADD COLUMN IF NOT EXISTS migration_completed Bool DEFAULT true`);
|
|
119
|
+
await db.command(`ALTER TABLE ${journalTable} ADD COLUMN IF NOT EXISTS operations ${OPERATIONS_TUPLE_TYPE} DEFAULT []`);
|
|
120
|
+
}
|
|
121
|
+
async function trySyncReplica() {
|
|
122
|
+
try {
|
|
123
|
+
await db.command(`SYSTEM SYNC REPLICA ${journalTable}`);
|
|
124
|
+
}
|
|
125
|
+
catch {
|
|
126
|
+
// Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.
|
|
127
|
+
}
|
|
128
|
+
}
|
|
76
129
|
return {
|
|
77
130
|
get databaseMissing() {
|
|
78
131
|
return _databaseMissing;
|
|
@@ -84,13 +137,8 @@ SETTINGS index_granularity = 1`;
|
|
|
84
137
|
debug('journal', 'database missing — returning empty journal');
|
|
85
138
|
return { version: 1, applied: [] };
|
|
86
139
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
// Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.
|
|
92
|
-
}
|
|
93
|
-
const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version FROM ${journalTable} ORDER BY name SETTINGS select_sequential_consistency = 1`);
|
|
140
|
+
await trySyncReplica();
|
|
141
|
+
const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version FROM ${journalTable} FINAL WHERE migration_completed = true ORDER BY name SETTINGS select_sequential_consistency = 1`);
|
|
94
142
|
debug('journal', `journal has ${rows.length} applied entries`);
|
|
95
143
|
return {
|
|
96
144
|
version: 1,
|
|
@@ -101,16 +149,32 @@ SETTINGS index_granularity = 1`;
|
|
|
101
149
|
})),
|
|
102
150
|
};
|
|
103
151
|
},
|
|
104
|
-
async
|
|
105
|
-
|
|
152
|
+
async readMigrationState(migrationName) {
|
|
153
|
+
await ensureTable();
|
|
154
|
+
if (_databaseMissing)
|
|
155
|
+
return null;
|
|
156
|
+
await trySyncReplica();
|
|
157
|
+
const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version, migration_completed, operations FROM ${journalTable} FINAL WHERE name = '${escapeSqlString(migrationName)}' LIMIT 1 SETTINGS select_sequential_consistency = 1`);
|
|
158
|
+
const row = rows[0];
|
|
159
|
+
if (!row)
|
|
160
|
+
return null;
|
|
161
|
+
return {
|
|
162
|
+
name: row.name,
|
|
163
|
+
appliedAt: row.applied_at,
|
|
164
|
+
checksum: row.checksum,
|
|
165
|
+
chkitVersion: row.chkit_version,
|
|
166
|
+
migrationCompleted: Boolean(row.migration_completed),
|
|
167
|
+
operations: (row.operations ?? []).map(operationFromTuple),
|
|
168
|
+
};
|
|
169
|
+
},
|
|
170
|
+
async writeMigrationState(state) {
|
|
106
171
|
if (_databaseMissing) {
|
|
107
172
|
debug('journal', 'resetting databaseMissing flag — migration may have created the database');
|
|
108
173
|
_databaseMissing = false;
|
|
109
174
|
bootstrapped = false;
|
|
110
175
|
}
|
|
111
176
|
await ensureTable();
|
|
112
|
-
const
|
|
113
|
-
const insertSql = `INSERT INTO ${journalTable} (name, applied_at, checksum, chkit_version) VALUES ('${esc(entry.name)}', '${esc(entry.appliedAt)}', '${esc(entry.checksum)}', '${esc(CLI_VERSION)}')`;
|
|
177
|
+
const insertSql = `INSERT INTO ${journalTable} (name, applied_at, checksum, chkit_version, migration_completed, operations) VALUES ('${escapeSqlString(state.name)}', '${escapeSqlString(state.appliedAt)}', '${escapeSqlString(state.checksum)}', '${escapeSqlString(state.chkitVersion || CLI_VERSION)}', ${state.migrationCompleted ? 'true' : 'false'}, ${operationsArrayLiteral(state.operations)})`;
|
|
114
178
|
const maxAttempts = 5;
|
|
115
179
|
for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
|
|
116
180
|
try {
|
|
@@ -125,12 +189,21 @@ SETTINGS index_granularity = 1`;
|
|
|
125
189
|
await new Promise((r) => setTimeout(r, attempt * 150));
|
|
126
190
|
}
|
|
127
191
|
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
192
|
+
await trySyncReplica();
|
|
193
|
+
},
|
|
194
|
+
async appendEntry(entry) {
|
|
195
|
+
debug('journal', `appending entry: ${entry.name} (checksum: ${entry.checksum})`);
|
|
196
|
+
// Preserve any per-operation history that async statements wrote
|
|
197
|
+
// earlier in this migration's apply — we just flip migrationCompleted.
|
|
198
|
+
const existing = await this.readMigrationState(entry.name);
|
|
199
|
+
await this.writeMigrationState({
|
|
200
|
+
name: entry.name,
|
|
201
|
+
appliedAt: entry.appliedAt,
|
|
202
|
+
checksum: entry.checksum,
|
|
203
|
+
chkitVersion: CLI_VERSION,
|
|
204
|
+
migrationCompleted: true,
|
|
205
|
+
operations: existing?.operations ?? [],
|
|
206
|
+
});
|
|
134
207
|
},
|
|
135
208
|
};
|
|
136
209
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"journal-store.js","sourceRoot":"","sources":["../../src/runtime/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA2B,MAAM,mBAAmB,CAAA;AAGnF,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"journal-store.js","sourceRoot":"","sources":["../../src/runtime/journal-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-metadata.d.ts","sourceRoot":"","sources":["../../src/runtime/migration-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAMD,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CAgBvE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const KNOWN_KEYS = new Set(['log']);
|
|
2
|
+
const META_LINE = /^--\s*([a-z][a-z0-9-]*)\s*:\s*(.+)$/i;
|
|
3
|
+
export function extractMigrationMetadata(sql) {
|
|
4
|
+
const meta = {};
|
|
5
|
+
for (const rawLine of sql.split('\n')) {
|
|
6
|
+
const line = rawLine.trim();
|
|
7
|
+
if (line === '')
|
|
8
|
+
continue;
|
|
9
|
+
if (!line.startsWith('--'))
|
|
10
|
+
break;
|
|
11
|
+
const match = line.match(META_LINE);
|
|
12
|
+
if (!match)
|
|
13
|
+
continue;
|
|
14
|
+
const key = match[1]?.toLowerCase();
|
|
15
|
+
const value = match[2]?.trim();
|
|
16
|
+
if (!key || !value)
|
|
17
|
+
continue;
|
|
18
|
+
if (!isKnownKey(key))
|
|
19
|
+
continue;
|
|
20
|
+
if (meta[key] !== undefined)
|
|
21
|
+
continue;
|
|
22
|
+
meta[key] = value;
|
|
23
|
+
}
|
|
24
|
+
return meta;
|
|
25
|
+
}
|
|
26
|
+
function isKnownKey(key) {
|
|
27
|
+
return KNOWN_KEYS.has(key);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=migration-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-metadata.js","sourceRoot":"","sources":["../../src/runtime/migration-metadata.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,GAAG,IAAI,GAAG,CAA0B,CAAC,KAAK,CAAC,CAAC,CAAA;AAE5D,MAAM,SAAS,GAAG,sCAAsC,CAAA;AAExD,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,IAAI,GAAsB,EAAE,CAAA;IAClC,KAAK,MAAM,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,IAAI,KAAK,EAAE;YAAE,SAAQ;QACzB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,MAAK;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACnC,IAAI,CAAC,KAAK;YAAE,SAAQ;QACpB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAA;QACnC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAA;QAC9B,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK;YAAE,SAAQ;QAC5B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAQ;QAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS;YAAE,SAAQ;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;IACnB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,OAAO,UAAU,CAAC,GAAG,CAAC,GAA8B,CAAC,CAAA;AACvD,CAAC"}
|
|
@@ -11,10 +11,20 @@ export interface DestructiveOperationMarker {
|
|
|
11
11
|
recommendation: string;
|
|
12
12
|
summary: string;
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
export type MigrationOperationMode = 'sync' | 'async';
|
|
15
|
+
export interface MigrationOperationSummary {
|
|
15
16
|
type: string;
|
|
16
17
|
key: string;
|
|
17
18
|
risk: string;
|
|
19
|
+
mode: MigrationOperationMode;
|
|
20
|
+
/**
|
|
21
|
+
* SQL to run BEFORE re-attempting this operation, parsed from a
|
|
22
|
+
* `-- before-retry: <sql>` header line that follows the `-- operation:`
|
|
23
|
+
* line. Empty / null on first attempt; runs on every retry. Compensates
|
|
24
|
+
* for partial side effects left behind by a failed prior attempt
|
|
25
|
+
* (e.g. TRUNCATE a partially-loaded table before re-INSERTing).
|
|
26
|
+
*/
|
|
27
|
+
beforeRetry: string | null;
|
|
18
28
|
summary: string;
|
|
19
29
|
}
|
|
20
30
|
export declare function migrationContainsDangerOperation(sql: string): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety-markers.d.ts","sourceRoot":"","sources":["../../src/runtime/safety-markers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAEzD,OAAO,EAAE,2BAA2B,EAAE,CAAA;AAEtC,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,
|
|
1
|
+
{"version":3,"file":"safety-markers.d.ts","sourceRoot":"","sources":["../../src/runtime/safety-markers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAEzD,OAAO,EAAE,2BAA2B,EAAE,CAAA;AAEtC,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,OAAO,CAAA;AAErD,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,sBAAsB,CAAA;IAC5B;;;;;;OAMG;IACH,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAErE;AAoCD,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,GAAG,yBAAyB,EAAE,CA0B3F;AAyCD,wBAAgB,kCAAkC,CAChD,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,GACV,0BAA0B,EAAE,CAmB9B"}
|
|
@@ -10,25 +10,57 @@ function extractDestructiveOperationSummaries(sql) {
|
|
|
10
10
|
.filter((line) => line.startsWith('-- operation:') && line.includes('risk=danger'))
|
|
11
11
|
.map((line) => line.replace(/^-- operation:\s*/, ''));
|
|
12
12
|
}
|
|
13
|
-
function parseOperationLine(summary) {
|
|
14
|
-
const match = summary.match(/^([a-z_]+)\s+key=([^\s]+)\s+risk=([a-z_]+)
|
|
13
|
+
function parseOperationLine(summary, beforeRetry) {
|
|
14
|
+
const match = summary.match(/^([a-z_]+)\s+key=([^\s]+)\s+risk=([a-z_]+)(?:\s+mode=([a-z_]+))?$/);
|
|
15
15
|
if (!match)
|
|
16
16
|
return null;
|
|
17
|
+
const rawMode = match[4];
|
|
18
|
+
const mode = rawMode === 'async' ? 'async' : 'sync';
|
|
17
19
|
return {
|
|
18
20
|
type: match[1] ?? 'unknown',
|
|
19
21
|
key: match[2] ?? 'unknown',
|
|
20
22
|
risk: match[3] ?? 'unknown',
|
|
23
|
+
mode,
|
|
24
|
+
beforeRetry,
|
|
21
25
|
summary,
|
|
22
26
|
};
|
|
23
27
|
}
|
|
28
|
+
const BEFORE_RETRY_PREFIX = '-- before-retry:';
|
|
29
|
+
function stripTrailingSemicolon(value) {
|
|
30
|
+
return value.replace(/;\s*$/, '').trim();
|
|
31
|
+
}
|
|
24
32
|
export function extractMigrationOperationSummaries(sql) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
.
|
|
33
|
+
const lines = sql.split('\n').map((line) => line.trim());
|
|
34
|
+
const summaries = [];
|
|
35
|
+
for (let i = 0; i < lines.length; i++) {
|
|
36
|
+
const line = lines[i];
|
|
37
|
+
if (!line?.startsWith('-- operation:'))
|
|
38
|
+
continue;
|
|
39
|
+
const summary = line.replace(/^-- operation:\s*/, '');
|
|
40
|
+
// A `-- before-retry: <sql>` line is associated with the operation if it
|
|
41
|
+
// appears in the comment block immediately following the operation line
|
|
42
|
+
// (allowing blank/comment lines in between, but not executable SQL).
|
|
43
|
+
let beforeRetry = null;
|
|
44
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
45
|
+
const next = lines[j];
|
|
46
|
+
if (next === undefined)
|
|
47
|
+
break;
|
|
48
|
+
if (next === '')
|
|
49
|
+
continue;
|
|
50
|
+
if (!next.startsWith('--'))
|
|
51
|
+
break;
|
|
52
|
+
if (next.startsWith(BEFORE_RETRY_PREFIX)) {
|
|
53
|
+
beforeRetry = stripTrailingSemicolon(next.slice(BEFORE_RETRY_PREFIX.length).trim());
|
|
54
|
+
if (beforeRetry === '')
|
|
55
|
+
beforeRetry = null;
|
|
56
|
+
break;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
const parsed = parseOperationLine(summary, beforeRetry);
|
|
60
|
+
if (parsed !== null)
|
|
61
|
+
summaries.push(parsed);
|
|
62
|
+
}
|
|
63
|
+
return summaries;
|
|
32
64
|
}
|
|
33
65
|
function describeDestructiveOperation(type) {
|
|
34
66
|
if (type === 'drop_table') {
|
|
@@ -64,7 +96,7 @@ function describeDestructiveOperation(type) {
|
|
|
64
96
|
}
|
|
65
97
|
export function collectDestructiveOperationMarkers(migration, sql) {
|
|
66
98
|
return extractDestructiveOperationSummaries(sql).map((summary) => {
|
|
67
|
-
const parsed = parseOperationLine(summary);
|
|
99
|
+
const parsed = parseOperationLine(summary, null);
|
|
68
100
|
const type = parsed?.type ?? 'unknown';
|
|
69
101
|
const key = parsed?.key ?? 'unknown';
|
|
70
102
|
const risk = parsed?.risk ?? 'danger';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safety-markers.js","sourceRoot":"","sources":["../../src/runtime/safety-markers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAA;AAEzD,OAAO,EAAE,2BAA2B,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"safety-markers.js","sourceRoot":"","sources":["../../src/runtime/safety-markers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chkit",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.27",
|
|
4
4
|
"description": "ClickHouse schema and migration CLI for TypeScript projects",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "ObsessionDB",
|
|
@@ -40,12 +40,12 @@
|
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"fast-glob": "^3.3.2",
|
|
43
|
-
"@chkit/clickhouse": "0.1.0-beta.
|
|
44
|
-
"@chkit/codegen": "0.1.0-beta.
|
|
45
|
-
"@chkit/core": "0.1.0-beta.
|
|
43
|
+
"@chkit/clickhouse": "0.1.0-beta.27",
|
|
44
|
+
"@chkit/codegen": "0.1.0-beta.27",
|
|
45
|
+
"@chkit/core": "0.1.0-beta.27",
|
|
46
46
|
"@logtape/logtape": "^2.0.5"
|
|
47
47
|
},
|
|
48
48
|
"optionalDependencies": {
|
|
49
|
-
"@chkit/plugin-obsessiondb": "0.1.0-beta.
|
|
49
|
+
"@chkit/plugin-obsessiondb": "0.1.0-beta.26"
|
|
50
50
|
}
|
|
51
51
|
}
|