@chkit/core 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/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +67 -5
- package/dist/canonical.js.map +1 -1
- package/dist/codec.d.ts +23 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +193 -0
- package/dist/codec.js.map +1 -0
- package/dist/config-path.d.ts +3 -0
- package/dist/config-path.d.ts.map +1 -0
- package/dist/config-path.js +5 -0
- package/dist/config-path.js.map +1 -0
- package/dist/diff-primitives.d.ts +5 -4
- package/dist/diff-primitives.d.ts.map +1 -1
- package/dist/flags.d.ts +26 -0
- package/dist/flags.d.ts.map +1 -1
- package/dist/flags.js +63 -17
- package/dist/flags.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/key-clause.d.ts +1 -1
- package/dist/key-clause.d.ts.map +1 -1
- package/dist/key-clause.js +1 -1
- package/dist/key-clause.js.map +1 -1
- package/dist/model-types.d.ts +108 -11
- package/dist/model-types.d.ts.map +1 -1
- package/dist/model.d.ts.map +1 -1
- package/dist/model.js +15 -0
- package/dist/model.js.map +1 -1
- package/dist/on-cluster.d.ts +17 -0
- package/dist/on-cluster.d.ts.map +1 -0
- package/dist/on-cluster.js +123 -0
- package/dist/on-cluster.js.map +1 -0
- package/dist/planner.d.ts.map +1 -1
- package/dist/planner.js +116 -13
- package/dist/planner.js.map +1 -1
- package/dist/schema-loader.d.ts.map +1 -1
- package/dist/schema-loader.js +2 -2
- package/dist/schema-loader.js.map +1 -1
- package/dist/sql-normalizer.d.ts +1 -0
- package/dist/sql-normalizer.d.ts.map +1 -1
- package/dist/sql-normalizer.js +7 -0
- package/dist/sql-normalizer.js.map +1 -1
- package/dist/sql-splitter.d.ts +3 -0
- package/dist/sql-splitter.d.ts.map +1 -0
- package/dist/sql-splitter.js +168 -0
- package/dist/sql-splitter.js.map +1 -0
- package/dist/sql.d.ts +8 -1
- package/dist/sql.d.ts.map +1 -1
- package/dist/sql.js +74 -3
- package/dist/sql.js.map +1 -1
- package/dist/ts-import.d.ts +12 -0
- package/dist/ts-import.d.ts.map +1 -0
- package/dist/ts-import.js +29 -0
- package/dist/ts-import.js.map +1 -0
- package/dist/utils.d.ts +2 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +68 -0
- package/dist/validate.js.map +1 -1
- package/package.json +24 -2
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EACL,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
export * from './flags.js';
|
|
2
2
|
export * from './model.js';
|
|
3
|
+
export { SYNTHESIZED_CONFIG_PATH, isSynthesizedConfigPath } from './config-path.js';
|
|
3
4
|
export { canonicalizeDefinition, canonicalizeDefinitions, collectDefinitionsFromModule, } from './canonical.js';
|
|
4
5
|
export { planDiff } from './planner.js';
|
|
5
6
|
export { createSnapshot } from './snapshot.js';
|
|
6
|
-
export { loadSchemaDefinitions } from './schema-loader.js';
|
|
7
7
|
export { splitTopLevelComma } from './key-clause.js';
|
|
8
|
-
export { normalizeSQLFragment } from './sql-normalizer.js';
|
|
8
|
+
export { normalizeEngine, normalizeSQLFragment } from './sql-normalizer.js';
|
|
9
9
|
export { toCreateSQL } from './sql.js';
|
|
10
|
+
export { applyOnClusterToPlan, onClusterClause } from './on-cluster.js';
|
|
11
|
+
export { canonicalizeCodec, codec, codecsEqual, isGeneralCodec, isPreprocessorCodec, isRawCodec, parseCodec, renderCodec, } from './codec.js';
|
|
10
12
|
export { assertValidDefinitions, validateDefinitions } from './validate.js';
|
|
11
13
|
export { wrapPluginRun } from './plugin-error.js';
|
|
14
|
+
export { splitSqlStatements, extractExecutableStatements } from './sql-splitter.js';
|
|
15
|
+
export { importModuleFile } from './ts-import.js';
|
|
12
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AACnF,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,GAC7B,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACpD,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AACtC,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EACL,iBAAiB,EACjB,KAAK,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,UAAU,EACV,UAAU,EACV,WAAW,GACZ,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAA;AACnF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/key-clause.d.ts
CHANGED
package/dist/key-clause.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-clause.d.ts","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgD1D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"key-clause.d.ts","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgD1D;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,EAAE,CAE1E"}
|
package/dist/key-clause.js
CHANGED
|
@@ -42,6 +42,6 @@ export function splitTopLevelComma(input) {
|
|
|
42
42
|
return out;
|
|
43
43
|
}
|
|
44
44
|
export function normalizeKeyColumns(values) {
|
|
45
|
-
return values.flatMap((value) => splitTopLevelComma(value.trim()));
|
|
45
|
+
return (values ?? []).flatMap((value) => splitTopLevelComma(value.trim()));
|
|
46
46
|
}
|
|
47
47
|
//# sourceMappingURL=key-clause.js.map
|
package/dist/key-clause.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"key-clause.js","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,KAAK,GAA2B,IAAI,CAAA;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEtC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,IAAI,CAAA;YACf,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI;gBAAE,KAAK,GAAG,IAAI,CAAA;YACjD,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjD,KAAK,GAAG,IAAI,CAAA;YACZ,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,CAAA;YACV,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YAC9B,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;YAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACrC,OAAO,GAAG,EAAE,CAAA;YACZ,SAAQ;QACV,CAAC;QAED,OAAO,IAAI,IAAI,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEnC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,
|
|
1
|
+
{"version":3,"file":"key-clause.js","sourceRoot":"","sources":["../src/key-clause.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,OAAO,GAAG,EAAE,CAAA;IAChB,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,KAAK,GAA2B,IAAI,CAAA;IAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAC3B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAEtC,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,IAAI,IAAI,CAAA;YACf,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI;gBAAE,KAAK,GAAG,IAAI,CAAA;YACjD,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjD,KAAK,GAAG,IAAI,CAAA;YACZ,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,IAAI,CAAC,CAAA;YACV,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;YAC9B,OAAO,IAAI,IAAI,CAAA;YACf,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,KAAK,GAAG,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;YAC5B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACrC,OAAO,GAAG,EAAE,CAAA;YACZ,SAAQ;QACV,CAAC;QAED,OAAO,IAAI,IAAI,CAAA;IACjB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAEnC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAA4B;IAC9D,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;AAC5E,CAAC"}
|
package/dist/model-types.d.ts
CHANGED
|
@@ -1,4 +1,41 @@
|
|
|
1
1
|
export type PrimitiveColumnType = 'String' | 'UInt8' | 'UInt16' | 'UInt32' | 'UInt64' | 'UInt128' | 'UInt256' | 'Int8' | 'Int16' | 'Int32' | 'Int64' | 'Int128' | 'Int256' | 'Float32' | 'Float64' | 'Bool' | 'Boolean' | 'Date' | 'DateTime' | 'DateTime64';
|
|
2
|
+
/**
|
|
3
|
+
* General-purpose compression codecs. Exactly one ends a codec chain.
|
|
4
|
+
* Level ranges: LZ4HC 1–12 (default 9), ZSTD 1–22 (default 1).
|
|
5
|
+
*/
|
|
6
|
+
export type GeneralColumnCodec = {
|
|
7
|
+
kind: 'NONE' | 'LZ4' | 'T64' | 'GCD' | 'ALP';
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'LZ4HC';
|
|
10
|
+
level?: number;
|
|
11
|
+
} | {
|
|
12
|
+
kind: 'ZSTD';
|
|
13
|
+
level?: number;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Preprocessing codecs (zero or more) placed before the general codec.
|
|
17
|
+
* `size` (bytes) defaults to 1 in ClickHouse for Delta / DoubleDelta / Gorilla.
|
|
18
|
+
*/
|
|
19
|
+
export type PreprocessingColumnCodec = {
|
|
20
|
+
kind: 'Delta' | 'DoubleDelta' | 'Gorilla';
|
|
21
|
+
size?: 1 | 2 | 4 | 8;
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'FPC';
|
|
24
|
+
level: number;
|
|
25
|
+
floatSize: 4 | 8;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Escape hatch — passes the raw expression through unchanged. Useful for
|
|
29
|
+
* codecs we haven't typed (new CH versions, experimental codecs) or unusual
|
|
30
|
+
* arg shapes. Canonicalization is whitespace-only; round-trip may be noisy.
|
|
31
|
+
*/
|
|
32
|
+
export interface RawColumnCodec {
|
|
33
|
+
kind: 'raw';
|
|
34
|
+
expression: string;
|
|
35
|
+
}
|
|
36
|
+
export type ColumnCodec = GeneralColumnCodec | PreprocessingColumnCodec | RawColumnCodec;
|
|
37
|
+
/** Single codec or a chain (preprocessors then exactly one general codec). */
|
|
38
|
+
export type ColumnCodecSpec = ColumnCodec | ColumnCodec[];
|
|
2
39
|
export interface ColumnDefinition {
|
|
3
40
|
name: string;
|
|
4
41
|
type: PrimitiveColumnType | string;
|
|
@@ -6,17 +43,51 @@ export interface ColumnDefinition {
|
|
|
6
43
|
nullable?: boolean;
|
|
7
44
|
default?: string | number | boolean;
|
|
8
45
|
comment?: string;
|
|
46
|
+
codec?: ColumnCodecSpec;
|
|
9
47
|
}
|
|
10
|
-
|
|
48
|
+
interface SkipIndexBase {
|
|
11
49
|
name: string;
|
|
12
50
|
expression: string;
|
|
13
|
-
type: 'minmax' | 'set' | 'bloom_filter' | 'tokenbf_v1' | 'ngrambf_v1';
|
|
14
51
|
granularity: number;
|
|
15
52
|
}
|
|
53
|
+
/**
|
|
54
|
+
* Skip index with structured, discriminated args per type. Arg signatures
|
|
55
|
+
* come from ClickHouse MergeTree docs:
|
|
56
|
+
* - `minmax` — no args
|
|
57
|
+
* - `set(max_rows)` — required int, 0 = store all unique values
|
|
58
|
+
* - `bloom_filter([false_positive_rate])` — optional float, default 0.025
|
|
59
|
+
* - `tokenbf_v1(size_bytes, n_hash, seed)` — 3 required ints
|
|
60
|
+
* - `ngrambf_v1(n, size_bytes, n_hash, seed)` — 4 required ints
|
|
61
|
+
*
|
|
62
|
+
* ClickHouse 26+ requires `set(0)` not bare `set`; `maxRows` is required
|
|
63
|
+
* so this is encoded naturally.
|
|
64
|
+
*/
|
|
65
|
+
export type SkipIndexDefinition = SkipIndexBase & ({
|
|
66
|
+
type: 'minmax';
|
|
67
|
+
} | {
|
|
68
|
+
type: 'set';
|
|
69
|
+
maxRows: number;
|
|
70
|
+
} | {
|
|
71
|
+
type: 'bloom_filter';
|
|
72
|
+
falsePositiveRate?: number;
|
|
73
|
+
} | {
|
|
74
|
+
type: 'tokenbf_v1';
|
|
75
|
+
sizeBytes: number;
|
|
76
|
+
hashFunctions: number;
|
|
77
|
+
randomSeed: number;
|
|
78
|
+
} | {
|
|
79
|
+
type: 'ngrambf_v1';
|
|
80
|
+
ngramSize: number;
|
|
81
|
+
sizeBytes: number;
|
|
82
|
+
hashFunctions: number;
|
|
83
|
+
randomSeed: number;
|
|
84
|
+
});
|
|
16
85
|
export interface ProjectionDefinition {
|
|
17
86
|
name: string;
|
|
18
87
|
query: string;
|
|
19
88
|
}
|
|
89
|
+
export interface TablePlugins {
|
|
90
|
+
}
|
|
20
91
|
export interface TableDefinition {
|
|
21
92
|
kind: 'table';
|
|
22
93
|
database: string;
|
|
@@ -36,6 +107,7 @@ export interface TableDefinition {
|
|
|
36
107
|
indexes?: SkipIndexDefinition[];
|
|
37
108
|
projections?: ProjectionDefinition[];
|
|
38
109
|
comment?: string;
|
|
110
|
+
plugins?: TablePlugins;
|
|
39
111
|
}
|
|
40
112
|
export interface ViewDefinition {
|
|
41
113
|
kind: 'view';
|
|
@@ -44,6 +116,19 @@ export interface ViewDefinition {
|
|
|
44
116
|
as: string;
|
|
45
117
|
comment?: string;
|
|
46
118
|
}
|
|
119
|
+
export interface MaterializedViewRefresh {
|
|
120
|
+
every?: string;
|
|
121
|
+
after?: string;
|
|
122
|
+
offset?: string;
|
|
123
|
+
randomize?: string;
|
|
124
|
+
dependsOn?: Array<{
|
|
125
|
+
database: string;
|
|
126
|
+
name: string;
|
|
127
|
+
}>;
|
|
128
|
+
settings?: Record<string, string | number>;
|
|
129
|
+
append?: boolean;
|
|
130
|
+
empty?: boolean;
|
|
131
|
+
}
|
|
47
132
|
export interface MaterializedViewDefinition {
|
|
48
133
|
kind: 'materialized_view';
|
|
49
134
|
database: string;
|
|
@@ -52,6 +137,7 @@ export interface MaterializedViewDefinition {
|
|
|
52
137
|
database: string;
|
|
53
138
|
name: string;
|
|
54
139
|
};
|
|
140
|
+
refresh?: MaterializedViewRefresh;
|
|
55
141
|
as: string;
|
|
56
142
|
comment?: string;
|
|
57
143
|
}
|
|
@@ -60,6 +146,13 @@ export interface ChxCheckConfig {
|
|
|
60
146
|
failOnPending?: boolean;
|
|
61
147
|
failOnChecksumMismatch?: boolean;
|
|
62
148
|
failOnDrift?: boolean;
|
|
149
|
+
/**
|
|
150
|
+
* Treat objects that exist in ClickHouse but are not in your schema
|
|
151
|
+
* (`extra_object`) as drift. Defaults to `false` so chkit coexists with
|
|
152
|
+
* unmanaged tables on a shared database — only opt in when chkit is expected
|
|
153
|
+
* to own the entire database.
|
|
154
|
+
*/
|
|
155
|
+
failOnExtraObjects?: boolean;
|
|
63
156
|
}
|
|
64
157
|
export interface ChxSafetyConfig {
|
|
65
158
|
allowDestructive?: boolean;
|
|
@@ -70,6 +163,14 @@ export interface ChxUserClickHouseConfig {
|
|
|
70
163
|
password?: string;
|
|
71
164
|
database?: string;
|
|
72
165
|
secure?: boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Cluster name for self-managed multi-node clusters. When set, chkit emits
|
|
168
|
+
* `ON CLUSTER <name>` on generated DDL and stores its migration journal in a
|
|
169
|
+
* replicated engine. Leave unset for single-node, ClickHouse Cloud, or
|
|
170
|
+
* ObsessionDB (SharedMergeTree auto-replicates — `ON CLUSTER` is unnecessary).
|
|
171
|
+
* Accepts an identifier (e.g. `"my_cluster"`) or a macro (e.g. `"{cluster}"`).
|
|
172
|
+
*/
|
|
173
|
+
cluster?: string;
|
|
73
174
|
}
|
|
74
175
|
export interface ChxResolvedClickHouseConfig {
|
|
75
176
|
url: string;
|
|
@@ -77,12 +178,7 @@ export interface ChxResolvedClickHouseConfig {
|
|
|
77
178
|
password: string;
|
|
78
179
|
database: string;
|
|
79
180
|
secure: boolean;
|
|
80
|
-
|
|
81
|
-
export interface ChxLegacyPluginRegistration {
|
|
82
|
-
resolve: string;
|
|
83
|
-
name?: string;
|
|
84
|
-
enabled?: boolean;
|
|
85
|
-
options?: Record<string, unknown>;
|
|
181
|
+
cluster?: string;
|
|
86
182
|
}
|
|
87
183
|
export interface ChxInlinePluginRegistration<TPlugin = unknown, TOptions extends object = Record<string, unknown>> {
|
|
88
184
|
plugin: TPlugin;
|
|
@@ -90,7 +186,7 @@ export interface ChxInlinePluginRegistration<TPlugin = unknown, TOptions extends
|
|
|
90
186
|
enabled?: boolean;
|
|
91
187
|
options?: TOptions;
|
|
92
188
|
}
|
|
93
|
-
export type ChxPluginRegistration =
|
|
189
|
+
export type ChxPluginRegistration = ChxInlinePluginRegistration;
|
|
94
190
|
export interface ChxUserConfig {
|
|
95
191
|
schema: string | string[];
|
|
96
192
|
outDir?: string;
|
|
@@ -126,7 +222,7 @@ export interface SnapshotV1 {
|
|
|
126
222
|
}
|
|
127
223
|
export type Snapshot = SnapshotV1;
|
|
128
224
|
export type RiskLevel = 'safe' | 'caution' | 'danger';
|
|
129
|
-
export type MigrationOperationType = 'create_database' | 'create_table' | 'drop_table' | 'create_view' | 'drop_view' | 'create_materialized_view' | 'drop_materialized_view' | 'alter_table_add_column' | 'alter_table_modify_column' | 'alter_table_drop_column' | 'alter_table_rename_column' | 'alter_table_rename_table' | 'alter_table_add_index' | 'alter_table_add_projection' | 'alter_table_modify_setting' | 'alter_table_drop_index' | 'alter_table_drop_projection' | 'alter_table_reset_setting' | 'alter_table_modify_ttl';
|
|
225
|
+
export type MigrationOperationType = 'create_database' | 'create_table' | 'drop_table' | 'create_view' | 'drop_view' | 'create_materialized_view' | 'drop_materialized_view' | 'alter_materialized_view_modify_refresh' | 'alter_table_add_column' | 'alter_table_modify_column' | 'alter_table_drop_column' | 'alter_table_rename_column' | 'alter_table_rename_table' | 'alter_table_add_index' | 'alter_table_add_projection' | 'alter_table_modify_setting' | 'alter_table_drop_index' | 'alter_table_drop_projection' | 'alter_table_reset_setting' | 'alter_table_modify_ttl';
|
|
130
226
|
export interface MigrationOperation {
|
|
131
227
|
type: MigrationOperationType;
|
|
132
228
|
key: string;
|
|
@@ -150,7 +246,7 @@ export interface MigrationPlan {
|
|
|
150
246
|
riskSummary: Record<RiskLevel, number>;
|
|
151
247
|
renameSuggestions: ColumnRenameSuggestion[];
|
|
152
248
|
}
|
|
153
|
-
export type ValidationIssueCode = 'duplicate_object_name' | 'duplicate_column_name' | 'duplicate_index_name' | 'duplicate_projection_name' | 'primary_key_missing_column' | 'order_by_missing_column';
|
|
249
|
+
export type ValidationIssueCode = 'duplicate_object_name' | 'duplicate_column_name' | 'duplicate_index_name' | 'duplicate_projection_name' | 'primary_key_missing_column' | 'order_by_missing_column' | 'refresh_requires_every_or_after' | 'refresh_every_after_mutually_exclusive' | 'refresh_interval_format' | 'refresh_append_required_for_replicated_target' | 'refresh_depends_on_requires_every' | 'codec_chain_must_end_with_general' | 'codec_chain_multiple_general' | 'codec_chain_empty';
|
|
154
250
|
export interface ValidationIssue {
|
|
155
251
|
code: ValidationIssueCode;
|
|
156
252
|
kind: SchemaDefinition['kind'];
|
|
@@ -158,4 +254,5 @@ export interface ValidationIssue {
|
|
|
158
254
|
name: string;
|
|
159
255
|
message: string;
|
|
160
256
|
}
|
|
257
|
+
export {};
|
|
161
258
|
//# sourceMappingURL=model-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-types.d.ts","sourceRoot":"","sources":["../src/model-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,OAAO,GACP,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,SAAS,GACT,MAAM,GACN,UAAU,GACV,YAAY,CAAA;AAEhB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,mBAAmB,GAAG,MAAM,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IACnC,OAAO,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"model-types.d.ts","sourceRoot":"","sources":["../src/model-types.ts"],"names":[],"mappings":"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"}
|
package/dist/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,kBAAkB,CAAA;AAEzB,cAAc,kBAAkB,CAAA;AAEhC,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;gBAEtB,MAAM,EAAE,eAAe,EAAE;CAOtC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;AACnE,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,aAAa,EACb,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,cAAc,EACf,MAAM,kBAAkB,CAAA;AAEzB,cAAc,kBAAkB,CAAA;AAEhC,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;gBAEtB,MAAM,EAAE,eAAe,EAAE;CAOtC;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAA;AACnE,wBAAgB,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAoB7F,wBAAgB,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,CAiCtE;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG,eAAe,CAE3E;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,cAAc,CAExE;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,IAAI,CAAC,0BAA0B,EAAE,MAAM,CAAC,GAC9C,0BAA0B,CAE5B;AAED,wBAAgB,MAAM,CAAC,GAAG,WAAW,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAI5E"}
|
package/dist/model.js
CHANGED
|
@@ -11,6 +11,17 @@ export class ChxValidationError extends Error {
|
|
|
11
11
|
export function defineConfig(config) {
|
|
12
12
|
return config;
|
|
13
13
|
}
|
|
14
|
+
// A cluster name is interpolated into `ON CLUSTER '<name>'`, so constrain it to
|
|
15
|
+
// the characters legal in a `remote_servers` key (an XML element name: letters,
|
|
16
|
+
// digits, `_`, `-`, `.`) or a `{macro}` — injection-safe inside the single
|
|
17
|
+
// quotes, while still failing fast on typos like quotes or whitespace.
|
|
18
|
+
const CLUSTER_NAME_PATTERN = /^([A-Za-z_][A-Za-z0-9_.-]*|\{[A-Za-z_][A-Za-z0-9_]*\})$/;
|
|
19
|
+
function assertValidClusterName(name) {
|
|
20
|
+
if (!CLUSTER_NAME_PATTERN.test(name)) {
|
|
21
|
+
throw new Error(`Invalid clickhouse.cluster "${name}". Expected a cluster name (e.g. "my_cluster", "prod-eu-1") or a macro (e.g. "{cluster}").`);
|
|
22
|
+
}
|
|
23
|
+
return name;
|
|
24
|
+
}
|
|
14
25
|
export function resolveConfig(config) {
|
|
15
26
|
const outDir = config.outDir ?? './chkit';
|
|
16
27
|
const migrationsDir = config.migrationsDir ?? join(outDir, 'migrations');
|
|
@@ -25,6 +36,7 @@ export function resolveConfig(config) {
|
|
|
25
36
|
failOnPending: config.check?.failOnPending ?? true,
|
|
26
37
|
failOnChecksumMismatch: config.check?.failOnChecksumMismatch ?? true,
|
|
27
38
|
failOnDrift: config.check?.failOnDrift ?? true,
|
|
39
|
+
failOnExtraObjects: config.check?.failOnExtraObjects ?? false,
|
|
28
40
|
},
|
|
29
41
|
safety: {
|
|
30
42
|
allowDestructive: config.safety?.allowDestructive ?? false,
|
|
@@ -36,6 +48,9 @@ export function resolveConfig(config) {
|
|
|
36
48
|
password: config.clickhouse.password ?? '',
|
|
37
49
|
database: config.clickhouse.database ?? 'default',
|
|
38
50
|
secure: config.clickhouse.secure ?? false,
|
|
51
|
+
cluster: config.clickhouse.cluster
|
|
52
|
+
? assertValidClusterName(config.clickhouse.cluster)
|
|
53
|
+
: undefined,
|
|
39
54
|
}
|
|
40
55
|
: undefined,
|
|
41
56
|
};
|
package/dist/model.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAchC,cAAc,kBAAkB,CAAA;AAEhC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,MAAM,CAAmB;IAElC,YAAY,MAAyB;QACnC,KAAK,CACH,iCAAiC,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CACxF,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAID,MAAM,UAAU,YAAY,CAA0B,MAAyB;IAC7E,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,CAAA;IACzC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QACtE,MAAM;QACN,aAAa;QACb,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,KAAK,EAAE;YACL,aAAa,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,IAAI;YAClD,sBAAsB,EAAE,MAAM,CAAC,KAAK,EAAE,sBAAsB,IAAI,IAAI;YACpE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI;
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAchC,cAAc,kBAAkB,CAAA;AAEhC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,MAAM,CAAmB;IAElC,YAAY,MAAyB;QACnC,KAAK,CACH,iCAAiC,MAAM,CAAC,MAAM,SAAS,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CACxF,CAAA;QACD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAID,MAAM,UAAU,YAAY,CAA0B,MAAyB;IAC7E,OAAO,MAAM,CAAA;AACf,CAAC;AAED,gFAAgF;AAChF,gFAAgF;AAChF,2EAA2E;AAC3E,uEAAuE;AACvE,MAAM,oBAAoB,GAAG,yDAAyD,CAAA;AAEtF,SAAS,sBAAsB,CAAC,IAAY;IAC1C,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,IAAI,KAAK,CACb,+BAA+B,IAAI,4FAA4F,CAChI,CAAA;IACH,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAqB;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,CAAA;IACzC,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACxE,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QACtE,MAAM;QACN,aAAa;QACb,OAAO;QACP,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE;QAC7B,KAAK,EAAE;YACL,aAAa,EAAE,MAAM,CAAC,KAAK,EAAE,aAAa,IAAI,IAAI;YAClD,sBAAsB,EAAE,MAAM,CAAC,KAAK,EAAE,sBAAsB,IAAI,IAAI;YACpE,WAAW,EAAE,MAAM,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI;YAC9C,kBAAkB,EAAE,MAAM,CAAC,KAAK,EAAE,kBAAkB,IAAI,KAAK;SAC9D;QACD,MAAM,EAAE;YACN,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,IAAI,KAAK;SAC3D;QACD,UAAU,EAAE,MAAM,CAAC,UAAU;YAC3B,CAAC,CAAC;gBACE,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG;gBAC1B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,SAAS;gBACjD,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE;gBAC1C,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ,IAAI,SAAS;gBACjD,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK;gBACzC,OAAO,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO;oBAChC,CAAC,CAAC,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC;oBACnD,CAAC,CAAC,SAAS;aACd;YACH,CAAC,CAAC,SAAS;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,KAAoC;IACxD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAmC;IACtD,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,KAA+C;IAE/C,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAA;AAChD,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAG,WAA+B;IACvD,OAAO,WAAW,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IACrD,MAAM,IAAI,GAAI,KAA2B,CAAC,IAAI,CAAA;IAC9C,OAAO,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,mBAAmB,CAAA;AAC5E,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { MigrationPlan } from './model-types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Renders ` ON CLUSTER '<name>'`, or `''` when cluster mode is off. The name is
|
|
4
|
+
* validated at config resolution (`assertValidClusterName`), so it is safe to
|
|
5
|
+
* interpolate. Single-quoted so the `{cluster}` macro form also works.
|
|
6
|
+
*/
|
|
7
|
+
export declare function onClusterClause(cluster: string | undefined): string;
|
|
8
|
+
/**
|
|
9
|
+
* Injects `ON CLUSTER <name>` into every DDL statement of a migration plan (and
|
|
10
|
+
* the rename-suggestion confirmations). No-op when `cluster` is undefined.
|
|
11
|
+
*
|
|
12
|
+
* Done as a post-pass over the already-rendered SQL so the planner and renderers
|
|
13
|
+
* stay cluster-agnostic — `ON CLUSTER` is an execution directive, never part of
|
|
14
|
+
* the schema model or drift comparison.
|
|
15
|
+
*/
|
|
16
|
+
export declare function applyOnClusterToPlan(plan: MigrationPlan, cluster: string | undefined): MigrationPlan;
|
|
17
|
+
//# sourceMappingURL=on-cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"on-cluster.d.ts","sourceRoot":"","sources":["../src/on-cluster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAkDrD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEnE;AA4CD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,aAAa,CAcf"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
// DDL statement prefixes where `ON CLUSTER` goes immediately after the object
|
|
2
|
+
// reference that follows the prefix. Anything not matched here (or by the
|
|
3
|
+
// trailing-anchor list below) is left untouched — e.g. plugin-emitted SQL.
|
|
4
|
+
//
|
|
5
|
+
// Anchors are the bare verb + object keyword, WITHOUT the `IF [NOT] EXISTS`
|
|
6
|
+
// guard: `injectOnClusterClause` skips an optional guard when locating the
|
|
7
|
+
// object reference, so both `DROP TABLE db.t` and `DROP TABLE IF EXISTS db.t`
|
|
8
|
+
// are handled by the single `DROP TABLE` anchor. This is what keeps the list
|
|
9
|
+
// resilient — a future statement is covered whether or not it carries a guard.
|
|
10
|
+
//
|
|
11
|
+
// The first group is what the planner + plan-pipeline emit today. The second is
|
|
12
|
+
// NOT emitted by chkit yet: it's a forward-compatible safety net so injection
|
|
13
|
+
// already works if a future command starts producing these statements. Every
|
|
14
|
+
// entry shares the same placement rule (clause right after the object
|
|
15
|
+
// identifier); placements confirmed against the ClickHouse SQL reference.
|
|
16
|
+
const ON_CLUSTER_ANCHORS = [
|
|
17
|
+
// --- Emitted by chkit today ---
|
|
18
|
+
'CREATE TABLE',
|
|
19
|
+
'CREATE VIEW',
|
|
20
|
+
'CREATE MATERIALIZED VIEW',
|
|
21
|
+
'CREATE DATABASE',
|
|
22
|
+
'ALTER TABLE',
|
|
23
|
+
'DROP TABLE',
|
|
24
|
+
'DROP VIEW',
|
|
25
|
+
// --- Not emitted by chkit yet; kept as a forward-compatible safety net ---
|
|
26
|
+
'CREATE DICTIONARY',
|
|
27
|
+
'CREATE FUNCTION',
|
|
28
|
+
'DROP DATABASE',
|
|
29
|
+
'DROP DICTIONARY',
|
|
30
|
+
'ATTACH TABLE',
|
|
31
|
+
'DETACH TABLE',
|
|
32
|
+
'TRUNCATE TABLE',
|
|
33
|
+
'OPTIMIZE TABLE',
|
|
34
|
+
];
|
|
35
|
+
// Statements where `ON CLUSTER` goes at the very END, after the full object
|
|
36
|
+
// list — not after the first name. RENAME and EXCHANGE take multiple object
|
|
37
|
+
// references (`a TO b`, `a AND b`), so the clause can only be appended. Only
|
|
38
|
+
// `RENAME TABLE` is emitted by chkit today; the rest are the same-family
|
|
39
|
+
// safety net described above.
|
|
40
|
+
const ON_CLUSTER_TRAILING_ANCHORS = [
|
|
41
|
+
'RENAME TABLE',
|
|
42
|
+
'RENAME DATABASE',
|
|
43
|
+
'RENAME DICTIONARY',
|
|
44
|
+
'EXCHANGE TABLES',
|
|
45
|
+
'EXCHANGE DICTIONARIES',
|
|
46
|
+
];
|
|
47
|
+
/**
|
|
48
|
+
* Renders ` ON CLUSTER '<name>'`, or `''` when cluster mode is off. The name is
|
|
49
|
+
* validated at config resolution (`assertValidClusterName`), so it is safe to
|
|
50
|
+
* interpolate. Single-quoted so the `{cluster}` macro form also works.
|
|
51
|
+
*/
|
|
52
|
+
export function onClusterClause(cluster) {
|
|
53
|
+
return cluster ? ` ON CLUSTER '${cluster}'` : '';
|
|
54
|
+
}
|
|
55
|
+
// An optional `IF NOT EXISTS` / `IF EXISTS` guard sitting between the anchor
|
|
56
|
+
// keyword and the object reference. Preserved verbatim so the clause lands after
|
|
57
|
+
// the object, never after the guard.
|
|
58
|
+
const OBJECT_GUARD = /^IF\s+(?:NOT\s+)?EXISTS\s+/i;
|
|
59
|
+
// Idempotency is checked positionally — an `ON CLUSTER` clause sitting exactly
|
|
60
|
+
// where injection would place it — never by scanning the whole statement, so
|
|
61
|
+
// user-authored content (a column COMMENT, a view's SELECT body) containing the
|
|
62
|
+
// words "on cluster" cannot suppress injection.
|
|
63
|
+
const ON_CLUSTER_AT_REF = /^\s+ON\s+CLUSTER\b/i;
|
|
64
|
+
const ON_CLUSTER_AT_END = /\bON\s+CLUSTER\s+\S+\s*$/i;
|
|
65
|
+
function injectOnClusterClause(sql, clause) {
|
|
66
|
+
// RENAME/EXCHANGE are the exception: ClickHouse places `ON CLUSTER` after the
|
|
67
|
+
// full object list (at the very end), not after the first name.
|
|
68
|
+
for (const anchor of ON_CLUSTER_TRAILING_ANCHORS) {
|
|
69
|
+
if (!sql.startsWith(`${anchor} `))
|
|
70
|
+
continue;
|
|
71
|
+
const body = sql.endsWith(';') ? sql.slice(0, -1) : sql;
|
|
72
|
+
// Idempotent: a trailing clause means the statement already targets a cluster.
|
|
73
|
+
if (ON_CLUSTER_AT_END.test(body))
|
|
74
|
+
return sql;
|
|
75
|
+
return sql.endsWith(';') ? `${body}${clause};` : `${body}${clause}`;
|
|
76
|
+
}
|
|
77
|
+
for (const anchor of ON_CLUSTER_ANCHORS) {
|
|
78
|
+
if (!sql.startsWith(`${anchor} `))
|
|
79
|
+
continue;
|
|
80
|
+
const rest = sql.slice(anchor.length + 1);
|
|
81
|
+
// Skip a leading `IF [NOT] EXISTS` guard, if any, so the clause is placed
|
|
82
|
+
// after the object reference regardless of whether the statement carries it.
|
|
83
|
+
const guard = rest.match(OBJECT_GUARD)?.[0] ?? '';
|
|
84
|
+
const afterGuard = rest.slice(guard.length);
|
|
85
|
+
// The object reference (`db.name` or `db`) is the run of characters up to
|
|
86
|
+
// the next space, `;`, or `(` — `ON CLUSTER` slots in right after it.
|
|
87
|
+
const ref = afterGuard.match(/^[^\s;(]+/)?.[0];
|
|
88
|
+
if (!ref)
|
|
89
|
+
return sql;
|
|
90
|
+
const afterRef = afterGuard.slice(ref.length);
|
|
91
|
+
// Idempotent: never double-inject into a statement that already carries the
|
|
92
|
+
// clause here (a plan re-run through this pass, or cluster-aware plugin SQL).
|
|
93
|
+
if (ON_CLUSTER_AT_REF.test(afterRef))
|
|
94
|
+
return sql;
|
|
95
|
+
return `${anchor} ${guard}${ref}${clause}${afterRef}`;
|
|
96
|
+
}
|
|
97
|
+
return sql;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Injects `ON CLUSTER <name>` into every DDL statement of a migration plan (and
|
|
101
|
+
* the rename-suggestion confirmations). No-op when `cluster` is undefined.
|
|
102
|
+
*
|
|
103
|
+
* Done as a post-pass over the already-rendered SQL so the planner and renderers
|
|
104
|
+
* stay cluster-agnostic — `ON CLUSTER` is an execution directive, never part of
|
|
105
|
+
* the schema model or drift comparison.
|
|
106
|
+
*/
|
|
107
|
+
export function applyOnClusterToPlan(plan, cluster) {
|
|
108
|
+
if (!cluster)
|
|
109
|
+
return plan;
|
|
110
|
+
const clause = onClusterClause(cluster);
|
|
111
|
+
return {
|
|
112
|
+
...plan,
|
|
113
|
+
operations: plan.operations.map((operation) => ({
|
|
114
|
+
...operation,
|
|
115
|
+
sql: injectOnClusterClause(operation.sql, clause),
|
|
116
|
+
})),
|
|
117
|
+
renameSuggestions: plan.renameSuggestions.map((suggestion) => ({
|
|
118
|
+
...suggestion,
|
|
119
|
+
confirmationSQL: injectOnClusterClause(suggestion.confirmationSQL, clause),
|
|
120
|
+
})),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=on-cluster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"on-cluster.js","sourceRoot":"","sources":["../src/on-cluster.ts"],"names":[],"mappings":"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"}
|
package/dist/planner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMV,aAAa,EAEb,gBAAgB,EAEjB,MAAM,YAAY,CAAA;AAgdnB,wBAAgB,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAqG9G"}
|