@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
@@ -1,3 +1,4 @@
1
+ import { isTrivia, tokenizeSQL } from './sql-lexer.js';
1
2
  export function splitSqlStatements(sql) {
2
3
  const statements = [];
3
4
  let current = '';
@@ -19,19 +20,29 @@ export function splitSqlStatements(sql) {
19
20
  }
20
21
  if (inSingleQuote) {
21
22
  current += ch;
23
+ if (ch === '\\' && next) {
24
+ current += next;
25
+ i += 1;
26
+ continue;
27
+ }
22
28
  if (ch === "'" && next === "'") {
23
29
  current += next;
24
30
  i += 1;
25
31
  continue;
26
32
  }
27
- if (ch === "'" && sql[i - 1] !== '\\') {
33
+ if (ch === "'") {
28
34
  inSingleQuote = false;
29
35
  }
30
36
  continue;
31
37
  }
32
38
  if (inDoubleQuote) {
33
39
  current += ch;
34
- if (ch === '"' && sql[i - 1] !== '\\') {
40
+ if (ch === '\\' && next) {
41
+ current += next;
42
+ i += 1;
43
+ continue;
44
+ }
45
+ if (ch === '"') {
35
46
  inDoubleQuote = false;
36
47
  }
37
48
  continue;
@@ -110,19 +121,29 @@ export function extractExecutableStatements(sql) {
110
121
  }
111
122
  if (inSingleQuote) {
112
123
  stripped += ch;
124
+ if (ch === '\\' && next) {
125
+ stripped += next;
126
+ i += 1;
127
+ continue;
128
+ }
113
129
  if (ch === "'" && next === "'") {
114
130
  stripped += next;
115
131
  i += 1;
116
132
  continue;
117
133
  }
118
- if (ch === "'" && sql[i - 1] !== '\\') {
134
+ if (ch === "'") {
119
135
  inSingleQuote = false;
120
136
  }
121
137
  continue;
122
138
  }
123
139
  if (inDoubleQuote) {
124
140
  stripped += ch;
125
- if (ch === '"' && sql[i - 1] !== '\\') {
141
+ if (ch === '\\' && next) {
142
+ stripped += next;
143
+ i += 1;
144
+ continue;
145
+ }
146
+ if (ch === '"') {
126
147
  inDoubleQuote = false;
127
148
  }
128
149
  continue;
@@ -163,6 +184,32 @@ export function extractExecutableStatements(sql) {
163
184
  }
164
185
  stripped += ch;
165
186
  }
166
- return splitSqlStatements(stripped);
187
+ const statements = splitSqlStatements(stripped);
188
+ // A statement made only of comments is not executable: ClickHouse rejects it
189
+ // as "Empty query" (for example a block comment after the last statement).
190
+ const executable = statements.filter(hasExecutableContent);
191
+ if (executable.length === statements.length)
192
+ return statements;
193
+ // The splitter does not know `#` and `//` line comments (#197). When one of
194
+ // them holds a `;`, the splitter cut that comment line in two; keeping the
195
+ // comment-only piece makes ClickHouse reject the file instead of running the
196
+ // commented-out text after the `;`.
197
+ if (tokenizeSQL(stripped).some(isLineCommentWithSemicolon))
198
+ return statements;
199
+ return executable;
200
+ }
201
+ // True unless every token is whitespace or a terminated comment (`/* */`,
202
+ // nested or not, `# `, `#!`, `//`; `--` comments are already stripped). An
203
+ // unterminated comment counts as content, so ClickHouse reports it.
204
+ function hasExecutableContent(statement) {
205
+ // Only a statement that starts like a comment can be made only of comments.
206
+ if (!/^[-/#]/.test(statement))
207
+ return true;
208
+ // The splitter appended the `;`; a trailing line comment would swallow it.
209
+ const body = statement.endsWith(';') ? statement.slice(0, -1) : statement;
210
+ return tokenizeSQL(body).some((token) => !isTrivia(token) || !token.terminated);
211
+ }
212
+ function isLineCommentWithSemicolon(token) {
213
+ return token.kind === 'line_comment' && token.text.includes(';');
167
214
  }
168
215
  //# sourceMappingURL=sql-splitter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql-splitter.js","sourceRoot":"","sources":["../src/sql-splitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-splitter.js","sourceRoot":"","sources":["../src/sql-splitter.ts"],"names":[],"mappings":"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"}
package/dist/sql.d.ts CHANGED
@@ -1,13 +1,21 @@
1
- import type { ColumnDefinition, MaterializedViewDefinition, ProjectionDefinition, SchemaDefinition, SkipIndexDefinition, TableDefinition } from './model.js';
1
+ import type { ColumnDefinition, DictionaryDefinition, MaterializedViewDefinition, ProjectionDefinition, SchemaDefinition, SkipIndexDefinition, TableDefinition } from './model.js';
2
+ export declare function renderKeyClauseColumns(columns: string[], columnNames: ReadonlySet<string>): string;
2
3
  /**
3
4
  * Renders ALTER TABLE ... MODIFY REFRESH for a refresh-only change.
4
5
  * Per live validation: APPEND must be re-included if present, because ClickHouse
5
6
  * treats omitting APPEND as "remove APPEND" and rejects.
6
7
  */
7
8
  export declare function renderAlterModifyRefresh(def: MaterializedViewDefinition): string;
9
+ export declare function renderDictionarySQL(def: DictionaryDefinition, replace?: boolean): string;
8
10
  export declare function toCreateSQL(def: SchemaDefinition): string;
9
11
  export declare function renderAlterAddColumn(def: TableDefinition, column: ColumnDefinition): string;
10
12
  export declare function renderAlterModifyColumn(def: TableDefinition, column: ColumnDefinition): string;
13
+ /**
14
+ * MODIFY COLUMN without an expression keeps the old one, so dropping it needs an
15
+ * explicit REMOVE. It must run before the MODIFY: in one statement ClickHouse
16
+ * casts the retained default to the new type first, so `'abc'` -> UInt64 fails.
17
+ */
18
+ export declare function renderAlterRemoveColumnExpression(def: TableDefinition, column: ColumnDefinition, previous: ColumnDefinition): string | undefined;
11
19
  export declare function renderAlterDropColumn(def: TableDefinition, columnName: string): string;
12
20
  export declare function renderAlterRemoveCodec(def: TableDefinition, columnName: string): string;
13
21
  export declare function renderAlterAddIndex(def: TableDefinition, index: SkipIndexDefinition): string;
package/dist/sql.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,0BAA0B,EAE1B,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EAEhB,MAAM,YAAY,CAAA;AA8HnB;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,0BAA0B,GAAG,MAAM,CAOhF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAKzD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE3F;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE9F;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAE5F;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CAER;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAC/B,MAAM,CAER;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK1F"}
1
+ {"version":3,"file":"sql.d.ts","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAEhB,oBAAoB,EACpB,0BAA0B,EAE1B,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EAEhB,MAAM,YAAY,CAAA;AAmBnB,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,GAC/B,MAAM,CASR;AAmGD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,0BAA0B,GAAG,MAAM,CAOhF;AAuBD,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,oBAAoB,EAAE,OAAO,UAAQ,GAAG,MAAM,CAqBtF;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAMzD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE3F;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE9F;AAED;;;;GAIG;AACH,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,eAAe,EACpB,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAGpB;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEtF;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,mBAAmB,GAAG,MAAM,CAE5F;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,UAAU,EAAE,oBAAoB,GAC/B,MAAM,CAER;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM,CAE9F;AAED,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAC/B,MAAM,CAER;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK1F"}
package/dist/sql.js CHANGED
@@ -1,36 +1,36 @@
1
1
  import { renderCodec } from './codec.js';
2
+ import { renderDefault } from './column-default.js';
3
+ import { quoteIdentifier, renderQualifiedName } from './identifier.js';
4
+ import { isKafkaEngine, renderKafkaSetting } from './kafka.js';
2
5
  import { isPlainColumnReference, normalizeKeyColumns } from './key-clause.js';
3
6
  import { renderProjectionBody } from './projection.js';
7
+ import { TEXT_INDEX_GRANULARITY, renderTextIndexType } from './text-index.js';
4
8
  import { assertValidDefinitions } from './validate.js';
5
- function renderDefault(value) {
6
- if (typeof value === 'string') {
7
- if (value.startsWith('fn:'))
8
- return value.slice(3);
9
- return `'${value.replace(/'/g, "''")}'`;
10
- }
11
- return String(value);
12
- }
13
9
  function renderColumn(col) {
14
- let out = `\`${col.name}\` ${col.nullable ? `Nullable(${col.type})` : col.type}`;
10
+ let out = `${quoteIdentifier(col.name)} ${col.nullable ? `Nullable(${col.type})` : col.type}`;
15
11
  if (col.default !== undefined)
16
- out += ` DEFAULT ${renderDefault(col.default)}`;
12
+ out += ` ${col.defaultKind ?? 'DEFAULT'} ${renderDefault(col.default)}`;
13
+ else if (col.defaultKind === 'EPHEMERAL')
14
+ out += ' EPHEMERAL';
17
15
  if (col.comment)
18
16
  out += ` COMMENT '${col.comment.replace(/'/g, "''")}'`;
19
17
  if (col.codec)
20
18
  out += ` ${renderCodec(col.codec)}`;
21
19
  return out;
22
20
  }
23
- function renderKeyClauseColumns(columns, columnNames) {
24
- return normalizeKeyColumns(columns)
21
+ export function renderKeyClauseColumns(columns, columnNames) {
22
+ return normalizeKeyColumns(columns, columnNames)
25
23
  .map((column) =>
26
24
  // Quote a token when it names a declared column (including names that
27
25
  // need quoting like `user-id`) or is a bare identifier. Only true
28
26
  // expressions (e.g. `toStartOfHour(ts)`) are emitted verbatim.
29
- columnNames.has(column) || isPlainColumnReference(column) ? `\`${column}\`` : column)
27
+ columnNames.has(column) || isPlainColumnReference(column) ? quoteIdentifier(column) : column)
30
28
  .join(', ');
31
29
  }
32
30
  function renderIndexType(idx) {
33
31
  switch (idx.type) {
32
+ case 'text':
33
+ return renderTextIndexType(idx);
34
34
  case 'minmax':
35
35
  return 'minmax';
36
36
  case 'set':
@@ -47,15 +47,17 @@ function renderIndexType(idx) {
47
47
  }
48
48
  function renderTableSQL(def) {
49
49
  const columns = def.columns.map(renderColumn);
50
- const indexes = (def.indexes ?? []).map((idx) => `INDEX \`${idx.name}\` (${idx.expression}) TYPE ${renderIndexType(idx)} GRANULARITY ${idx.granularity}`);
51
- const projections = (def.projections ?? []).map((projection) => `PROJECTION \`${projection.name}\` ${renderProjectionBody(projection)}`);
50
+ const indexes = (def.indexes ?? []).map((idx) => `INDEX ${quoteIdentifier(idx.name)} (${idx.expression}) TYPE ${renderIndexType(idx)} GRANULARITY ${idx.type === 'text' ? TEXT_INDEX_GRANULARITY : idx.granularity}`);
51
+ const projections = (def.projections ?? []).map((projection) => `PROJECTION ${quoteIdentifier(projection.name)} ${renderProjectionBody(projection)}`);
52
52
  const body = [...columns, ...indexes, ...projections].join(',\n ');
53
53
  const columnNames = new Set(def.columns.map((column) => column.name));
54
54
  const clauses = [];
55
55
  if (def.partitionBy)
56
56
  clauses.push(`PARTITION BY ${def.partitionBy}`);
57
- clauses.push(`PRIMARY KEY (${renderKeyClauseColumns(def.primaryKey, columnNames)})`);
58
- clauses.push(`ORDER BY (${renderKeyClauseColumns(def.orderBy, columnNames)})`);
57
+ if (!isKafkaEngine(def.engine)) {
58
+ clauses.push(`PRIMARY KEY (${renderKeyClauseColumns(def.primaryKey, columnNames)})`);
59
+ clauses.push(`ORDER BY (${renderKeyClauseColumns(def.orderBy, columnNames)})`);
60
+ }
59
61
  if (def.uniqueKey && def.uniqueKey.length > 0) {
60
62
  clauses.push(`UNIQUE KEY (${renderKeyClauseColumns(def.uniqueKey, columnNames)})`);
61
63
  }
@@ -63,15 +65,15 @@ function renderTableSQL(def) {
63
65
  clauses.push(`TTL ${def.ttl}`);
64
66
  if (def.settings && Object.keys(def.settings).length > 0) {
65
67
  clauses.push(`SETTINGS ${Object.entries(def.settings)
66
- .map(([k, v]) => `${k} = ${v}`)
68
+ .map(([k, v]) => `${k} = ${isKafkaEngine(def.engine) ? renderKafkaSetting(v) : v}`)
67
69
  .join(', ')}`);
68
70
  }
69
71
  if (def.comment)
70
72
  clauses.push(`COMMENT '${def.comment.replace(/'/g, "''")}'`);
71
- return `CREATE TABLE IF NOT EXISTS ${def.database}.${def.name}\n(\n ${body}\n) ENGINE = ${def.engine}\n${clauses.join('\n')};`;
73
+ return `CREATE TABLE IF NOT EXISTS ${renderQualifiedName(def.database, def.name)}\n(\n ${body}\n) ENGINE = ${def.engine}\n${clauses.join('\n')};`;
72
74
  }
73
75
  function renderViewSQL(def) {
74
- return `CREATE VIEW IF NOT EXISTS ${def.database}.${def.name} AS\n${def.as};`;
76
+ return `CREATE VIEW IF NOT EXISTS ${renderQualifiedName(def.database, def.name)} AS\n${def.as};`;
75
77
  }
76
78
  function renderRefreshSettings(settings) {
77
79
  return Object.entries(settings)
@@ -79,7 +81,7 @@ function renderRefreshSettings(settings) {
79
81
  .join(', ');
80
82
  }
81
83
  function renderDependsOn(dependsOn) {
82
- return dependsOn.map((dep) => `${dep.database}.${dep.name}`).join(', ');
84
+ return dependsOn.map((dep) => renderQualifiedName(dep.database, dep.name)).join(', ');
83
85
  }
84
86
  /**
85
87
  * Renders the REFRESH clause block for a refreshable materialized view.
@@ -108,9 +110,9 @@ function renderRefreshClause(refresh) {
108
110
  return parts.join(' ');
109
111
  }
110
112
  function renderMaterializedViewSQL(def) {
111
- const header = `CREATE MATERIALIZED VIEW IF NOT EXISTS ${def.database}.${def.name}`;
113
+ const header = `CREATE MATERIALIZED VIEW IF NOT EXISTS ${renderQualifiedName(def.database, def.name)}`;
112
114
  const refreshBlock = def.refresh ? `\n${renderRefreshClause(def.refresh)}` : '';
113
- const toClause = ` TO ${def.to.database}.${def.to.name}`;
115
+ const toClause = ` TO ${renderQualifiedName(def.to.database, def.to.name)}`;
114
116
  const emptyClause = def.refresh?.empty ? ' EMPTY' : '';
115
117
  return `${header}${refreshBlock}${toClause}${emptyClause} AS\n${def.as};`;
116
118
  }
@@ -123,7 +125,52 @@ export function renderAlterModifyRefresh(def) {
123
125
  if (!def.refresh) {
124
126
  throw new Error(`Cannot render MODIFY REFRESH for ${def.database}.${def.name}: refresh is not set`);
125
127
  }
126
- return `ALTER TABLE ${def.database}.${def.name} MODIFY ${renderRefreshClause(def.refresh)};`;
128
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} MODIFY ${renderRefreshClause(def.refresh)};`;
129
+ }
130
+ function renderDictionaryAttribute(attr) {
131
+ let out = `${quoteIdentifier(attr.name)} ${attr.type}`;
132
+ if (attr.expression !== undefined)
133
+ out += ` EXPRESSION ${attr.expression}`;
134
+ else if (attr.default !== undefined)
135
+ out += ` DEFAULT ${renderDefault(attr.default)}`;
136
+ if (attr.hierarchical)
137
+ out += ' HIERARCHICAL';
138
+ if (attr.bidirectional)
139
+ out += ' BIDIRECTIONAL';
140
+ if (attr.injective)
141
+ out += ' INJECTIVE';
142
+ if (attr.isObjectId)
143
+ out += ' IS_OBJECT_ID';
144
+ return out;
145
+ }
146
+ function renderDictionaryRangeColumn(column, columnNames) {
147
+ return columnNames.has(column) || isPlainColumnReference(column) ? quoteIdentifier(column) : column;
148
+ }
149
+ function renderDictionarySettings(settings) {
150
+ return Object.entries(settings)
151
+ .map(([k, v]) => `${k} = ${typeof v === 'string' ? `'${v.replace(/'/g, "''")}'` : v}`)
152
+ .join(', ');
153
+ }
154
+ export function renderDictionarySQL(def, replace = false) {
155
+ const verb = replace ? 'CREATE OR REPLACE DICTIONARY' : 'CREATE DICTIONARY IF NOT EXISTS';
156
+ const attrs = def.attributes.map(renderDictionaryAttribute).join(',\n ');
157
+ const columnNames = new Set(def.attributes.map((a) => a.name));
158
+ const pk = renderKeyClauseColumns(def.primaryKey, columnNames);
159
+ const clauses = [
160
+ `PRIMARY KEY ${pk}`,
161
+ `SOURCE(${def.source})`,
162
+ `LAYOUT(${def.layout})`,
163
+ `LIFETIME(${def.lifetime})`,
164
+ ];
165
+ if (def.range) {
166
+ clauses.push(`RANGE(MIN ${renderDictionaryRangeColumn(def.range.min, columnNames)} MAX ${renderDictionaryRangeColumn(def.range.max, columnNames)})`);
167
+ }
168
+ if (def.settings && Object.keys(def.settings).length > 0) {
169
+ clauses.push(`SETTINGS(${renderDictionarySettings(def.settings)})`);
170
+ }
171
+ if (def.comment)
172
+ clauses.push(`COMMENT '${def.comment.replace(/'/g, "''")}'`);
173
+ return `${verb} ${renderQualifiedName(def.database, def.name)}\n(\n ${attrs}\n)\n${clauses.join('\n')};`;
127
174
  }
128
175
  export function toCreateSQL(def) {
129
176
  assertValidDefinitions([def]);
@@ -131,42 +178,54 @@ export function toCreateSQL(def) {
131
178
  return renderTableSQL(def);
132
179
  if (def.kind === 'view')
133
180
  return renderViewSQL(def);
181
+ if (def.kind === 'dictionary')
182
+ return renderDictionarySQL(def);
134
183
  return renderMaterializedViewSQL(def);
135
184
  }
136
185
  export function renderAlterAddColumn(def, column) {
137
- return `ALTER TABLE ${def.database}.${def.name} ADD COLUMN IF NOT EXISTS ${renderColumn(column)};`;
186
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} ADD COLUMN IF NOT EXISTS ${renderColumn(column)};`;
138
187
  }
139
188
  export function renderAlterModifyColumn(def, column) {
140
- return `ALTER TABLE ${def.database}.${def.name} MODIFY COLUMN ${renderColumn(column)};`;
189
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} MODIFY COLUMN ${renderColumn(column)};`;
190
+ }
191
+ /**
192
+ * MODIFY COLUMN without an expression keeps the old one, so dropping it needs an
193
+ * explicit REMOVE. It must run before the MODIFY: in one statement ClickHouse
194
+ * casts the retained default to the new type first, so `'abc'` -> UInt64 fails.
195
+ */
196
+ export function renderAlterRemoveColumnExpression(def, column, previous) {
197
+ if (previous.default === undefined || column.default !== undefined || column.defaultKind === 'EPHEMERAL')
198
+ return undefined;
199
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} MODIFY COLUMN ${quoteIdentifier(column.name)} REMOVE ${previous.defaultKind ?? 'DEFAULT'};`;
141
200
  }
142
201
  export function renderAlterDropColumn(def, columnName) {
143
- return `ALTER TABLE ${def.database}.${def.name} DROP COLUMN IF EXISTS \`${columnName}\`;`;
202
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} DROP COLUMN IF EXISTS ${quoteIdentifier(columnName)};`;
144
203
  }
145
204
  export function renderAlterRemoveCodec(def, columnName) {
146
- return `ALTER TABLE ${def.database}.${def.name} MODIFY COLUMN \`${columnName}\` REMOVE CODEC;`;
205
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} MODIFY COLUMN ${quoteIdentifier(columnName)} REMOVE CODEC;`;
147
206
  }
148
207
  export function renderAlterAddIndex(def, index) {
149
- return `ALTER TABLE ${def.database}.${def.name} ADD INDEX IF NOT EXISTS \`${index.name}\` (${index.expression}) TYPE ${renderIndexType(index)} GRANULARITY ${index.granularity};`;
208
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} ADD INDEX IF NOT EXISTS ${quoteIdentifier(index.name)} (${index.expression}) TYPE ${renderIndexType(index)} GRANULARITY ${index.type === 'text' ? TEXT_INDEX_GRANULARITY : index.granularity};`;
150
209
  }
151
210
  export function renderAlterDropIndex(def, indexName) {
152
- return `ALTER TABLE ${def.database}.${def.name} DROP INDEX IF EXISTS \`${indexName}\`;`;
211
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} DROP INDEX IF EXISTS ${quoteIdentifier(indexName)};`;
153
212
  }
154
213
  export function renderAlterAddProjection(def, projection) {
155
- return `ALTER TABLE ${def.database}.${def.name} ADD PROJECTION IF NOT EXISTS \`${projection.name}\` ${renderProjectionBody(projection)};`;
214
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} ADD PROJECTION IF NOT EXISTS ${quoteIdentifier(projection.name)} ${renderProjectionBody(projection)};`;
156
215
  }
157
216
  export function renderAlterDropProjection(def, projectionName) {
158
- return `ALTER TABLE ${def.database}.${def.name} DROP PROJECTION IF EXISTS \`${projectionName}\`;`;
217
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} DROP PROJECTION IF EXISTS ${quoteIdentifier(projectionName)};`;
159
218
  }
160
219
  export function renderAlterModifySetting(def, key, value) {
161
- return `ALTER TABLE ${def.database}.${def.name} MODIFY SETTING ${key} = ${value};`;
220
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} MODIFY SETTING ${key} = ${value};`;
162
221
  }
163
222
  export function renderAlterResetSetting(def, key) {
164
- return `ALTER TABLE ${def.database}.${def.name} RESET SETTING ${key};`;
223
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} RESET SETTING ${key};`;
165
224
  }
166
225
  export function renderAlterModifyTTL(def, ttl) {
167
226
  if (ttl === undefined) {
168
- return `ALTER TABLE ${def.database}.${def.name} REMOVE TTL;`;
227
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} REMOVE TTL;`;
169
228
  }
170
- return `ALTER TABLE ${def.database}.${def.name} MODIFY TTL ${ttl};`;
229
+ return `ALTER TABLE ${renderQualifiedName(def.database, def.name)} MODIFY TTL ${ttl};`;
171
230
  }
172
231
  //# sourceMappingURL=sql.js.map
package/dist/sql.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sql.js","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql.js","sourceRoot":"","sources":["../src/sql.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function textSQLTokens(sql: string): string[];
2
+ export declare function formatTextSQL(tokens: string[]): string;
3
+ export declare function normalizeTextIndexSQL(sql: string): string;
4
+ export declare function textExpressionFingerprint(sql: string): string;
5
+ export declare function textSQLFingerprint(sql: string): string;
6
+ //# sourceMappingURL=text-index-sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-index-sql.d.ts","sourceRoot":"","sources":["../src/text-index-sql.ts"],"names":[],"mappings":"AAoFA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAiEnD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAYtD;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAc7D;AAGD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAStD"}
@@ -0,0 +1,200 @@
1
+ // A small lexer for text-index SQL fragments, not a SQL grammar. Keep literals
2
+ // opaque to whitespace/parenthesis handling and canonicalize their byte escapes.
3
+ const ESCAPES = {
4
+ '0': 0,
5
+ a: 7,
6
+ b: 8,
7
+ t: 9,
8
+ n: 10,
9
+ v: 11,
10
+ f: 12,
11
+ r: 13,
12
+ e: 27,
13
+ };
14
+ const UTF8 = new TextEncoder();
15
+ // Literal names and ambiguous keywords must remain identifiers when compared.
16
+ // Match ClickHouse's writeProbablyQuotedStringImpl (src/IO/WriteHelpers.cpp),
17
+ // including NULL, which its isValidIdentifier helper excludes separately.
18
+ const QUOTED_IDENTIFIERS = new Set([
19
+ 'null',
20
+ 'true',
21
+ 'false',
22
+ 'inf',
23
+ 'infinity',
24
+ 'nan',
25
+ 'distinct',
26
+ 'all',
27
+ 'some',
28
+ 'table',
29
+ 'select',
30
+ 'from',
31
+ 'top',
32
+ 'values',
33
+ ]);
34
+ function stringLiteral(body) {
35
+ const bytes = [];
36
+ for (let i = 0; i < body.length;) {
37
+ const char = body[i] ?? '';
38
+ if (char === "'" && body[i + 1] === "'") {
39
+ bytes.push(39);
40
+ i += 2;
41
+ }
42
+ else if (char === '\\') {
43
+ const next = String.fromCodePoint(body.codePointAt(i + 1) ?? 0);
44
+ const hex = body.slice(i + 2, i + 4);
45
+ if (next === 'x' && /^[\da-f]{2}$/i.test(hex)) {
46
+ bytes.push(Number.parseInt(hex, 16));
47
+ i += 4;
48
+ }
49
+ else {
50
+ // Unknown escapes (including regex \s and LIKE \%) keep their backslash.
51
+ if (next === 'x')
52
+ throw new Error('Invalid hexadecimal SQL escape');
53
+ if (next === 'N') {
54
+ i += 2;
55
+ continue;
56
+ }
57
+ if (ESCAPES[next] === undefined && !["'", '"', '`', '\\', '/', '='].includes(next))
58
+ bytes.push(92);
59
+ bytes.push(...(ESCAPES[next] !== undefined ? [ESCAPES[next] ?? 0] : UTF8.encode(next)));
60
+ i += 1 + next.length;
61
+ }
62
+ }
63
+ else {
64
+ const point = String.fromCodePoint(body.codePointAt(i) ?? 0);
65
+ bytes.push(...UTF8.encode(point));
66
+ i += point.length;
67
+ }
68
+ }
69
+ return literalFromBytes(bytes);
70
+ }
71
+ function literalFromBytes(bytes) {
72
+ return ("'" +
73
+ Array.from(bytes)
74
+ .map((byte) => {
75
+ if (byte === 39)
76
+ return "\\'";
77
+ if (byte === 92)
78
+ return '\\\\';
79
+ if (byte >= 32 && byte < 127)
80
+ return String.fromCharCode(byte);
81
+ return `\\x${byte.toString(16).padStart(2, '0')}`;
82
+ })
83
+ .join('') +
84
+ "'");
85
+ }
86
+ export function textSQLTokens(sql) {
87
+ const tokens = [];
88
+ const brackets = [];
89
+ for (let i = 0; i < sql.length;) {
90
+ const char = sql[i] ?? '';
91
+ if (/\s/.test(char)) {
92
+ i++;
93
+ continue;
94
+ }
95
+ if (sql.startsWith('--', i)) {
96
+ const end = sql.indexOf('\n', i + 2);
97
+ i = end < 0 ? sql.length : end + 1;
98
+ continue;
99
+ }
100
+ if (sql.startsWith('/*', i)) {
101
+ const end = sql.indexOf('*/', i + 2);
102
+ if (end < 0)
103
+ throw new Error('Unterminated SQL comment');
104
+ i = end + 2;
105
+ continue;
106
+ }
107
+ if (char === "'" || char === '"' || char === '`') {
108
+ const start = i++;
109
+ let closed = false;
110
+ while (i < sql.length) {
111
+ if (sql[i] === '\\') {
112
+ i += 2;
113
+ continue;
114
+ }
115
+ if (sql[i++] === char) {
116
+ if (sql[i] === char) {
117
+ i++;
118
+ continue;
119
+ }
120
+ closed = true;
121
+ break;
122
+ }
123
+ }
124
+ if (!closed)
125
+ throw new Error('Unterminated SQL quote');
126
+ const raw = sql.slice(start, i);
127
+ tokens.push(char === "'" ? stringLiteral(raw.slice(1, -1)) : raw);
128
+ continue;
129
+ }
130
+ if (char === '$') {
131
+ // ClickHouse reads $tag$...$tag$ as a raw string and stores it as '...'.
132
+ const tag = /^\$[A-Za-z0-9_]*\$/.exec(sql.slice(i))?.[0];
133
+ const end = tag === undefined ? -1 : sql.indexOf(tag, i + tag.length);
134
+ if (tag !== undefined && end >= 0) {
135
+ tokens.push(literalFromBytes(UTF8.encode(sql.slice(i + tag.length, end))));
136
+ i = end + tag.length;
137
+ continue;
138
+ }
139
+ }
140
+ if (char === ';')
141
+ throw new Error('Expected a SQL expression, not a statement');
142
+ if ('([{'.includes(char))
143
+ brackets.push(char);
144
+ if (')]}'.includes(char) && brackets.pop() !== { ')': '(', ']': '[', '}': '{' }[char]) {
145
+ throw new Error('Unbalanced SQL brackets');
146
+ }
147
+ const word = sql
148
+ .slice(i)
149
+ .match(/^(?:\d+(?:\.\d*)?(?:[eE][+-]?\d+)?|[\p{L}\p{N}_$]+|->|<=|>=|!=|<>|\|\||::|==)/u)?.[0];
150
+ tokens.push(word ?? char);
151
+ i += word?.length ?? 1;
152
+ }
153
+ if (brackets.length)
154
+ throw new Error('Unbalanced SQL brackets');
155
+ return tokens;
156
+ }
157
+ export function formatTextSQL(tokens) {
158
+ let sql = '';
159
+ for (const [i, token] of tokens.entries()) {
160
+ const previous = tokens[i - 1];
161
+ const tight = i === 0 ||
162
+ [')', ']', '}', ',', '.'].includes(token) ||
163
+ ['(', '[', '{', '.'].includes(previous ?? '') ||
164
+ (token === '(' && /^[\p{L}_][\p{L}\p{N}_]*$/u.test(previous ?? ''));
165
+ sql += (tight ? '' : ' ') + token;
166
+ }
167
+ return sql;
168
+ }
169
+ export function normalizeTextIndexSQL(sql) {
170
+ return formatTextSQL(textSQLTokens(sql));
171
+ }
172
+ export function textExpressionFingerprint(sql) {
173
+ let tokens = textSQLTokens(sql);
174
+ // ClickHouse may add or remove the outer INDEX expression parentheses.
175
+ while (tokens[0] === '(' && tokens.at(-1) === ')') {
176
+ let depth = 0;
177
+ const wraps = tokens.every((token, i) => {
178
+ if (token === '(')
179
+ depth++;
180
+ if (token === ')')
181
+ depth--;
182
+ return depth !== 0 || i === tokens.length - 1;
183
+ });
184
+ if (!wraps)
185
+ break;
186
+ tokens = tokens.slice(1, -1);
187
+ }
188
+ return formatTextSQL(tokens);
189
+ }
190
+ // Compare redundant identifier quotes without removing them from generated SQL.
191
+ export function textSQLFingerprint(sql) {
192
+ return JSON.stringify(textSQLTokens(sql).map((token) => {
193
+ const identifier = token.match(/^([`"])([A-Za-z_][A-Za-z0-9_]*)\1$/)?.[2];
194
+ if (identifier === undefined)
195
+ return token;
196
+ // Backticks and double quotes name the same identifier; preserve its case.
197
+ return QUOTED_IDENTIFIERS.has(identifier.toLowerCase()) ? `\`${identifier}\`` : identifier;
198
+ }));
199
+ }
200
+ //# sourceMappingURL=text-index-sql.js.map