@jantokic/chtype 0.2.0 → 0.3.0

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 (35) hide show
  1. package/dist/client/client.d.ts +2 -0
  2. package/dist/client/client.d.ts.map +1 -1
  3. package/dist/client/client.js +11 -0
  4. package/dist/client/client.js.map +1 -1
  5. package/dist/query/compile-utils.d.ts +37 -0
  6. package/dist/query/compile-utils.d.ts.map +1 -0
  7. package/dist/query/compile-utils.js +59 -0
  8. package/dist/query/compile-utils.js.map +1 -0
  9. package/dist/query/delete-builder.d.ts +24 -0
  10. package/dist/query/delete-builder.d.ts.map +1 -0
  11. package/dist/query/delete-builder.js +56 -0
  12. package/dist/query/delete-builder.js.map +1 -0
  13. package/dist/query/expressions.d.ts +65 -0
  14. package/dist/query/expressions.d.ts.map +1 -1
  15. package/dist/query/expressions.js +193 -0
  16. package/dist/query/expressions.js.map +1 -1
  17. package/dist/query/index.d.ts +5 -3
  18. package/dist/query/index.d.ts.map +1 -1
  19. package/dist/query/index.js +4 -2
  20. package/dist/query/index.js.map +1 -1
  21. package/dist/query/query-builder.d.ts +10 -2
  22. package/dist/query/query-builder.d.ts.map +1 -1
  23. package/dist/query/query-builder.js +12 -1
  24. package/dist/query/query-builder.js.map +1 -1
  25. package/dist/query/select-builder.d.ts +55 -3
  26. package/dist/query/select-builder.d.ts.map +1 -1
  27. package/dist/query/select-builder.js +129 -35
  28. package/dist/query/select-builder.js.map +1 -1
  29. package/dist/query/types.d.ts +6 -2
  30. package/dist/query/types.d.ts.map +1 -1
  31. package/dist/query/update-builder.d.ts +27 -0
  32. package/dist/query/update-builder.d.ts.map +1 -0
  33. package/dist/query/update-builder.js +72 -0
  34. package/dist/query/update-builder.js.map +1 -0
  35. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,cAAc;IACrD,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,KAAK,CAAC;IACtD,EAAE,EAAE,OAAO,EAAE,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,cAAc,KAAK,YAAY,CAAC,EAAE,CAAC,CAahF"}
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,KAAK,mBAAmB,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,cAAc;IACrD,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,UAAU,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,GAAG,KAAK,CAAC;IACtD,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE;QAAE,OAAO,IAAI,aAAa,CAAA;KAAE,GAAG,QAAQ,CAAC;IAC1D,EAAE,EAAE,OAAO,EAAE,CAAC;CACf;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,cAAc,KAAK,YAAY,CAAC,EAAE,CAAC,CAsBhF"}
@@ -1,7 +1,9 @@
1
1
  import { Param } from './param.js';
2
2
  import { SelectBuilder } from './select-builder.js';
3
3
  import { InsertBuilder } from './insert-builder.js';
4
- import { fn } from './expressions.js';
4
+ import { DeleteBuilder } from './delete-builder.js';
5
+ import { UpdateBuilder } from './update-builder.js';
6
+ import { fn, Subquery } from './expressions.js';
5
7
  /**
6
8
  * Create a type-safe query builder for your ClickHouse database.
7
9
  *
@@ -27,9 +29,18 @@ export function createQueryBuilder() {
27
29
  insertInto(table) {
28
30
  return new InsertBuilder(table);
29
31
  },
32
+ deleteFrom(table) {
33
+ return new DeleteBuilder(table);
34
+ },
35
+ update(table) {
36
+ return new UpdateBuilder(table);
37
+ },
30
38
  param(name, type) {
31
39
  return new Param(name, type);
32
40
  },
41
+ subquery(builder) {
42
+ return new Subquery(builder.compile());
43
+ },
33
44
  fn,
34
45
  };
35
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAStC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,UAAU,CAA0B,KAAQ;YAC1C,OAAO,IAAI,aAAa,CAAQ,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,UAAU,CAA0B,KAAQ;YAC1C,OAAO,IAAI,aAAa,CAAQ,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,IAAY,EAAE,IAAyB;YAC3C,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,EAAE;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../src/query/query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAA4B,KAAK,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAahD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,UAAU,CAA0B,KAAQ;YAC1C,OAAO,IAAI,aAAa,CAAQ,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,UAAU,CAA0B,KAAQ;YAC1C,OAAO,IAAI,aAAa,CAAQ,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,UAAU,CAA0B,KAAQ;YAC1C,OAAO,IAAI,aAAa,CAAQ,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,CAA0B,KAAQ;YACtC,OAAO,IAAI,aAAa,CAAQ,KAAK,CAAC,CAAC;QACzC,CAAC;QACD,KAAK,CAAC,IAAY,EAAE,IAAyB;YAC3C,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC/B,CAAC;QACD,QAAQ,CAAC,OAAqC;YAC5C,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,EAAE;KACH,CAAC;AACJ,CAAC"}
@@ -5,14 +5,17 @@
5
5
  * literals are NOT allowed to prevent SQL injection. Use `qb.param()` to create
6
6
  * typed parameter placeholders.
7
7
  */
