@chkit/core 0.1.2-beta.5 → 0.2.0-beta.11

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.
Files changed (93) hide show
  1. package/README.md +26 -6
  2. package/dist/canonical.d.ts.map +1 -1
  3. package/dist/canonical.js +63 -7
  4. package/dist/canonical.js.map +1 -1
  5. package/dist/column-default.d.ts +62 -0
  6. package/dist/column-default.d.ts.map +1 -0
  7. package/dist/column-default.js +212 -0
  8. package/dist/column-default.js.map +1 -0
  9. package/dist/conflict-markers.d.ts +3 -0
  10. package/dist/conflict-markers.d.ts.map +1 -0
  11. package/dist/conflict-markers.js +9 -0
  12. package/dist/conflict-markers.js.map +1 -0
  13. package/dist/identifier.d.ts +22 -0
  14. package/dist/identifier.d.ts.map +1 -0
  15. package/dist/identifier.js +69 -0
  16. package/dist/identifier.js.map +1 -0
  17. package/dist/index.d.ts +10 -3
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +10 -3
  20. package/dist/index.js.map +1 -1
  21. package/dist/insert-columns.d.ts +13 -0
  22. package/dist/insert-columns.d.ts.map +1 -0
  23. package/dist/insert-columns.js +36 -0
  24. package/dist/insert-columns.js.map +1 -0
  25. package/dist/kafka.d.ts +9 -0
  26. package/dist/kafka.d.ts.map +1 -0
  27. package/dist/kafka.js +64 -0
  28. package/dist/kafka.js.map +1 -0
  29. package/dist/key-clause.d.ts +6 -1
  30. package/dist/key-clause.d.ts.map +1 -1
  31. package/dist/key-clause.js +12 -13
  32. package/dist/key-clause.js.map +1 -1
  33. package/dist/model-types.d.ts +123 -7
  34. package/dist/model-types.d.ts.map +1 -1
  35. package/dist/model.d.ts +4 -2
  36. package/dist/model.d.ts.map +1 -1
  37. package/dist/model.js +13 -3
  38. package/dist/model.js.map +1 -1
  39. package/dist/object-dependencies.d.ts +18 -0
  40. package/dist/object-dependencies.d.ts.map +1 -0
  41. package/dist/object-dependencies.js +351 -0
  42. package/dist/object-dependencies.js.map +1 -0
  43. package/dist/on-cluster.d.ts.map +1 -1
  44. package/dist/on-cluster.js +18 -9
  45. package/dist/on-cluster.js.map +1 -1
  46. package/dist/planner.d.ts.map +1 -1
  47. package/dist/planner.js +144 -81
  48. package/dist/planner.js.map +1 -1
  49. package/dist/projection.d.ts.map +1 -1
  50. package/dist/projection.js +5 -40
  51. package/dist/projection.js.map +1 -1
  52. package/dist/schema-loader.d.ts +2 -0
  53. package/dist/schema-loader.d.ts.map +1 -1
  54. package/dist/schema-loader.js +72 -5
  55. package/dist/schema-loader.js.map +1 -1
  56. package/dist/sql-lexer.d.ts +29 -0
  57. package/dist/sql-lexer.d.ts.map +1 -0
  58. package/dist/sql-lexer.js +220 -0
  59. package/dist/sql-lexer.js.map +1 -0
  60. package/dist/sql-normalizer.d.ts +48 -0
  61. package/dist/sql-normalizer.d.ts.map +1 -1
  62. package/dist/sql-normalizer.js +118 -1
  63. package/dist/sql-normalizer.js.map +1 -1
  64. package/dist/sql-scan.d.ts +20 -0
  65. package/dist/sql-scan.d.ts.map +1 -0
  66. package/dist/sql-scan.js +82 -0
  67. package/dist/sql-scan.js.map +1 -0
  68. package/dist/sql-splitter.d.ts.map +1 -1
  69. package/dist/sql-splitter.js +52 -5
  70. package/dist/sql-splitter.js.map +1 -1
  71. package/dist/sql.d.ts +9 -1
  72. package/dist/sql.d.ts.map +1 -1
  73. package/dist/sql.js +95 -36
  74. package/dist/sql.js.map +1 -1
  75. package/dist/text-index-sql.d.ts +6 -0
  76. package/dist/text-index-sql.d.ts.map +1 -0
  77. package/dist/text-index-sql.js +200 -0
  78. package/dist/text-index-sql.js.map +1 -0
  79. package/dist/text-index.d.ts +10 -0
  80. package/dist/text-index.d.ts.map +1 -0
  81. package/dist/text-index.js +121 -0
  82. package/dist/text-index.js.map +1 -0
  83. package/dist/ts-import.d.ts.map +1 -1
  84. package/dist/ts-import.js +23 -3
  85. package/dist/ts-import.js.map +1 -1
  86. package/dist/validate.d.ts.map +1 -1
  87. package/dist/validate.js +350 -3
  88. package/dist/validate.js.map +1 -1
  89. package/package.json +1 -1
  90. package/dist/utils.d.ts +0 -2
  91. package/dist/utils.d.ts.map +0 -1
  92. package/dist/utils.js +0 -2
  93. package/dist/utils.js.map +0 -1
