chkit 0.1.0-beta.14 → 0.1.0-beta.16

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.
@@ -3,9 +3,10 @@ import { join } from 'node:path';
3
3
  import process from 'node:process';
4
4
  import { createInterface } from 'node:readline/promises';
5
5
  import { defineFlags, typedFlags } from '../../plugins.js';
6
+ import { withClickHouseExecutor } from '../clickhouse-resource.js';
6
7
  import { GLOBAL_FLAGS } from '../global-flags.js';
7
8
  import { emitJson } from '../json-output.js';
8
- import { createJournalStoreFromConfig } from '../journal-store.js';
9
+ import { createJournalStore } from '../journal-store.js';
9
10
  import { checksumSQL, findChecksumMismatches, listMigrations, readSnapshot, } from '../migration-store.js';
10
11
  import { collectDestructiveOperationMarkers, extractExecutableStatements, extractMigrationOperationSummaries, migrationContainsDangerOperation, } from '../safety-markers.js';
11
12
  import { databaseKeyFromOperationKey, resolveTableScope, tableKeyFromOperationKey, tableKeysFromDefinitions } from '../table-scope.js';
@@ -79,192 +80,194 @@ async function cmdMigrate(ctx) {
79
80
  if (!config.clickhouse) {
80
81
  throw new Error('clickhouse config is required for migrate (journal is stored in ClickHouse)');
81
82
  }
82
- const { journalStore, db } = createJournalStoreFromConfig(config.clickhouse);
83
- const snapshot = await readSnapshot(metaDir);
84
- const tableScope = resolveTableScope(tableSelector, tableKeysFromDefinitions(snapshot?.definitions ?? []));
85
- await pluginRuntime.runOnConfigLoaded({
86
- command: 'migrate',
87
- config,
88
- configPath,
89
- tableScope,
90
- flags,
91
- });
92
- await mkdir(migrationsDir, { recursive: true });
93
- const files = await listMigrations(migrationsDir);
94
- const journal = await journalStore.readJournal();
95
- const appliedNames = new Set(journal.applied.map((entry) => entry.name));
96
- const pendingAll = files.filter((f) => !appliedNames.has(f));
97
- const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
98
- if (checksumMismatches.length > 0) {
99
- if (jsonMode) {
100
- emitJson('migrate', {
101
- mode: executeRequested ? 'execute' : 'plan',
102
- scope: tableScope,
103
- error: 'Checksum mismatch detected on applied migrations',
104
- checksumMismatches,
105
- });
106
- process.exitCode = 1;
107
- return;
108
- }
109
- throw new Error(`Checksum mismatch detected on applied migrations: ${checksumMismatches
110
- .map((item) => item.name)
111
- .join(', ')}`);
112
- }
113
- if (tableScope.enabled && tableScope.matchCount === 0) {
114
- if (jsonMode) {
115
- emitJson('migrate', {
116
- mode: executeRequested ? 'execute' : 'plan',
117
- scope: tableScope,
118
- pending: [],
119
- applied: [],
120
- warning: `No tables matched selector "${tableScope.selector ?? ''}".`,
121
- });
83
+ await withClickHouseExecutor(config.clickhouse, async (db) => {
84
+ const journalStore = createJournalStore(db);
85
+ const snapshot = await readSnapshot(metaDir);
86
+ const tableScope = resolveTableScope(tableSelector, tableKeysFromDefinitions(snapshot?.definitions ?? []));
87
+ await pluginRuntime.runOnConfigLoaded({
88
+ command: 'migrate',
89
+ config,
90
+ configPath,
91
+ tableScope,
92
+ flags,
93
+ });
94
+ await mkdir(migrationsDir, { recursive: true });
95
+ const files = await listMigrations(migrationsDir);
96
+ const journal = await journalStore.readJournal();
97
+ const appliedNames = new Set(journal.applied.map((entry) => entry.name));
98
+ const pendingAll = files.filter((f) => !appliedNames.has(f));
99
+ const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
100
+ if (checksumMismatches.length > 0) {
101
+ if (jsonMode) {
102
+ emitJson('migrate', {
103
+ mode: executeRequested ? 'execute' : 'plan',
104
+ scope: tableScope,
105
+ error: 'Checksum mismatch detected on applied migrations',
106
+ checksumMismatches,
107
+ });
108
+ process.exitCode = 1;
109
+ return;
110
+ }
111
+ throw new Error(`Checksum mismatch detected on applied migrations: ${checksumMismatches
112
+ .map((item) => item.name)
113
+ .join(', ')}`);
122
114
  }
123
- else {
124
- console.log(`No tables matched selector "${tableScope.selector ?? ''}". No migrations selected.`);
115
+ if (tableScope.enabled && tableScope.matchCount === 0) {
116
+ if (jsonMode) {
117
+ emitJson('migrate', {
118
+ mode: executeRequested ? 'execute' : 'plan',
119
+ scope: tableScope,
120
+ pending: [],
121
+ applied: [],
122
+ warning: `No tables matched selector "${tableScope.selector ?? ''}".`,
123
+ });
124
+ }
125
+ else {
126
+ console.log(`No tables matched selector "${tableScope.selector ?? ''}". No migrations selected.`);
127
+ }
128
+ return;
125
129
  }
126
- return;
127
- }
128
- const pending = tableScope.enabled
129
- ? await filterPendingByScope(migrationsDir, pendingAll, new Set(tableScope.matchedTables))
130
- : pendingAll;
131
- if (pending.length === 0) {
132
- if (jsonMode) {
133
- emitJson('migrate', {
134
- mode: executeRequested ? 'execute' : 'plan',
135
- scope: tableScope,
136
- pending: [],
137
- applied: [],
138
- });
130
+ const pending = tableScope.enabled
131
+ ? await filterPendingByScope(migrationsDir, pendingAll, new Set(tableScope.matchedTables))
132
+ : pendingAll;
133
+ if (pending.length === 0) {
134
+ if (jsonMode) {
135
+ emitJson('migrate', {
136
+ mode: executeRequested ? 'execute' : 'plan',
137
+ scope: tableScope,
138
+ pending: [],
139
+ applied: [],
140
+ });
141
+ }
142
+ else {
143
+ console.log('No pending migrations.');
144
+ }
145
+ return;
139
146
  }
140
- else {
141
- console.log('No pending migrations.');
147
+ const planned = {
148
+ mode: executeRequested ? 'execute' : 'plan',
149
+ scope: tableScope,
150
+ pending,
151
+ };
152
+ if (jsonMode && !executeRequested) {
153
+ emitJson('migrate', planned);
154
+ return;
142
155
  }
143
- return;
144
- }
145
- const planned = {
146
- mode: executeRequested ? 'execute' : 'plan',
147
- scope: tableScope,
148
- pending,
149
- };
150
- if (jsonMode && !executeRequested) {
151
- emitJson('migrate', planned);
152
- return;
153
- }
154
- if (!jsonMode) {
155
- if (tableScope.enabled) {
156
- console.log(`Table scope: ${tableScope.selector ?? ''} (${tableScope.matchCount} matched)`);
157
- for (const table of tableScope.matchedTables)
158
- console.log(`- ${table}`);
156
+ if (!jsonMode) {
157
+ if (tableScope.enabled) {
158
+ console.log(`Table scope: ${tableScope.selector ?? ''} (${tableScope.matchCount} matched)`);
159
+ for (const table of tableScope.matchedTables)
160
+ console.log(`- ${table}`);
161
+ }
162
+ console.log(`Pending migrations: ${pending.length}`);
163
+ for (const file of pending)
164
+ console.log(`- ${file}`);
159
165
  }
160
- console.log(`Pending migrations: ${pending.length}`);
161
- for (const file of pending)
162
- console.log(`- ${file}`);
163
- }
164
- let shouldExecute = executeRequested;
165
- if (!shouldExecute) {
166
- if (isBackgroundOrCI() || jsonMode) {
167
- if (!jsonMode) {
168
- console.log('\nPlan only. Re-run with --apply to apply and journal these migrations.');
166
+ let shouldExecute = executeRequested;
167
+ if (!shouldExecute) {
168
+ if (isBackgroundOrCI() || jsonMode) {
169
+ if (!jsonMode) {
170
+ console.log('\nPlan only. Re-run with --apply to apply and journal these migrations.');
171
+ }
172
+ return;
173
+ }
174
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
175
+ try {
176
+ console.log('');
177
+ console.log('Type "yes" to continue. Any other input cancels.');
178
+ const response = await rl.question('Apply pending migrations now? [no/yes]: ');
179
+ shouldExecute = response.trim().toLowerCase() === 'yes';
180
+ }
181
+ finally {
182
+ rl.close();
183
+ }
184
+ if (!shouldExecute) {
185
+ console.log('Migration apply cancelled by user.');
186
+ return;
169
187
  }
170
- return;
171
188
  }
172
- const rl = createInterface({ input: process.stdin, output: process.stdout });
173
- try {
174
- console.log('');
175
- console.log('Type "yes" to continue. Any other input cancels.');
176
- const response = await rl.question('Apply pending migrations now? [no/yes]: ');
177
- shouldExecute = response.trim().toLowerCase() === 'yes';
189
+ const destructiveMigrations = [];
190
+ const destructiveOperations = [];
191
+ for (const file of pending) {
192
+ const sql = await readFile(join(migrationsDir, file), 'utf8');
193
+ if (migrationContainsDangerOperation(sql)) {
194
+ destructiveMigrations.push(file);
195
+ destructiveOperations.push(...collectDestructiveOperationMarkers(file, sql));
196
+ }
178
197
  }
179
- finally {
180
- rl.close();
198
+ let destructiveAllowed = allowDestructive || config.safety?.allowDestructive === true;
199
+ if (destructiveMigrations.length > 0 && !destructiveAllowed) {
200
+ const error = 'Blocked destructive migration execution. Re-run with --allow-destructive or set safety.allowDestructive=true after review.';
201
+ if (jsonMode) {
202
+ emitJson('migrate', {
203
+ mode: 'execute',
204
+ scope: tableScope,
205
+ error,
206
+ destructiveMigrations,
207
+ destructiveOperations,
208
+ });
209
+ process.exitCode = 3;
210
+ return;
211
+ }
212
+ if (isBackgroundOrCI()) {
213
+ printDestructiveOperationDetails(destructiveOperations);
214
+ throw new Error(`${error}\nDestructive migrations: ${destructiveMigrations.join(', ')}\n` +
215
+ 'Non-interactive run detected. Pass --allow-destructive to proceed.');
216
+ }
217
+ const confirmed = await confirmDestructiveExecution(destructiveOperations);
218
+ if (!confirmed) {
219
+ throw new Error(`Destructive migration cancelled by user.\nDestructive migrations: ${destructiveMigrations.join(', ')}`);
220
+ }
221
+ destructiveAllowed = true;
181
222
  }
182
- if (!shouldExecute) {
183
- console.log('Migration apply cancelled by user.');
184
- return;
223
+ if (destructiveMigrations.length > 0 && !destructiveAllowed) {
224
+ throw new Error('Blocked destructive migration execution.');
185
225
  }
186
- }
187
- const destructiveMigrations = [];
188
- const destructiveOperations = [];
189
- for (const file of pending) {
190
- const sql = await readFile(join(migrationsDir, file), 'utf8');
191
- if (migrationContainsDangerOperation(sql)) {
192
- destructiveMigrations.push(file);
193
- destructiveOperations.push(...collectDestructiveOperationMarkers(file, sql));
226
+ const appliedNow = [];
227
+ for (const file of pending) {
228
+ const fullPath = join(migrationsDir, file);
229
+ const sql = await readFile(fullPath, 'utf8');
230
+ const parsedStatements = extractExecutableStatements(sql);
231
+ const statements = await pluginRuntime.runOnBeforeApply({
232
+ command: 'migrate',
233
+ config,
234
+ tableScope,
235
+ flags,
236
+ migration: file,
237
+ sql,
238
+ statements: parsedStatements,
239
+ });
240
+ for (const statement of statements) {
241
+ await db.execute(statement);
242
+ }
243
+ const entry = {
244
+ name: file,
245
+ appliedAt: new Date().toISOString().replace('Z', ''),
246
+ checksum: checksumSQL(sql),
247
+ };
248
+ appliedNow.push(entry);
249
+ await journalStore.appendEntry(entry);
250
+ await pluginRuntime.runOnAfterApply({
251
+ command: 'migrate',
252
+ config,
253
+ tableScope,
254
+ flags,
255
+ migration: file,
256
+ statements,
257
+ appliedAt: entry.appliedAt,
258
+ });
259
+ if (!jsonMode)
260
+ console.log(`Applied: ${file}`);
194
261
  }
195
- }
196
- let destructiveAllowed = allowDestructive || config.safety?.allowDestructive === true;
197
- if (destructiveMigrations.length > 0 && !destructiveAllowed) {
198
- const error = 'Blocked destructive migration execution. Re-run with --allow-destructive or set safety.allowDestructive=true after review.';
199
262
  if (jsonMode) {
200
263
  emitJson('migrate', {
201
264
  mode: 'execute',
202
265
  scope: tableScope,
203
- error,
204
- destructiveMigrations,
205
- destructiveOperations,
266
+ applied: appliedNow,
206
267
  });
207
- process.exitCode = 3;
208
268
  return;
209
269
  }
210
- if (isBackgroundOrCI()) {
211
- printDestructiveOperationDetails(destructiveOperations);
212
- throw new Error(`${error}\nDestructive migrations: ${destructiveMigrations.join(', ')}\n` +
213
- 'Non-interactive run detected. Pass --allow-destructive to proceed.');
214
- }
215
- const confirmed = await confirmDestructiveExecution(destructiveOperations);
216
- if (!confirmed) {
217
- throw new Error(`Destructive migration cancelled by user.\nDestructive migrations: ${destructiveMigrations.join(', ')}`);
218
- }
219
- destructiveAllowed = true;
220
- }
221
- if (destructiveMigrations.length > 0 && !destructiveAllowed) {
222
- throw new Error('Blocked destructive migration execution.');
223
- }
224
- const appliedNow = [];
225
- for (const file of pending) {
226
- const fullPath = join(migrationsDir, file);
227
- const sql = await readFile(fullPath, 'utf8');
228
- const parsedStatements = extractExecutableStatements(sql);
229
- const statements = await pluginRuntime.runOnBeforeApply({
230
- command: 'migrate',
231
- config,
232
- tableScope,
233
- flags,
234
- migration: file,
235
- sql,
236
- statements: parsedStatements,
237
- });
238
- for (const statement of statements) {
239
- await db.execute(statement);
240
- }
241
- const entry = {
242
- name: file,
243
- appliedAt: new Date().toISOString().replace('Z', ''),
244
- checksum: checksumSQL(sql),
245
- };
246
- appliedNow.push(entry);
247
- await journalStore.appendEntry(entry);
248
- await pluginRuntime.runOnAfterApply({
249
- command: 'migrate',
250
- config,
251
- tableScope,
252
- flags,
253
- migration: file,
254
- statements,
255
- appliedAt: entry.appliedAt,
256
- });
257
- if (!jsonMode)
258
- console.log(`Applied: ${file}`);
259
- }
260
- if (jsonMode) {
261
- emitJson('migrate', {
262
- mode: 'execute',
263
- scope: tableScope,
264
- applied: appliedNow,
265
- });
266
- return;
267
- }
268
- console.log(`\nMigrations recorded in ClickHouse _chkit_migrations table.`);
270
+ console.log(`\nMigrations recorded in ClickHouse _chkit_migrations table.`);
271
+ });
269
272
  }
270
273
  //# sourceMappingURL=migrate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/bin/commands/migrate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/bin/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAA;AAKrE,eAAO,MAAM,aAAa,EAAE,UAK3B,CAAA"}
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAqB,MAAM,kBAAkB,CAAA;AAMrE,eAAO,MAAM,aAAa,EAAE,UAK3B,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { mkdir } from 'node:fs/promises';
2
+ import { withClickHouseExecutor } from '../clickhouse-resource.js';
2
3
  import { emitJson } from '../json-output.js';
3
- import { createJournalStoreFromConfig } from '../journal-store.js';
4
+ import { createJournalStore } from '../journal-store.js';
4
5
  import { findChecksumMismatches, listMigrations } from '../migration-store.js';
5
6
  export const statusCommand = {
6
7
  name: 'status',
@@ -15,39 +16,41 @@ async function cmdStatus(ctx) {
15
16
  if (!config.clickhouse) {
16
17
  throw new Error('clickhouse config is required for status (journal is stored in ClickHouse)');
17
18
  }
18
- const { journalStore } = createJournalStoreFromConfig(config.clickhouse);
19
- await mkdir(migrationsDir, { recursive: true });
20
- const files = await listMigrations(migrationsDir);
21
- const journal = await journalStore.readJournal();
22
- const appliedNames = new Set(journal.applied.map((entry) => entry.name));
23
- const pending = files.filter((f) => !appliedNames.has(f));
24
- const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
25
- const payload = {
26
- migrationsDir,
27
- total: files.length,
28
- applied: journal.applied.length,
29
- pending: pending.length,
30
- pendingMigrations: pending,
31
- checksumMismatchCount: checksumMismatches.length,
32
- checksumMismatches,
33
- };
34
- if (jsonMode) {
35
- emitJson('status', payload);
36
- return;
37
- }
38
- console.log(`Migrations directory: ${migrationsDir}`);
39
- console.log(`Total migrations: ${files.length}`);
40
- console.log(`Applied: ${journal.applied.length}`);
41
- console.log(`Pending: ${pending.length}`);
42
- if (pending.length > 0) {
43
- console.log('\nPending migrations:');
44
- for (const item of pending)
45
- console.log(`- ${item}`);
46
- }
47
- if (checksumMismatches.length > 0) {
48
- console.log('\nChecksum mismatches on applied migrations:');
49
- for (const item of checksumMismatches)
50
- console.log(`- ${item.name}`);
51
- }
19
+ await withClickHouseExecutor(config.clickhouse, async (db) => {
20
+ const journalStore = createJournalStore(db);
21
+ await mkdir(migrationsDir, { recursive: true });
22
+ const files = await listMigrations(migrationsDir);
23
+ const journal = await journalStore.readJournal();
24
+ const appliedNames = new Set(journal.applied.map((entry) => entry.name));
25
+ const pending = files.filter((f) => !appliedNames.has(f));
26
+ const checksumMismatches = await findChecksumMismatches(migrationsDir, journal);
27
+ const payload = {
28
+ migrationsDir,
29
+ total: files.length,
30
+ applied: journal.applied.length,
31
+ pending: pending.length,
32
+ pendingMigrations: pending,
33
+ checksumMismatchCount: checksumMismatches.length,
34
+ checksumMismatches,
35
+ };
36
+ if (jsonMode) {
37
+ emitJson('status', payload);
38
+ return;
39
+ }
40
+ console.log(`Migrations directory: ${migrationsDir}`);
41
+ console.log(`Total migrations: ${files.length}`);
42
+ console.log(`Applied: ${journal.applied.length}`);
43
+ console.log(`Pending: ${pending.length}`);
44
+ if (pending.length > 0) {
45
+ console.log('\nPending migrations:');
46
+ for (const item of pending)
47
+ console.log(`- ${item}`);
48
+ }
49
+ if (checksumMismatches.length > 0) {
50
+ console.log('\nChecksum mismatches on applied migrations:');
51
+ for (const item of checksumMismatches)
52
+ console.log(`- ${item.name}`);
53
+ }
54
+ });
52
55
  }
53
56
  //# sourceMappingURL=status.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/bin/commands/status.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"journal-store.d.ts","sourceRoot":"","sources":["../../src/bin/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxC,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AAkBD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,GAAG,YAAY,CAiEvE;AAED,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GACrD;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,kBAAkB,CAAA;CAAE,CAGxD"}
1
+ {"version":3,"file":"journal-store.d.ts","sourceRoot":"","sources":["../../src/bin/journal-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AACrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAGnF,MAAM,WAAW,YAAY;IAC3B,WAAW,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACxC,WAAW,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzD;AA4BD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,kBAAkB,GAAG,YAAY,CAoFvE;AAED,wBAAgB,4BAA4B,CAC1C,gBAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,GACrD;IAAE,YAAY,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,kBAAkB,CAAA;CAAE,CAGxD"}
@@ -1,6 +1,24 @@
1
1
  import { createClickHouseExecutor } from '@chkit/clickhouse';
2
2
  import { CLI_VERSION } from './version.js';
3
- const CREATE_TABLE_SQL = `CREATE TABLE IF NOT EXISTS _chkit_migrations (
3
+ const DEFAULT_JOURNAL_TABLE = '_chkit_migrations';
4
+ function resolveJournalTableName() {
5
+ const candidate = process.env.CHKIT_JOURNAL_TABLE?.trim();
6
+ if (!candidate)
7
+ return DEFAULT_JOURNAL_TABLE;
8
+ if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(candidate)) {
9
+ throw new Error(`Invalid CHKIT_JOURNAL_TABLE "${candidate}". Expected unquoted identifier matching [A-Za-z_][A-Za-z0-9_]*`);
10
+ }
11
+ return candidate;
12
+ }
13
+ function isRetryableInsertRace(error) {
14
+ if (!(error instanceof Error))
15
+ return false;
16
+ const message = error.message;
17
+ return message.includes('INSERT race condition') || message.includes('Please retry the INSERT');
18
+ }
19
+ export function createJournalStore(db) {
20
+ const journalTable = resolveJournalTableName();
21
+ const createTableSql = `CREATE TABLE IF NOT EXISTS ${journalTable} (
4
22
  name String,
5
23
  applied_at DateTime64(3, 'UTC'),
6
24
  checksum String,
@@ -8,7 +26,6 @@ const CREATE_TABLE_SQL = `CREATE TABLE IF NOT EXISTS _chkit_migrations (
8
26
  ) ENGINE = MergeTree()
9
27
  ORDER BY (name)
10
28
  SETTINGS index_granularity = 1`;
11
- export function createJournalStore(db) {
12
29
  let bootstrapped = false;
13
30
  async function ensureTable() {
14
31
  if (bootstrapped)
@@ -19,19 +36,19 @@ export function createJournalStore(db) {
19
36
  // engine normalisation (SharedMergeTree vs SharedMergeTree()) differs
20
37
  // between the stored metadata and the new DDL statement.
21
38
  try {
22
- await db.query(`SELECT name FROM _chkit_migrations LIMIT 0`);
39
+ await db.query(`SELECT name FROM ${journalTable} LIMIT 0`);
23
40
  bootstrapped = true;
24
41
  return;
25
42
  }
26
43
  catch {
27
44
  // Table does not exist yet – create it below.
28
45
  }
29
- await db.execute(CREATE_TABLE_SQL);
46
+ await db.execute(createTableSql);
30
47
  // On ClickHouse Cloud, DDL propagation across nodes may lag behind the
31
48
  // CREATE TABLE acknowledgment. Wait until the table is queryable.
32
49
  for (let attempt = 0; attempt < 10; attempt++) {
33
50
  try {
34
- await db.query(`SELECT name FROM _chkit_migrations LIMIT 0`);
51
+ await db.query(`SELECT name FROM ${journalTable} LIMIT 0`);
35
52
  break;
36
53
  }
37
54
  catch {
@@ -44,12 +61,12 @@ export function createJournalStore(db) {
44
61
  async readJournal() {
45
62
  await ensureTable();
46
63
  try {
47
- await db.execute(`SYSTEM SYNC REPLICA _chkit_migrations`);
64
+ await db.execute(`SYSTEM SYNC REPLICA ${journalTable}`);
48
65
  }
49
66
  catch {
50
67
  // Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.
51
68
  }
52
- const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version FROM _chkit_migrations ORDER BY name SETTINGS select_sequential_consistency = 1`);
69
+ const rows = await db.query(`SELECT name, applied_at, checksum, chkit_version FROM ${journalTable} ORDER BY name SETTINGS select_sequential_consistency = 1`);
53
70
  return {
54
71
  version: 1,
55
72
  applied: rows.map((row) => ({
@@ -62,9 +79,22 @@ export function createJournalStore(db) {
62
79
  async appendEntry(entry) {
63
80
  await ensureTable();
64
81
  const esc = (s) => s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
65
- await db.execute(`INSERT INTO _chkit_migrations (name, applied_at, checksum, chkit_version) VALUES ('${esc(entry.name)}', '${esc(entry.appliedAt)}', '${esc(entry.checksum)}', '${esc(CLI_VERSION)}')`);
82
+ const insertSql = `INSERT INTO ${journalTable} (name, applied_at, checksum, chkit_version) VALUES ('${esc(entry.name)}', '${esc(entry.appliedAt)}', '${esc(entry.checksum)}', '${esc(CLI_VERSION)}')`;
83
+ const maxAttempts = 5;
84
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
85
+ try {
86
+ await db.execute(insertSql);
87
+ break;
88
+ }
89
+ catch (error) {
90
+ if (!isRetryableInsertRace(error) || attempt === maxAttempts) {
91
+ throw error;
92
+ }
93
+ await new Promise((r) => setTimeout(r, attempt * 150));
94
+ }
95
+ }
66
96
  try {
67
- await db.execute(`SYSTEM SYNC REPLICA _chkit_migrations`);
97
+ await db.execute(`SYSTEM SYNC REPLICA ${journalTable}`);
68
98
  }
69
99
  catch {
70
100
  // Non-replicated or single-node setups don't support SYSTEM SYNC REPLICA.