8
- import type { ColumnName, CompiledQuery, ComparisonOp, DatabaseSchema, JoinType, SetOp, SortDirection, TableName } from './types.js';
9
- import { Expression } from './expressions.js';
8
+ import type { BetweenOp, ColumnName, CompiledQuery, ComparisonOp, DatabaseSchema, JoinType, SetOp, SortDirection, TableName, UnaryOp } from './types.js';
9
+ import { Expression, Subquery } from './expressions.js';
10
10
  import { Param } from './param.js';
11
11
  export declare class SelectBuilder<DB extends DatabaseSchema, T extends TableName<DB> = TableName<DB>, TSelected extends string = string> {
12
12
  private _table;
13
13
  private _tableAlias?;
14
14
  private _columns;
15
+ private _distinct;
16
+ private _ctes;
15
17
  private _wheres;
18
+ private _prewheres;
16
19
  private _joins;
17
20
  private _groupBy;
18
21
  private _havings;
@@ -20,15 +23,35 @@ export declare class SelectBuilder<DB extends DatabaseSchema, T extends TableNam
20
23
  private _limit;
21
24
  private _offset;
22
25
  private _final;
26
+ private _sample;
27
+ private _sampleOffset;
23
28
  private _settings;
24
29
  constructor(table: T);
25
30
  /** Alias the main table (useful with JOINs). */
26
31
  as(alias: string): this;
32
+ /** Add DISTINCT to the SELECT clause. */
33
+ distinct(): this;
34
+ /** Add a WITH (CTE) clause. The subquery is compiled and prepended to the query. */
35
+ with(name: string, subquery: Subquery | {
36
+ compile(): CompiledQuery;
37
+ }): this;
38
+ /** Add a PREWHERE condition (ClickHouse-specific optimization, applied before data is read from disk). */
39
+ prewhere(column: ColumnName<DB, T> | Expression | string, op: ComparisonOp, value: Param | Expression): this;
40
+ prewhere(column: ColumnName<DB, T> | Expression | string, op: SetOp, value: Param | Expression): this;
41
+ prewhere(column: ColumnName<DB, T> | Expression | string, op: UnaryOp): this;
42
+ prewhere(column: ColumnName<DB, T> | Expression | string, op: BetweenOp, value: [Param | Expression, Param | Expression]): this;
43
+ prewhere(condition: Expression): this;
27
44
  select<C extends ColumnName<DB, T>>(columns: (C | Expression)[]): SelectBuilder<DB, T, C>;
28
45
  /** Add a WHERE condition. Values must be Param or Expression — no raw strings. */
29
46
  where(column: ColumnName<DB, T> | Expression | string, op: ComparisonOp, value: Param | Expression): this;
30
47
  /** Add a WHERE IN / NOT IN condition. Value must be an Array(...) Param. */
31
48
  where(column: ColumnName<DB, T> | Expression | string, op: SetOp, value: Param | Expression): this;
49
+ /** Add a WHERE IS NULL / IS NOT NULL condition (no value). */
50
+ where(column: ColumnName<DB, T> | Expression | string, op: UnaryOp): this;
51
+ /** Add a WHERE BETWEEN condition with a [low, high] range. */
52
+ where(column: ColumnName<DB, T> | Expression | string, op: BetweenOp, value: [Param | Expression, Param | Expression]): this;
53
+ /** Add a pre-built condition group (from `or()` / `and()`). */
54
+ where(condition: Expression): this;
32
55
  /**
33
56
  * Add a JOIN clause.
34
57
  *
@@ -52,13 +75,42 @@ export declare class SelectBuilder<DB extends DatabaseSchema, T extends TableNam
52
75
  anyLeftJoin(table: string, alias: string | undefined, onLeft: string, onRight: string): this;
53
76
  groupBy(...columns: (ColumnName<DB, T> | Expression | string)[]): this;
54
77
  having(column: string | Expression, op: ComparisonOp, value: Param | Expression): this;
78
+ having(condition: Expression): this;
55
79
  orderBy(column: ColumnName<DB, T> | Expression | string, direction?: SortDirection): this;
56
80
  limit(n: number | Param): this;
57
81
  offset(n: number | Param): this;
58
82
  /** Add the FINAL modifier (use sparingly — only for debug/audit). */
59
83
  final(): this;
60
- /** Add SETTINGS clause. Keys are validated to prevent injection. */
84
+ /**
85
+ * Add SAMPLE clause (ClickHouse-specific approximate query optimization).
86
+ * @param ratio — fraction (0-1) or absolute row count (>= 1)
87
+ * @param offset — optional OFFSET for reproducible sampling (0-1)
88
+ */
89
+ sample(ratio: number, offset?: number): this;
90
+ /** Add SETTINGS clause. Keys and string values are validated to prevent injection. */
61
91
  settings(s: Record<string, string | number | boolean>): this;
62
92
  compile(): CompiledQuery;
63
93
  }