package/dist/model.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ChxConfigFn, ChxResolvedConfig, ChxUserConfig, MaterializedViewDefinition, SchemaDefinition, TableDefinition, ValidationIssue, ViewDefinition } from './model-types.js';
1
+ import type { ChxConfigFn, ChxResolvedConfig, ChxUserConfig, DictionaryDefinition, KafkaTableInput, MaterializedViewDefinition, SchemaDefinition, TableDefinition, TableInput, ValidationIssue, ViewDefinition } from './model-types.js';
2
2
  export * from './model-types.js';
3
3
  export declare class ChxValidationError extends Error {
4
4
  readonly issues: ValidationIssue[];
@@ -7,9 +7,11 @@ export declare class ChxValidationError extends Error {
7
7
  export declare function defineConfig<T extends ChxUserConfig>(config: T): T;
8
8
  export declare function defineConfig<T extends ChxUserConfig>(config: ChxConfigFn<T>): ChxConfigFn<T>;
9
9
  export declare function resolveConfig(config: ChxUserConfig): ChxResolvedConfig;
10
- export declare function table(input: Omit<TableDefinition, 'kind'>): TableDefinition;
10
+ export declare function table(input: KafkaTableInput): TableDefinition;
11
+ export declare function table(input: TableInput): TableDefinition;
11
12
  export declare function view(input: Omit<ViewDefinition, 'kind'>): ViewDefinition;
12
13
  export declare function materializedView(input: Omit<MaterializedViewDefinition, 'kind'>): MaterializedViewDefinition;
14
+ export declare function dictionary(input: Omit<DictionaryDefinition, 'kind'>): DictionaryDefinition;
13
15
  export declare function schema(...definitions: SchemaDefinition[]): SchemaDefinition[];
14
16
  export declare function isSchemaDefinition(value: unknown): value is SchemaDefinition;
15
17
  //# sourceMappingURL=model.d.ts.map
@@ -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;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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,WAAW,EAEX,iBAAiB,EACjB,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,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,CAyCtE;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAAA;AAC9D,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,eAAe,CAAA;AAKzD,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,UAAU,CACxB,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,CAAC,GACxC,oBAAoB,CAEtB;AAED,wBAAgB,MAAM,CAAC,GAAG,WAAW,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,EAAE,CAE7E;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAM5E"}
package/dist/model.js CHANGED
@@ -26,8 +26,15 @@ export function resolveConfig(config) {
26
26
  const outDir = config.outDir ?? './chkit';
27
27
  const migrationsDir = config.migrationsDir ?? join(outDir, 'migrations');
28
28
  const metaDir = config.metaDir ?? join(outDir, 'meta');
29
+ const schemaGlobs = config.schema === undefined ? [] : Array.isArray(config.schema) ? config.schema : [config.schema];
30
+ if (config.entry !== undefined && schemaGlobs.length > 0) {
31
+ throw new Error('Config fields "entry" and "schema" are mutually exclusive. Use one project entry module or schema globs, not both.');
32
+ }
29
33
  return {
30
- schema: Array.isArray(config.schema) ? config.schema : [config.schema],
34
+ // In entry mode the entry module is the only schema source: its exported
35
+ // definitions are collected exactly like any other schema file.
36
+ schema: config.entry !== undefined ? [config.entry] : schemaGlobs,
37
+ entry: config.entry,
31
38
  outDir,
32
39
  migrationsDir,
33
40
  metaDir,
@@ -56,7 +63,7 @@ export function resolveConfig(config) {
56
63
  };
57
64
  }
58
65
  export function table(input) {
59
- return { ...input, kind: 'table' };
66
+ return { ...input, primaryKey: input.primaryKey ?? input.orderBy ?? [], orderBy: input.orderBy ?? [], kind: 'table' };
60
67
  }
61
68
  export function view(input) {
62
69
  return { ...input, kind: 'view' };
@@ -64,6 +71,9 @@ export function view(input) {
64
71
  export function materializedView(input) {
65
72
  return { ...input, kind: 'materialized_view' };
66
73
  }
74
+ export function dictionary(input) {
75
+ return { ...input, kind: 'dictionary' };
76
+ }
67
77
  export function schema(...definitions) {
68
78
  return definitions;
69
79
  }
@@ -71,6 +81,6 @@ export function isSchemaDefinition(value) {
71
81
  if (!value || typeof value !== 'object')
72
82
  return false;
73
83
  const kind = value.kind;
74
- return kind === 'table' || kind === 'view' || kind === 'materialized_view';
84
+ return (kind === 'table' || kind === 'view' || kind === 'materialized_view' || kind === 'dictionary');
75
85
  }
76
86
  //# sourceMappingURL=model.js.map
package/dist/model.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { SchemaDefinition } from './model.js';
2
+ /** Definition key → keys of the other definitions in the same set it references. */
3
+ export type DependencyGraph = ReadonlyMap<string, ReadonlySet<string>>;
4
+ /**
5
+ * Edges from every definition to the definitions it reads, restricted to the
6
+ * given set. Expects canonical definitions (`canonicalizeDefinitions`).
7
+ */
8
+ export declare function buildDependencyGraph(definitions: SchemaDefinition[]): DependencyGraph;
9
+ /**
10
+ * Stable topological order. Items whose prerequisites are all placed keep their
11
+ * input order; an item moves behind every prerequisite found in `items`.
12
+ * Members of a dependency cycle stay together in input order, and whatever
13
+ * depends on the cycle comes after all of them.
14
+ */
15
+ export declare function orderByDependencies<T>(items: readonly T[], keyOf: (item: T) => string, prerequisitesOf: (key: string) => Iterable<string>): T[];
16
+ /** Reverses every edge: key → keys of the definitions that reference it. */
17
+ export declare function invertDependencyGraph(graph: DependencyGraph): DependencyGraph;
18
+ //# sourceMappingURL=object-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-dependencies.d.ts","sourceRoot":"","sources":["../src/object-dependencies.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAwB,gBAAgB,EAAmB,MAAM,YAAY,CAAA;AAGzF,oFAAoF;AACpF,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAA;AA4BtE;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,gBAAgB,EAAE,GAAG,eAAe,CAmBrF;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,KAAK,EAAE,SAAS,CAAC,EAAE,EACnB,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,EAC1B,eAAe,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,CAAC,MAAM,CAAC,GACjD,CAAC,EAAE,CAgDL;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,eAAe,CAQ7E"}
@@ -0,0 +1,351 @@
1
+ import { definitionKey } from './canonical.js';
2
+ import { parseColumnDefault } from './column-default.js';
3
+ import { identifierName, isTrivia, stringLiteralValue, tokenizeSQL } from './sql-lexer.js';
4
+ // Functions whose first argument names a dictionary or Join table, plus the
5
+ // dictionary() table function.
6
+ const OBJECT_NAME_FUNCTION = /^(dictGet\w*|dictHas|dictIsIn|joinGet|joinGetOrNull|dictionary)$/i;
7
+ // `WITH TOTALS`, `WITH ROLLUP`, `WITH CUBE`, `WITH FILL` and `WITH TIES` are
8
+ // modifiers, not the start of a WITH list.
9
+ const WITH_MODIFIER = /^(totals|rollup|cube|fill|ties)$/i;
10
+ /**
11
+ * Edges from every definition to the definitions it reads, restricted to the
12
+ * given set. Expects canonical definitions (`canonicalizeDefinitions`).
13
+ */
14
+ export function buildDependencyGraph(definitions) {
15
+ const keysByName = new Map();
16
+ for (const def of definitions) {
17
+ const name = `${def.database}.${def.name}`;
18
+ keysByName.set(name, [...(keysByName.get(name) ?? []), definitionKey(def)]);
19
+ }
20
+ const graph = new Map();
21
+ for (const def of definitions) {
22
+ const key = definitionKey(def);
23
+ const edges = new Set();
24
+ for (const ref of definitionReferences(def)) {
25
+ for (const target of keysByName.get(`${ref.database}.${ref.name}`) ?? []) {
26
+ if (target !== key)
27
+ edges.add(target);
28
+ }
29
+ }
30
+ graph.set(key, edges);
31
+ }
32
+ return graph;
33
+ }
34
+ /**
35
+ * Stable topological order. Items whose prerequisites are all placed keep their
36
+ * input order; an item moves behind every prerequisite found in `items`.
37
+ * Members of a dependency cycle stay together in input order, and whatever
38
+ * depends on the cycle comes after all of them.
39
+ */
40
+ export function orderByDependencies(items, keyOf, prerequisitesOf) {
41
+ const indexesByKey = new Map();
42
+ items.forEach((item, index) => {
43
+ const key = keyOf(item);
44
+ indexesByKey.set(key, [...(indexesByKey.get(key) ?? []), index]);
45
+ });
46
+ const prerequisites = items.map((item, index) => {
47
+ const found = new Set();
48
+ for (const key of prerequisitesOf(keyOf(item))) {
49
+ for (const other of indexesByKey.get(key) ?? []) {
50
+ if (other !== index)
51
+ found.add(other);
52
+ }
53
+ }
54
+ return [...found];
55
+ });
56
+ const components = stronglyConnectedComponents(prerequisites);
57
+ const componentOf = new Array(items.length);
58
+ components.forEach((members, component) => {
59
+ for (const member of members)
60
+ componentOf[member] = component;
61
+ });
62
+ const placed = new Set();
63
+ const ordered = [];
64
+ // Components sorted by their earliest member keep cycle-free input order.
65
+ const pending = components
66
+ .map((members, component) => ({ component, members: [...members].sort((a, b) => a - b) }))
67
+ .sort((a, b) => (a.members[0] ?? 0) - (b.members[0] ?? 0));
68
+ while (pending.length > 0) {
69
+ const readyAt = pending.findIndex(({ component, members }) => members.every((member) => (prerequisites[member] ?? []).every((other) => componentOf[other] === component || placed.has(componentOf[other] ?? -1))));
70
+ const next = pending[readyAt];
71
+ if (next === undefined) {
72
+ throw new Error('orderByDependencies: no component is ready, but the component graph is acyclic');
73
+ }
74
+ pending.splice(readyAt, 1);
75
+ placed.add(next.component);
76
+ for (const member of next.members) {
77
+ const item = items[member];
78
+ if (item !== undefined)
79
+ ordered.push(item);
80
+ }
81
+ }
82
+ return ordered;
83
+ }
84
+ /** Reverses every edge: key → keys of the definitions that reference it. */
85
+ export function invertDependencyGraph(graph) {
86
+ const inverted = new Map();
87
+ for (const [key, targets] of graph) {
88
+ for (const target of targets) {
89
+ inverted.set(target, (inverted.get(target) ?? new Set()).add(key));
90
+ }
91
+ }
92
+ return inverted;
93
+ }
94
+ function definitionReferences(def) {
95
+ if (def.kind === 'view')
96
+ return sqlReferences(def.as, def.database);
97
+ if (def.kind === 'materialized_view') {
98
+ return [...sqlReferences(def.as, def.database), def.to, ...(def.refresh?.dependsOn ?? [])];
99
+ }
100
+ if (def.kind === 'table')
101
+ return tableReferences(def);
102
+ return dictionarySourceReferences(def);
103
+ }
104
+ // Column default expressions, such as `{ expression: "dictGet('db.dict', 'name', id)" }`.
105
+ function tableReferences(def) {
106
+ return def.columns.flatMap((column) => {
107
+ if (column.default === undefined)
108
+ return [];
109
+ const parsed = parseColumnDefault(column.default);
110
+ return parsed.kind === 'expression' ? sqlReferences(parsed.sql, def.database) : [];
111
+ });
112
+ }
113
+ // SOURCE(CLICKHOUSE(... TABLE 't' DB 'd' ...)) or SOURCE(CLICKHOUSE(... QUERY '...' ...)).
114
+ function dictionarySourceReferences(def) {
115
+ const tokens = significantTokens(def.source);
116
+ if (!/^clickhouse$/i.test(tokens[0]?.text ?? '') || tokens[1]?.text !== '(')
117
+ return [];
118
+ const params = new Map();
119
+ for (let i = 2; i + 1 < tokens.length; i += 1) {
120
+ const key = tokens[i];
121
+ const value = tokens[i + 1];
122
+ if (key?.kind !== 'identifier' || !value)
123
+ continue;
124
+ const text = stringLiteralValue(value);
125
+ if (text !== undefined)
126
+ params.set(key.text.toUpperCase(), text);
127
+ }
128
+ const query = params.get('QUERY');
129
+ if (query !== undefined)
130
+ return sqlReferences(query, def.database);
131
+ const table = params.get('TABLE');
132
+ if (table === undefined)
133
+ return [];
134
+ return [{ database: params.get('DB') ?? def.database, name: table }];
135
+ }
136
+ /**
137
+ * Objects a SQL query or expression reads: qualified `db.name` pairs anywhere,
138
+ * the name argument of dictGet-family/joinGet/dictionary(), and unqualified
139
+ * FROM/JOIN targets, resolved against `ownDatabase` unless a CTE in scope has
140
+ * that name.
141
+ */
142
+ function sqlReferences(sql, ownDatabase) {
143
+ const tokens = significantTokens(sql);
144
+ const root = { query: true, cteNames: new Set(), withList: 'none' };
145
+ const scopes = [root];
146
+ const references = [];
147
+ for (let i = 0; i < tokens.length; i += 1) {
148
+ const text = tokens[i]?.text;
149
+ const scope = scopes[scopes.length - 1] ?? root;
150
+ if (text === '(') {
151
+ const query = /^(select|with)$/i.test(tokens[i + 1]?.text ?? '');
152
+ // A CTE's column list is a parenthesis of its own; only the body declares.
153
+ const declaresOnClose = scope.pendingCte?.bodyAt === i ? scope.pendingCte.name : undefined;
154
+ if (declaresOnClose !== undefined)
155
+ scope.pendingCte = undefined;
156
+ scopes.push({ query, cteNames: new Set(), withList: 'none', declaresOnClose });
157
+ continue;
158
+ }
159
+ if (text === ')') {
160
+ if (scopes.length === 1)
161
+ continue;
162
+ scopes.pop();
163
+ const declared = scope.declaresOnClose;
164
+ if (declared !== undefined)
165
+ (scopes[scopes.length - 1] ?? root).cteNames.add(declared);
166
+ continue;
167
+ }
168
+ trackWithList(tokens, i, scope);
169
+ const found = [
170
+ qualifiedReference(tokens, i),
171
+ objectNameArgument(tokens, i, ownDatabase),
172
+ scope.query ? unqualifiedTableTarget(tokens, i, ownDatabase, scopes) : undefined,
173
+ ];
174
+ for (const reference of found) {
175
+ if (reference)
176
+ references.push(reference);
177
+ }
178
+ }
179
+ return references;
180
+ }
181
+ // `WITH a AS (…), b AS (…) SELECT …` declares the CTEs `a` and `b` for this
182
+ // level and every level inside it. Each name takes effect when its body
183
+ // closes: a CTE body that names its own CTE reads the real object, and only
184
+ // `WITH RECURSIVE` lets a body see its own name. The list ends at the level's
185
+ // SELECT, so a later `WINDOW w AS (…)` declares nothing.
186
+ function trackWithList(tokens, i, scope) {
187
+ const token = tokens[i];
188
+ if (!token)
189
+ return;
190
+ const keyword = token.kind === 'identifier' ? token.text.toLowerCase() : '';
191
+ const next = tokens[i + 1]?.text ?? '';
192
+ if (keyword === 'with') {
193
+ if (WITH_MODIFIER.test(next))
194
+ scope.withList = 'none';
195
+ else
196
+ scope.withList = /^recursive$/i.test(next) ? 'recursive' : 'open';
197
+ return;
198
+ }
199
+ if (keyword === 'select') {
200
+ scope.withList = 'none';
201
+ return;
202
+ }
203
+ const name = identifierName(token);
204
+ if (name === undefined || scope.withList === 'none')
205
+ return;
206
+ const previous = tokens[i - 1]?.text.toLowerCase();
207
+ const startsEntry = previous === 'with' || previous === 'recursive' || previous === ',';
208
+ const bodyAt = startsEntry ? cteBodyStart(tokens, i + 1) : undefined;
209
+ if (bodyAt === undefined)
210
+ return;
211
+ if (scope.withList === 'recursive')
212
+ scope.cteNames.add(name);
213
+ else
214
+ scope.pendingCte = { name, bodyAt };
215
+ }
216
+ // The `(` that opens a CTE body, after the CTE name: an optional column list
217
+ // `(a, b)`, `AS`, an optional `MATERIALIZED`, then the body. Anything else,
218
+ // such as `lower(x) AS alias`, is an expression alias, not a CTE.
219
+ function cteBodyStart(tokens, afterName) {
220
+ let i = tokens[afterName]?.text === '(' ? closingParenthesis(tokens, afterName) + 1 : afterName;
221
+ if (!/^as$/i.test(tokens[i]?.text ?? ''))
222
+ return undefined;
223
+ i += 1;
224
+ if (/^materialized$/i.test(tokens[i]?.text ?? ''))
225
+ i += 1;
226
+ return tokens[i]?.text === '(' ? i : undefined;
227
+ }
228
+ // Index of the `)` matching the `(` at `open`, or past the end when unbalanced.
229
+ function closingParenthesis(tokens, open) {
230
+ let depth = 0;
231
+ for (let i = open; i < tokens.length; i += 1) {
232
+ const text = tokens[i]?.text;
233
+ if (text === '(')
234
+ depth += 1;
235
+ else if (text === ')') {
236
+ depth -= 1;
237
+ if (depth === 0)
238
+ return i;
239
+ }
240
+ }
241
+ return tokens.length;
242
+ }
243
+ // `db.name`, with bare or quoted parts and any comments around the dot. A pair
244
+ // right after another dot is a column path (`db.t.col`), not an object.
245
+ function qualifiedReference(tokens, i) {
246
+ const first = tokens[i];
247
+ const second = tokens[i + 2];
248
+ if (!first || !second || tokens[i + 1]?.text !== '.' || tokens[i - 1]?.text === '.')
249
+ return undefined;
250
+ const database = identifierName(first);
251
+ const name = identifierName(second);
252
+ return database === undefined || name === undefined ? undefined : { database, name };
253
+ }
254
+ // The first argument of dictGet and the other OBJECT_NAME_FUNCTION calls: a
255
+ // string (`dictGet('db.dict', …)`) or a bare or quoted name (`dictGet(dict, …)`).
256
+ // ClickHouse resolves an unqualified one against the current database; a
257
+ // qualified `db.dict` is found as a pair.
258
+ function objectNameArgument(tokens, i, ownDatabase) {
259
+ const token = tokens[i];
260
+ if (token?.kind !== 'identifier' || !OBJECT_NAME_FUNCTION.test(token.text))
261
+ return undefined;
262
+ const argument = tokens[i + 2];
263
+ if (tokens[i + 1]?.text !== '(' || !argument)
264
+ return undefined;
265
+ const value = stringLiteralValue(argument);
266
+ if (value !== undefined)
267
+ return parseObjectName(value, ownDatabase);
268
+ const name = identifierName(argument);
269
+ const after = tokens[i + 3]?.text;
270
+ return name !== undefined && (after === ',' || after === ')') ? { database: ownDatabase, name } : undefined;
271
+ }
272
+ // `FROM name` / `JOIN name` in query context. Skips `ARRAY JOIN expr`,
273
+ // `x IS [NOT] DISTINCT FROM y`, qualified names (found as pairs), table
274
+ // functions (`numbers(10)`) and CTE names declared at this level or above.
275
+ function unqualifiedTableTarget(tokens, i, ownDatabase, scopes) {
276
+ const token = tokens[i];
277
+ const keyword = token?.kind === 'identifier' ? token.text.toLowerCase() : '';
278
+ if (keyword !== 'from' && keyword !== 'join')
279
+ return undefined;
280
+ const previous = tokens[i - 1]?.text.toLowerCase();
281
+ if (keyword === 'join' && previous === 'array')
282
+ return undefined;
283
+ if (keyword === 'from' && previous === 'distinct')
284
+ return undefined;
285
+ const next = tokens[i + 1];
286
+ const target = next ? identifierName(next) : undefined;
287
+ const after = tokens[i + 2]?.text;
288
+ if (target === undefined || after === '.' || after === '(')
289
+ return undefined;
290
+ if (scopes.some((scope) => scope.cteNames.has(target)))
291
+ return undefined;
292
+ return { database: ownDatabase, name: target };
293
+ }
294
+ // Mirrors ClickHouse's QualifiedTableName::tryParseFromString: one dot splits
295
+ // database and name; no dot means the current database.
296
+ function parseObjectName(value, ownDatabase) {
297
+ const parts = value.split('.');
298
+ if (parts.some((part) => part.length === 0) || parts.length > 2)
299
+ return undefined;
300
+ const [first, second] = parts;
301
+ if (first === undefined)
302
+ return undefined;
303
+ return second === undefined ? { database: ownDatabase, name: first } : { database: first, name: second };
304
+ }
305
+ function significantTokens(sql) {
306
+ return tokenizeSQL(sql).filter((token) => !isTrivia(token));
307
+ }
308
+ // Tarjan's algorithm over index-based edges (`edges[v]` = nodes v points to).
309
+ function stronglyConnectedComponents(edges) {
310
+ let counter = 0;
311
+ const index = new Map();
312
+ const lowLink = new Map();
313
+ const onStack = new Set();
314
+ const stack = [];
315
+ const components = [];
316
+ const visit = (v) => {
317
+ index.set(v, counter);
318
+ lowLink.set(v, counter);
319
+ counter += 1;
320
+ stack.push(v);
321
+ onStack.add(v);
322
+ for (const w of edges[v] ?? []) {
323
+ if (!index.has(w)) {
324
+ visit(w);
325
+ lowLink.set(v, Math.min(lowLink.get(v) ?? 0, lowLink.get(w) ?? 0));
326
+ }
327
+ else if (onStack.has(w)) {
328
+ lowLink.set(v, Math.min(lowLink.get(v) ?? 0, index.get(w) ?? 0));
329
+ }
330
+ }
331
+ if (lowLink.get(v) !== index.get(v))
332
+ return;
333
+ const component = [];
334
+ for (;;) {
335
+ const w = stack.pop();
336
+ if (w === undefined)
337
+ break;
338
+ onStack.delete(w);
339
+ component.push(w);
340
+ if (w === v)
341
+ break;
342
+ }
343
+ components.push(component);
344
+ };
345
+ for (let v = 0; v < edges.length; v += 1) {
346
+ if (!index.has(v))
347
+ visit(v);
348
+ }
349
+ return components;
350
+ }
351
+ //# sourceMappingURL=object-dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-dependencies.js","sourceRoot":"","sources":["../src/object-dependencies.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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;AAuDrD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAEnE;AAiDD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,aAAa,CAcf"}
@@ -19,14 +19,19 @@ const ON_CLUSTER_ANCHORS = [
19
19
  'CREATE VIEW',
20
20
  'CREATE MATERIALIZED VIEW',
21
21
  'CREATE DATABASE',
22
+ 'CREATE DICTIONARY',
23
+ // A structural dictionary change renders as `CREATE OR REPLACE DICTIONARY`
24
+ // (there is no `ALTER DICTIONARY`), which does NOT share the `CREATE
25
+ // DICTIONARY` prefix — it needs its own anchor or ON CLUSTER injection
26
+ // silently no-ops for every dictionary replace.
27
+ 'CREATE OR REPLACE DICTIONARY',
22
28
  'ALTER TABLE',
23
29
  'DROP TABLE',
24
30
  'DROP VIEW',
31
+ 'DROP DICTIONARY',
25
32
  // --- Not emitted by chkit yet; kept as a forward-compatible safety net ---
26
- 'CREATE DICTIONARY',
27
33
  'CREATE FUNCTION',
28
34
  'DROP DATABASE',
29
- 'DROP DICTIONARY',
30
35
  'ATTACH TABLE',
31
36
  'DETACH TABLE',
32
37
  'TRUNCATE TABLE',
@@ -34,13 +39,13 @@ const ON_CLUSTER_ANCHORS = [
34
39
  ];
35
40
  // Statements where `ON CLUSTER` goes at the very END, after the full object
36
41
  // 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.
42
+ // references (`a TO b`, `a AND b`), so the clause can only be appended.
43
+ // `RENAME TABLE` and `RENAME DICTIONARY` are emitted by chkit today; the rest
44
+ // are the same-family forward-compatible safety net described above.
40
45
  const ON_CLUSTER_TRAILING_ANCHORS = [
41
46
  'RENAME TABLE',
42
- 'RENAME DATABASE',
43
47
  'RENAME DICTIONARY',
48
+ 'RENAME DATABASE',
44
49
  'EXCHANGE TABLES',
45
50
  'EXCHANGE DICTIONARIES',
46
51
  ];
@@ -56,6 +61,10 @@ export function onClusterClause(cluster) {
56
61
  // keyword and the object reference. Preserved verbatim so the clause lands after
57
62
  // the object, never after the guard.
58
63
  const OBJECT_GUARD = /^IF\s+(?:NOT\s+)?EXISTS\s+/i;
64
+ // One identifier part: backtick-quoted (backslash-escaped or doubled backticks)
65
+ // or a bare run up to the next space, `;`, `(`, or `.`.
66
+ const IDENTIFIER_PART = /(?:`(?:[^`\\]|\\.|``)*`|[^\s;(.`]+)/.source;
67
+ const OBJECT_REFERENCE = new RegExp(`^${IDENTIFIER_PART}(?:\\.${IDENTIFIER_PART})*`);
59
68
  // Idempotency is checked positionally — an `ON CLUSTER` clause sitting exactly
60
69
  // where injection would place it — never by scanning the whole statement, so
61
70
  // user-authored content (a column COMMENT, a view's SELECT body) containing the
@@ -82,9 +91,9 @@ function injectOnClusterClause(sql, clause) {
82
91
  // after the object reference regardless of whether the statement carries it.
83
92
  const guard = rest.match(OBJECT_GUARD)?.[0] ?? '';
84
93
  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];
94
+ // The object reference (`db.name` or `db`), where each part may be a
95
+ // backtick-quoted identifier containing spaces, dots or escaped backticks.
96
+ const ref = afterGuard.match(OBJECT_REFERENCE)?.[0];
88
97
  if (!ref)
89
98
  return sql;
90
99
  const afterRef = afterGuard.slice(ref.length);
@@ -1 +1 @@
1
- {"version":3,"file":"on-cluster.js","sourceRoot":"","sources":["../src/on-cluster.ts"],"names":[],"mappings":"AAEA,8EAA8E;AAC9E,0EAA0E;AAC1E,2EAA2E;AAC3E,EAAE;AACF,4EAA4E;AAC5E,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,+EAA+E;AAC/E,EAAE;AACF,gFAAgF;AAChF,8EAA8E;AAC9E,6EAA6E;AAC7E,sEAAsE;AACtE,0EAA0E;AAC1E,MAAM,kBAAkB,GAAG;IACzB,iCAAiC;IACjC,cAAc;IACd,aAAa;IACb,0BAA0B;IAC1B,iBAAiB;IACjB,aAAa;IACb,YAAY;IACZ,WAAW;IACX,4EAA4E;IAC5E,mBAAmB;IACnB,iBAAiB;IACjB,eAAe;IACf,iBAAiB;IACjB,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,gBAAgB;CACR,CAAA;AAEV,4EAA4E;AAC5E,4EAA4E;AAC5E,6EAA6E;AAC7E,yEAAyE;AACzE,8BAA8B;AAC9B,MAAM,2BAA2B,GAAG;IAClC,cAAc;IACd,iBAAiB;IACjB,mBAAmB;IACnB,iBAAiB;IACjB,uBAAuB;CACf,CAAA;AAEV;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,OAAO,OAAO,CAAC,CAAC,CAAC,gBAAgB,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;AAClD,CAAC;AAED,6EAA6E;AAC7E,iFAAiF;AACjF,qCAAqC;AACrC,MAAM,YAAY,GAAG,6BAA6B,CAAA;AAElD,+EAA+E;AAC/E,6EAA6E;AAC7E,gFAAgF;AAChF,gDAAgD;AAChD,MAAM,iBAAiB,GAAG,qBAAqB,CAAA;AAC/C,MAAM,iBAAiB,GAAG,2BAA2B,CAAA;AAErD,SAAS,qBAAqB,CAAC,GAAW,EAAE,MAAc;IACxD,8EAA8E;IAC9E,gEAAgE;IAChE,KAAK,MAAM,MAAM,IAAI,2BAA2B,EAAE,CAAC;QACjD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC;YAAE,SAAQ;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACvD,+EAA+E;QAC/E,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,GAAG,CAAA;QAC5C,OAAO,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,MAAM,EAAE,CAAA;IACrE,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACxC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC;YAAE,SAAQ;QAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;QACzC,0EAA0E;QAC1E,6EAA6E;QAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACjD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAC3C,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9C,IAAI,CAAC,GAAG;YAAE,OAAO,GAAG,CAAA;QACpB,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC7C,4EAA4E;QAC5E,8EAA8E;QAC9E,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,GAAG,CAAA;QAChD,OAAO,GAAG,MAAM,IAAI,KAAK,GAAG,GAAG,GAAG,MAAM,GAAG,QAAQ,EAAE,CAAA;IACvD,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAmB,EACnB,OAA2B;IAE3B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAA;IACvC,OAAO;QACL,GAAG,IAAI;QACP,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAC9C,GAAG,SAAS;YACZ,GAAG,EAAE,qBAAqB,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;SAClD,CAAC,CAAC;QACH,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7D,GAAG,UAAU;YACb,eAAe,EAAE,qBAAqB,CAAC,UAAU,CAAC,eAAe,EAAE,MAAM,CAAC;SAC3E,CAAC,CAAC;KACJ,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"on-cluster.js","sourceRoot":"","sources":["../src/on-cluster.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
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;AA+enB,wBAAgB,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAqG9G"}
1
+ {"version":3,"file":"planner.d.ts","sourceRoot":"","sources":["../src/planner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAOV,aAAa,EAEb,gBAAgB,EAGjB,MAAM,YAAY,CAAA;AA2iBnB,wBAAgB,QAAQ,CAAC,cAAc,EAAE,gBAAgB,EAAE,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,aAAa,CAyF9G"}