94
+ type SetOperator = 'UNION ALL' | 'UNION DISTINCT' | 'INTERSECT' | 'EXCEPT';
95
+ /** Combine multiple SELECT queries with a set operator (UNION ALL, UNION DISTINCT, INTERSECT, EXCEPT). */
96
+ export declare function setOperation(operator: SetOperator, ...queries: {
97
+ compile(): CompiledQuery;
98
+ }[]): CompiledQuery;
99
+ /** Shorthand for UNION ALL. */
100
+ export declare function unionAll(...queries: {
101
+ compile(): CompiledQuery;
102
+ }[]): CompiledQuery;
103
+ /** Shorthand for UNION DISTINCT. */
104
+ export declare function unionDistinct(...queries: {
105
+ compile(): CompiledQuery;
106
+ }[]): CompiledQuery;
107
+ /** Shorthand for INTERSECT. */
108
+ export declare function intersect(...queries: {
109
+ compile(): CompiledQuery;
110
+ }[]): CompiledQuery;
111
+ /** Shorthand for EXCEPT. */
112
+ export declare function except(...queries: {
113
+ compile(): CompiledQuery;
114
+ }[]): CompiledQuery;
115
+ export {};
64
116
  //# sourceMappingURL=select-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-builder.d.ts","sourceRoot":"","sources":["../../src/query/select-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select-builder.d.ts","sourceRoot":"","sources":["../../src/query/select-builder.ts"],"names":[],"mappings":"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"}
@@ -5,15 +5,16 @@
5
5
  * literals are NOT allowed to prevent SQL injection. Use `qb.param()` to create
6
6
  * typed parameter placeholders.
7
7
  */
8
- import { Expression } from './expressions.js';
9
- import { Param } from './param.js';
10
- /** Valid ClickHouse setting name pattern. */
11
- const VALID_SETTING_KEY = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
8
+ import { Expression, Subquery } from './expressions.js';
9
+ import { createCompileContext, mergeParams, renderValue, renderWhereClause, VALID_IDENTIFIER, } from './compile-utils.js';
12
10
  export class SelectBuilder {
13
11
  _table;
14
12
  _tableAlias;
15
13
  _columns = [];
14
+ _distinct = false;
15
+ _ctes = [];
16
16
  _wheres = [];
17
+ _prewheres = [];
17
18
  _joins = [];
18
19
  _groupBy = [];
19
20
  _havings = [];
@@ -21,6 +22,8 @@ export class SelectBuilder {
21
22
  _limit = null;
22
23
  _offset = null;
23
24
  _final = false;
25
+ _sample = null;
26
+ _sampleOffset = null;
24
27
  _settings = {};
25
28
  constructor(table) {
26
29
  this._table = table;
@@ -30,13 +33,30 @@ export class SelectBuilder {
30
33
  this._tableAlias = alias;
31
34
  return this;
32
35
  }
36
+ /** Add DISTINCT to the SELECT clause. */
37
+ distinct() {
38
+ this._distinct = true;
39
+ return this;
40
+ }
41
+ /** Add a WITH (CTE) clause. The subquery is compiled and prepended to the query. */
42
+ with(name, subquery) {
43
+ if (!VALID_IDENTIFIER.test(name)) {
44
+ throw new Error(`Invalid CTE name: "${name}"`);
45
+ }
46
+ const sub = subquery instanceof Subquery ? subquery : new Subquery(subquery.compile());
47
+ this._ctes.push({ name, subquery: sub });
48
+ return this;
49
+ }
50
+ prewhere(columnOrCondition, op, value) {
51
+ this._prewheres.push(buildWhereClause(columnOrCondition, op, value));
52
+ return this;
53
+ }
33
54
  select(columns) {
34
55
  this._columns = columns;
35
56
  return this;
36
57
  }
37
- where(column, op, value) {
38
- const col = column instanceof Expression ? column.sql : column;
39
- this._wheres.push({ column: col, op, value });
58
+ where(columnOrCondition, op, value) {
59
+ this._wheres.push(buildWhereClause(columnOrCondition, op, value));
40
60
  return this;
41
61
  }
42
62
  /**
@@ -78,9 +98,13 @@ export class SelectBuilder {
78
98
  this._groupBy.push(...columns.map((c) => (c instanceof Expression ? c.sql : c)));
79
99
  return this;
80
100
  }
81
- having(column, op, value) {
82
- const col = column instanceof Expression ? column.sql : column;
83
- this._havings.push({ column: col, op, value });
101
+ having(columnOrCondition, op, value) {
102
+ if (columnOrCondition instanceof Expression && op === undefined) {
103
+ this._havings.push({ kind: 'expression', expr: columnOrCondition });
104
+ return this;
105
+ }
106
+ const col = columnOrCondition instanceof Expression ? columnOrCondition.sql : columnOrCondition;
107
+ this._havings.push({ kind: 'comparison', column: col, op: op, value: value });
84
108
  return this;
85
109
  }
86
110
  orderBy(column, direction = 'ASC') {
@@ -101,27 +125,56 @@ export class SelectBuilder {
101
125
  this._final = true;
102
126
  return this;
103
127
  }
104
- /** Add SETTINGS clause. Keys are validated to prevent injection. */
128
+ /**
129
+ * Add SAMPLE clause (ClickHouse-specific approximate query optimization).
130
+ * @param ratio — fraction (0-1) or absolute row count (>= 1)
131
+ * @param offset — optional OFFSET for reproducible sampling (0-1)
132
+ */
133
+ sample(ratio, offset) {
134
+ this._sample = ratio;
135
+ if (offset !== undefined) {
136
+ this._sampleOffset = offset;
137
+ }
138
+ return this;
139
+ }
140
+ /** Add SETTINGS clause. Keys and string values are validated to prevent injection. */
105
141
  settings(s) {
106
- for (const key of Object.keys(s)) {
107
- if (!VALID_SETTING_KEY.test(key)) {
142
+ for (const [key, val] of Object.entries(s)) {
143
+ if (!VALID_IDENTIFIER.test(key)) {
108
144
  throw new Error(`Invalid ClickHouse setting name: "${key}"`);
109
145
  }
146
+ if (typeof val === 'string' && val.includes("'")) {
147
+ throw new Error(`Setting value for "${key}" contains invalid character: '`);
148
+ }
110
149
  }
111
150
  Object.assign(this._settings, s);
112
151
  return this;
113
152
  }
114
153
  compile() {
115
- const params = {};
154
+ const ctx = createCompileContext();
116
155
  const parts = [];
156
+ // WITH (CTE) clauses
157
+ if (this._ctes.length > 0) {
158
+ const cteParts = this._ctes.map((cte) => {
159
+ mergeParams(ctx, cte.subquery.subqueryParams);
160
+ return `${cte.name} AS ${cte.subquery.sql}`;
161
+ });
162
+ parts.push(`WITH ${cteParts.join(',\n')}`);
163
+ }
117
164
  const selectList = this._columns.length > 0
118
165
  ? this._columns.map((c) => (c instanceof Expression ? c.toString() : c)).join(', ')
119
166
  : '*';
120
- parts.push(`SELECT ${selectList}`);
167
+ const distinctMod = this._distinct ? 'DISTINCT ' : '';
168
+ parts.push(`SELECT ${distinctMod}${selectList}`);
121
169
  const tableName = this._table;
122
170
  const tableRef = this._tableAlias ? `${tableName} AS ${this._tableAlias}` : tableName;
123
171
  const finalMod = this._final ? ' FINAL' : '';
124
- parts.push(`FROM ${tableRef}${finalMod}`);
172
+ const sampleMod = this._sample !== null
173
+ ? this._sampleOffset !== null
174
+ ? ` SAMPLE ${this._sample} OFFSET ${this._sampleOffset}`
175
+ : ` SAMPLE ${this._sample}`
176
+ : '';
177
+ parts.push(`FROM ${tableRef}${finalMod}${sampleMod}`);
125
178
  for (const j of this._joins) {
126
179
  const joinTable = j.alias ? `${j.table} AS ${j.alias}` : j.table;
127
180
  if (j.type === 'CROSS JOIN') {
@@ -131,21 +184,20 @@ export class SelectBuilder {
131
184
  parts.push(`${j.type} ${joinTable} ON ${j.onLeft} = ${j.onRight}`);
132
185
  }
133
186
  }
187
+ // PREWHERE (ClickHouse-specific, before WHERE)
188
+ if (this._prewheres.length > 0) {
189
+ const conditions = this._prewheres.map((w) => renderWhereClause(w, ctx));
190
+ parts.push(`PREWHERE ${conditions.join(' AND ')}`);
191
+ }
134
192
  if (this._wheres.length > 0) {
135
- const conditions = this._wheres.map((w) => {
136
- const val = renderValue(w.value, params);
137
- return `${w.column} ${w.op} ${val}`;
138
- });
193
+ const conditions = this._wheres.map((w) => renderWhereClause(w, ctx));
139
194
  parts.push(`WHERE ${conditions.join(' AND ')}`);
140
195
  }
141
196
  if (this._groupBy.length > 0) {
142
197
  parts.push(`GROUP BY ${this._groupBy.join(', ')}`);
143
198
  }
144
199
  if (this._havings.length > 0) {
145
- const conditions = this._havings.map((h) => {
146
- const val = renderValue(h.value, params);
147
- return `${h.column} ${h.op} ${val}`;
148
- });
200
+ const conditions = this._havings.map((h) => renderWhereClause(h, ctx));
149
201
  parts.push(`HAVING ${conditions.join(' AND ')}`);
150
202
  }
151
203
  if (this._orderBys.length > 0) {
@@ -153,10 +205,10 @@ export class SelectBuilder {
153
205
  parts.push(`ORDER BY ${clauses.join(', ')}`);
154
206
  }
155
207
  if (this._limit !== null) {
156
- parts.push(`LIMIT ${renderValue(this._limit, params)}`);
208
+ parts.push(`LIMIT ${renderValue(this._limit, ctx)}`);
157
209
  }
158
210
  if (this._offset !== null) {
159
- parts.push(`OFFSET ${renderValue(this._offset, params)}`);
211
+ parts.push(`OFFSET ${renderValue(this._offset, ctx)}`);
160
212
  }
161
213
  const settingsEntries = Object.entries(this._settings);
162
214
  if (settingsEntries.length > 0) {
@@ -165,18 +217,60 @@ export class SelectBuilder {
165
217
  .join(', ');
166
218
  parts.push(`SETTINGS ${settingsStr}`);
167
219
  }
168
- return { sql: parts.join('\n'), params };
220
+ return { sql: parts.join('\n'), params: ctx.params };
169
221
  }
170
222
  }
171
- function renderValue(value, params) {
172
- if (value instanceof Param) {
173
- params[value.name] = undefined;
174
- return value.toString();
223
+ /** Combine multiple SELECT queries with a set operator (UNION ALL, UNION DISTINCT, INTERSECT, EXCEPT). */
224
+ export function setOperation(operator, ...queries) {
225
+ if (queries.length < 2) {
226
+ throw new Error(`${operator} requires at least two queries`);
175
227
  }
176
- if (value instanceof Expression) {
177
- return value.sql;
228
+ const compiled = queries.map((q) => q.compile());
229
+ const params = {};
230
+ const seen = new Set();
231
+ for (const c of compiled) {
232
+ for (const key of Object.keys(c.params)) {
233
+ if (seen.has(key)) {
234
+ throw new Error(`Param name collision: "${key}" appears in multiple ${operator} branches`);
235
+ }
236
+ seen.add(key);
237
+ params[key] = c.params[key];
238
+ }
239
+ }
240
+ const sql = compiled.map((c) => c.sql).join(`\n${operator}\n`);
241
+ return { sql, params };
242
+ }
243
+ /** Shorthand for UNION ALL. */
244
+ export function unionAll(...queries) {
245
+ return setOperation('UNION ALL', ...queries);
246
+ }
247
+ /** Shorthand for UNION DISTINCT. */
248
+ export function unionDistinct(...queries) {
249
+ return setOperation('UNION DISTINCT', ...queries);
250
+ }
251
+ /** Shorthand for INTERSECT. */
252
+ export function intersect(...queries) {
253
+ return setOperation('INTERSECT', ...queries);
254
+ }
255
+ /** Shorthand for EXCEPT. */
256
+ export function except(...queries) {
257
+ return setOperation('EXCEPT', ...queries);
258
+ }
259
+ /** Parse where() arguments into a WhereClause. Shared by where() and prewhere(). */
260
+ function buildWhereClause(columnOrCondition, op, value) {
261
+ if (columnOrCondition instanceof Expression && op === undefined) {
262
+ return { kind: 'expression', expr: columnOrCondition };
263
+ }
264
+ const col = columnOrCondition instanceof Expression ? columnOrCondition.sql : columnOrCondition;
265
+ if (op === 'IS NULL' || op === 'IS NOT NULL') {
266
+ return { kind: 'unary', column: col, op };
267
+ }
268
+ if (op === 'BETWEEN' || op === 'NOT BETWEEN') {
269
+ if (!Array.isArray(value) || value.length < 2) {
270
+ throw new Error(`${op} requires a [low, high] tuple`);
271
+ }
272
+ return { kind: 'between', column: col, op, low: value[0], high: value[1] };
178
273
  }
179
- // Only numbers reach here (from limit/offset)
180
- return String(value);
274
+ return { kind: 'comparison', column: col, op: op, value: value };
181
275
  }
182
276
  //# sourceMappingURL=select-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select-builder.js","sourceRoot":"","sources":["../../src/query/select-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"select-builder.js","sourceRoot":"","sources":["../../src/query/select-builder.ts"],"names":[],"mappings":"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"}
@@ -20,11 +20,15 @@ export interface CompiledQuery {
20
20
  }
21
21
  export type SortDirection = 'ASC' | 'DESC';
22
22
  /** Comparison operators for scalar values. */
23
- export type ComparisonOp = '=' | '!=' | '>' | '<' | '>=' | '<=' | 'LIKE';
23
+ export type ComparisonOp = '=' | '!=' | '>' | '<' | '>=' | '<=' | 'LIKE' | 'NOT LIKE' | 'ILIKE' | 'NOT ILIKE';
24
24
  /** Set membership operators — require Array(...) param types. */
25
25
  export type SetOp = 'IN' | 'NOT IN';
26
+ /** Unary operators (no value argument). */
27
+ export type UnaryOp = 'IS NULL' | 'IS NOT NULL';
28
+ /** Range operators — require a [low, high] tuple. */
29
+ export type BetweenOp = 'BETWEEN' | 'NOT BETWEEN';
26
30
  /** All WHERE operators. */
27
- export type WhereOp = ComparisonOp | SetOp;
31
+ export type WhereOp = ComparisonOp | SetOp | UnaryOp | BetweenOp;
28
32
  /** ClickHouse JOIN types. */
29
33
  export type JoinType = 'JOIN' | 'INNER JOIN' | 'LEFT JOIN' | 'RIGHT JOIN' | 'FULL JOIN' | 'CROSS JOIN' | 'LEFT OUTER JOIN' | 'RIGHT OUTER JOIN' | 'FULL OUTER JOIN' | 'ANY JOIN' | 'ANY LEFT JOIN' | 'ANY RIGHT JOIN' | 'ANY INNER JOIN' | 'ALL JOIN' | 'ALL LEFT JOIN' | 'ALL RIGHT JOIN' | 'ALL INNER JOIN' | 'ASOF JOIN' | 'ASOF LEFT JOIN';
30
34
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/query/types.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,CAAC,SAAS,EAAE,MAAM,GAAG;QACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,cAAc,IAAI,MAAM,EAAE,GAAG,MAAM,CAAC;AACrE,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACvF,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7F,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAAI,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;AAE3G,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,6GAA6G;IAC7G,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;AAEzE,iEAAiE;AACjE,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEpC,2BAA2B;AAC3B,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,KAAK,CAAC;AAE3C,6BAA6B;AAC7B,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,WAAW,GACX,gBAAgB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/query/types.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,MAAM,WAAW,cAAc;IAC7B,CAAC,SAAS,EAAE,MAAM,GAAG;QACnB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC;QACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,MAAM,SAAS,CAAC,EAAE,SAAS,cAAc,IAAI,MAAM,EAAE,GAAG,MAAM,CAAC;AACrE,MAAM,MAAM,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACvF,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC7F,MAAM,MAAM,UAAU,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,IAAI,MAAM,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;AAE3G,4CAA4C;AAC5C,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,GAAG,EAAE,MAAM,CAAC;IACZ,6GAA6G;IAC7G,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,GAAG,MAAM,CAAC;AAE3C,8CAA8C;AAC9C,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,CAAC;AAE9G,iEAAiE;AACjE,MAAM,MAAM,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAC;AAEpC,2CAA2C;AAC3C,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,aAAa,CAAC;AAEhD,qDAAqD;AACrD,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAElD,2BAA2B;AAC3B,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjE,6BAA6B;AAC7B,MAAM,MAAM,QAAQ,GAChB,MAAM,GACN,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,UAAU,GACV,eAAe,GACf,gBAAgB,GAChB,gBAAgB,GAChB,WAAW,GACX,gBAAgB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Type-safe UPDATE builder for ClickHouse.
3
+ *
4
+ * ClickHouse uses ALTER TABLE ... UPDATE ... WHERE syntax.
5
+ * All values in SET and WHERE must be Param or Expression — no raw strings.
6
+ */
7
+ import type { BetweenOp, ColumnName, CompiledQuery, ComparisonOp, DatabaseSchema, SetOp, TableName, UnaryOp } from './types.js';
8
+ import { Expression } from './expressions.js';
9
+ import { Param } from './param.js';
10
+ export declare class UpdateBuilder<DB extends DatabaseSchema, T extends TableName<DB> = TableName<DB>> {
11
+ private _table;
12
+ private _cluster?;
13
+ private _sets;
14
+ private _wheres;
15
+ constructor(table: T);
16
+ /** Specify the cluster for distributed updates: ALTER TABLE ... ON CLUSTER ... */
17
+ onCluster(cluster: string): this;
18
+ /** Set a column to a parameterized value or expression. */
19
+ set(column: ColumnName<DB, T>, value: Param | Expression): this;
20
+ where(column: ColumnName<DB, T> | Expression | string, op: ComparisonOp, value: Param | Expression): this;
21
+ where(column: ColumnName<DB, T> | Expression | string, op: SetOp, value: Param | Expression): this;
22
+ where(column: ColumnName<DB, T> | Expression | string, op: UnaryOp): this;
23
+ where(column: ColumnName<DB, T> | Expression | string, op: BetweenOp, value: [Param | Expression, Param | Expression]): this;
24
+ where(condition: Expression): this;
25
+ compile(): CompiledQuery;
26
+ }
27
+ //# sourceMappingURL=update-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-builder.d.ts","sourceRoot":"","sources":["../../src/query/update-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,KAAK,EACL,SAAS,EACT,OAAO,EAER,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAcnC,qBAAa,aAAa,CACxB,EAAE,SAAS,cAAc,EACzB,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC;IAEvC,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,OAAO,CAAqB;gBAExB,KAAK,EAAE,CAAC;IAIpB,kFAAkF;IAClF,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQhC,2DAA2D;IAC3D,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI;IAQ/D,KAAK,CACH,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,EAC/C,EAAE,EAAE,YAAY,EAChB,KAAK,EAAE,KAAK,GAAG,UAAU,GACxB,IAAI;IACP,KAAK,CACH,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,EAC/C,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,KAAK,GAAG,UAAU,GACxB,IAAI;IACP,KAAK,CACH,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,EAC/C,EAAE,EAAE,OAAO,GACV,IAAI;IACP,KAAK,CACH,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,UAAU,GAAG,MAAM,EAC/C,EAAE,EAAE,SAAS,EACb,KAAK,EAAE,CAAC,KAAK,GAAG,UAAU,EAAE,KAAK,GAAG,UAAU,CAAC,GAC9C,IAAI;IACP,KAAK,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAUlC,OAAO,IAAI,aAAa;CAsBzB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Type-safe UPDATE builder for ClickHouse.
3
+ *
4
+ * ClickHouse uses ALTER TABLE ... UPDATE ... WHERE syntax.
5
+ * All values in SET and WHERE must be Param or Expression — no raw strings.
6
+ */
7
+ import { Expression } from './expressions.js';
8
+ import { createCompileContext, renderValue, renderWhereClause, VALID_IDENTIFIER, } from './compile-utils.js';
9
+ export class UpdateBuilder {
10
+ _table;
11
+ _cluster;
12
+ _sets = [];
13
+ _wheres = [];
14
+ constructor(table) {
15
+ this._table = table;
16
+ }
17
+ /** Specify the cluster for distributed updates: ALTER TABLE ... ON CLUSTER ... */
18
+ onCluster(cluster) {
19
+ if (!VALID_IDENTIFIER.test(cluster)) {
20
+ throw new Error(`Invalid cluster name: "${cluster}"`);
21
+ }
22
+ this._cluster = cluster;
23
+ return this;
24
+ }
25
+ /** Set a column to a parameterized value or expression. */
26
+ set(column, value) {
27
+ if (!VALID_IDENTIFIER.test(column)) {
28
+ throw new Error(`Invalid column name: "${column}"`);
29
+ }
30
+ this._sets.push({ column, value });
31
+ return this;
32
+ }
33
+ where(columnOrCondition, op, value) {
34
+ this._wheres.push(buildWhereClause(columnOrCondition, op, value));
35
+ return this;
36
+ }
37
+ compile() {
38
+ if (this._sets.length === 0) {
39
+ throw new Error('UPDATE requires at least one SET assignment');
40
+ }
41
+ if (this._wheres.length === 0) {
42
+ throw new Error('UPDATE requires at least one WHERE condition');
43
+ }
44
+ const ctx = createCompileContext();
45
+ const table = this._table;
46
+ const clusterClause = this._cluster ? ` ON CLUSTER ${this._cluster}` : '';
47
+ const setClauses = this._sets.map((s) => {
48
+ const val = renderValue(s.value, ctx);
49
+ return `${s.column} = ${val}`;
50
+ });
51
+ const conditions = this._wheres.map((w) => renderWhereClause(w, ctx));
52
+ const sql = `ALTER TABLE ${table}${clusterClause} UPDATE ${setClauses.join(', ')} WHERE ${conditions.join(' AND ')}`;
53
+ return { sql, params: ctx.params };
54
+ }
55
+ }
56
+ function buildWhereClause(columnOrCondition, op, value) {
57
+ if (columnOrCondition instanceof Expression && op === undefined) {
58
+ return { kind: 'expression', expr: columnOrCondition };
59
+ }
60
+ const col = columnOrCondition instanceof Expression ? columnOrCondition.sql : columnOrCondition;
61
+ if (op === 'IS NULL' || op === 'IS NOT NULL') {
62
+ return { kind: 'unary', column: col, op };
63
+ }
64
+ if (op === 'BETWEEN' || op === 'NOT BETWEEN') {
65
+ if (!Array.isArray(value) || value.length < 2) {
66
+ throw new Error(`${op} requires a [low, high] tuple`);
67
+ }
68
+ return { kind: 'between', column: col, op, low: value[0], high: value[1] };
69
+ }
70
+ return { kind: 'comparison', column: col, op: op, value: value };
71
+ }
72
+ //# sourceMappingURL=update-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-builder.js","sourceRoot":"","sources":["../../src/query/update-builder.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jantokic/chtype",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Type-safe ClickHouse toolkit for TypeScript — schema codegen, query builder, and enhanced client",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -27,10 +27,10 @@
27
27
  }
28
28
  },
29
29
  "scripts": {
30
- "build": "tsc",
30
+ "build": "bun x tsc",
31
31
  "test": "bun test",
32
- "typecheck": "tsc --noEmit",
33
- "check": "bun test && tsc --noEmit"
32
+ "typecheck": "bun x tsc --noEmit",
33
+ "check": "bun test && bun x tsc --noEmit"
34
34
  },
35
35
  "dependencies": {
36
36
  "@clickhouse/client": "^1.8.0",