@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
@@ -8,6 +8,8 @@ import type { CompiledQuery, DatabaseSchema, InsertType, TableName } from '../qu
8
8
  export interface ChtypeClient<DB extends DatabaseSchema> {
9
9
  /** Execute a compiled query and return typed rows. */
10
10
  execute<T = Record<string, unknown>>(query: CompiledQuery): Promise<T[]>;
11
+ /** Execute a compiled query and return a typed async iterable for streaming large result sets. */
12
+ stream<T = Record<string, unknown>>(query: CompiledQuery): AsyncIterable<T[]>;
11
13
  /** Execute a raw SQL query with optional parameters. */
12
14
  query<T = Record<string, unknown>>(sql: string, params?: Record<string, unknown>): Promise<T[]>;
13
15
  /** Insert rows into a table. Type-checked against the table's Insert type. */
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,gBAAgB,IAAI,UAAU,EACnC,KAAK,6BAA6B,EAEnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9F,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,cAAc;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAEzE,wDAAwD;IACxD,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAEhG,8EAA8E;IAC9E,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,cAAc,EACpD,OAAO,EAAE,6BAA6B,GACrC,YAAY,CAAC,EAAE,CAAC,CA8ClB"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,KAAK,gBAAgB,IAAI,UAAU,EACnC,KAAK,6BAA6B,EAEnC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9F,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,cAAc;IACrD,sDAAsD;IACtD,OAAO,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAEzE,kGAAkG;IAClG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,aAAa,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC;IAE9E,wDAAwD;IACxD,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAEhG,8EAA8E;IAC9E,MAAM,CAAC,CAAC,SAAS,SAAS,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpF;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;CAC1B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,cAAc,EACpD,OAAO,EAAE,6BAA6B,GACrC,YAAY,CAAC,EAAE,CAAC,CA0DlB"}
@@ -29,6 +29,17 @@ export function createClient(options) {
29
29
  });
30
30
  return result.json();
31
31
  },
32
+ async *stream(query) {
33
+ const result = await client.query({
34
+ query: query.sql,
35
+ query_params: query.params,
36
+ format: 'JSONEachRow',
37
+ });
38
+ const stream = result.stream();
39
+ for await (const rows of stream) {
40
+ yield rows.map((row) => row.json());
41
+ }
42
+ },
32
43
  async query(sql, params) {
33
44
  const result = await client.query({
34
45
  query: sql,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,YAAY,IAAI,gBAAgB,GACjC,MAAM,oBAAoB,CAAC;AA0B5B;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAsC;IAEtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEzC,OAAO;QACL,KAAK,CAAC,OAAO,CAA8B,KAAoB;YAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAChC,KAAK,EAAE,KAAK,CAAC,GAAG;gBAChB,YAAY,EAAE,KAAK,CAAC,MAAM;gBAC1B,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAK,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,KAAK,CACT,GAAW,EACX,MAAgC;YAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAChC,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,MAAM;gBACpB,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAK,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,MAAM,CAA0B,KAAQ,EAAE,IAAyB;YACvE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC9B,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,KAAK,EAAE,KAAe;gBACtB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAW;YACvB,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,GAAG;YACL,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,YAAY,IAAI,gBAAgB,GACjC,MAAM,oBAAoB,CAAC;AA6B5B;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAsC;IAEtC,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAEzC,OAAO;QACL,KAAK,CAAC,OAAO,CAA8B,KAAoB;YAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAChC,KAAK,EAAE,KAAK,CAAC,GAAG;gBAChB,YAAY,EAAE,KAAK,CAAC,MAAM;gBAC1B,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAK,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,CAAC,MAAM,CAA8B,KAAoB;YAC7D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAChC,KAAK,EAAE,KAAK,CAAC,GAAG;gBAChB,YAAY,EAAE,KAAK,CAAC,MAAM;gBAC1B,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAK,CAAC;YAClC,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;gBAChC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,KAAK,CACT,GAAW,EACX,MAAgC;YAEhC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;gBAChC,KAAK,EAAE,GAAG;gBACV,YAAY,EAAE,MAAM;gBACpB,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,EAAK,CAAC;QAC1B,CAAC;QAED,KAAK,CAAC,MAAM,CAA0B,KAAQ,EAAE,IAAyB;YACvE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAC9B,MAAM,MAAM,CAAC,MAAM,CAAC;gBAClB,KAAK,EAAE,KAAe;gBACtB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,aAAa;aACtB,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,GAAW;YACvB,MAAM,MAAM,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,KAAK,CAAC,KAAK;YACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAED,IAAI,GAAG;YACL,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared compilation utilities for SELECT, DELETE, and UPDATE builders.
3
+ */
4
+ import type { BetweenOp, ComparisonOp, SetOp, UnaryOp } from './types.js';
5
+ import { Expression } from './expressions.js';
6
+ import { Param } from './param.js';
7
+ export type WhereClause = {
8
+ kind: 'comparison';
9
+ column: string;
10
+ op: ComparisonOp | SetOp;
11
+ value: Param | Expression;
12
+ } | {
13
+ kind: 'unary';
14
+ column: string;
15
+ op: UnaryOp;
16
+ } | {
17
+ kind: 'between';
18
+ column: string;
19
+ op: BetweenOp;
20
+ low: Param | Expression;
21
+ high: Param | Expression;
22
+ } | {
23
+ kind: 'expression';
24
+ expr: Expression;
25
+ };
26
+ export interface CompileContext {
27
+ params: Record<string, unknown>;
28
+ /** Param names that came from subqueries/CTEs (external sources). */
29
+ externalParams: Set<string>;
30
+ }
31
+ export declare function createCompileContext(): CompileContext;
32
+ export declare function mergeParams(ctx: CompileContext, source: Record<string, unknown>): void;
33
+ export declare function renderValue(value: number | Param | Expression, ctx: CompileContext): string;
34
+ export declare function renderWhereClause(w: WhereClause, ctx: CompileContext): string;
35
+ /** Valid SQL identifier pattern (settings keys, CTE names, cluster names, column names). */
36
+ export declare const VALID_IDENTIFIER: RegExp;
37
+ //# sourceMappingURL=compile-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-utils.d.ts","sourceRoot":"","sources":["../../src/query/compile-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,EAAkB,UAAU,EAAY,MAAM,kBAAkB,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,KAAK,GAAG,UAAU,CAAC;IAAC,IAAI,EAAE,KAAK,GAAG,UAAU,CAAA;CAAE,GACrG;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,qEAAqE;IACrE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAgB,oBAAoB,IAAI,cAAc,CAErD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAQtF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,UAAU,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,CAiB3F;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,cAAc,GAAG,MAAM,CAoB7E;AAED,4FAA4F;AAC5F,eAAO,MAAM,gBAAgB,QAA6B,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Shared compilation utilities for SELECT, DELETE, and UPDATE builders.
3
+ */
4
+ import { ConditionGroup, Expression, Subquery } from './expressions.js';
5
+ import { Param } from './param.js';
6
+ export function createCompileContext() {
7
+ return { params: {}, externalParams: new Set() };
8
+ }
9
+ export function mergeParams(ctx, source) {
10
+ for (const key of Object.keys(source)) {
11
+ if (key in ctx.params) {
12
+ throw new Error(`Param name collision: "${key}" is used in both the subquery/CTE and outer query`);
13
+ }
14
+ ctx.params[key] = source[key];
15
+ ctx.externalParams.add(key);
16
+ }
17
+ }
18
+ export function renderValue(value, ctx) {
19
+ if (value instanceof Subquery) {
20
+ mergeParams(ctx, value.subqueryParams);
21
+ return value.sql;
22
+ }
23
+ if (value instanceof Param) {
24
+ if (ctx.externalParams.has(value.name)) {
25
+ throw new Error(`Param name collision: "${value.name}" is used in both the subquery/CTE and outer query`);
26
+ }
27
+ ctx.params[value.name] = undefined;
28
+ return value.toString();
29
+ }
30
+ if (value instanceof Expression) {
31
+ return value.sql;
32
+ }
33
+ // Only numbers reach here (from limit/offset)
34
+ return String(value);
35
+ }
36
+ export function renderWhereClause(w, ctx) {
37
+ switch (w.kind) {
38
+ case 'comparison':
39
+ return `${w.column} ${w.op} ${renderValue(w.value, ctx)}`;
40
+ case 'unary':
41
+ return `${w.column} ${w.op}`;
42
+ case 'between':
43
+ return `${w.column} ${w.op} ${renderValue(w.low, ctx)} AND ${renderValue(w.high, ctx)}`;
44
+ case 'expression': {
45
+ if (w.expr instanceof ConditionGroup) {
46
+ for (const p of w.expr.params) {
47
+ if (ctx.externalParams.has(p.name)) {
48
+ throw new Error(`Param name collision: "${p.name}" is used in both the subquery/CTE and outer query`);
49
+ }
50
+ ctx.params[p.name] = undefined;
51
+ }
52
+ }
53
+ return w.expr.sql;
54
+ }
55
+ }
56
+ }
57
+ /** Valid SQL identifier pattern (settings keys, CTE names, cluster names, column names). */
58
+ export const VALID_IDENTIFIER = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
59
+ //# sourceMappingURL=compile-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-utils.js","sourceRoot":"","sources":["../../src/query/compile-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Type-safe DELETE builder for ClickHouse.
3
+ *
4
+ * ClickHouse uses ALTER TABLE ... DELETE WHERE syntax.
5
+ * All values in 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 DeleteBuilder<DB extends DatabaseSchema, T extends TableName<DB> = TableName<DB>> {
11
+ private _table;
12
+ private _cluster?;
13
+ private _wheres;
14
+ constructor(table: T);
15
+ /** Specify the cluster for distributed deletes: ALTER TABLE ... ON CLUSTER ... */
16
+ onCluster(cluster: string): this;
17
+ where(column: ColumnName<DB, T> | Expression | string, op: ComparisonOp, value: Param | Expression): this;
18
+ where(column: ColumnName<DB, T> | Expression | string, op: SetOp, value: Param | Expression): this;
19
+ where(column: ColumnName<DB, T> | Expression | string, op: UnaryOp): this;
20
+ where(column: ColumnName<DB, T> | Expression | string, op: BetweenOp, value: [Param | Expression, Param | Expression]): this;
21
+ where(condition: Expression): this;
22
+ compile(): CompiledQuery;
23
+ }
24
+ //# sourceMappingURL=delete-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-builder.d.ts","sourceRoot":"","sources":["../../src/query/delete-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;AAQnC,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,OAAO,CAAqB;gBAExB,KAAK,EAAE,CAAC;IAIpB,kFAAkF;IAClF,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAQhC,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;CAazB"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Type-safe DELETE builder for ClickHouse.
3
+ *
4
+ * ClickHouse uses ALTER TABLE ... DELETE WHERE syntax.
5
+ * All values in WHERE must be Param or Expression — no raw strings.
6
+ */
7
+ import { Expression } from './expressions.js';
8
+ import { createCompileContext, renderWhereClause, VALID_IDENTIFIER, } from './compile-utils.js';
9
+ export class DeleteBuilder {
10
+ _table;
11
+ _cluster;
12
+ _wheres = [];
13
+ constructor(table) {
14
+ this._table = table;
15
+ }
16
+ /** Specify the cluster for distributed deletes: ALTER TABLE ... ON CLUSTER ... */
17
+ onCluster(cluster) {
18
+ if (!VALID_IDENTIFIER.test(cluster)) {
19
+ throw new Error(`Invalid cluster name: "${cluster}"`);
20
+ }
21
+ this._cluster = cluster;
22
+ return this;
23
+ }
24
+ where(columnOrCondition, op, value) {
25
+ this._wheres.push(buildWhereClause(columnOrCondition, op, value));
26
+ return this;
27
+ }
28
+ compile() {
29
+ if (this._wheres.length === 0) {
30
+ throw new Error('DELETE requires at least one WHERE condition');
31
+ }
32
+ const ctx = createCompileContext();
33
+ const table = this._table;
34
+ const clusterClause = this._cluster ? ` ON CLUSTER ${this._cluster}` : '';
35
+ const conditions = this._wheres.map((w) => renderWhereClause(w, ctx));
36
+ const sql = `ALTER TABLE ${table}${clusterClause} DELETE WHERE ${conditions.join(' AND ')}`;
37
+ return { sql, params: ctx.params };
38
+ }
39
+ }
40
+ function buildWhereClause(columnOrCondition, op, value) {
41
+ if (columnOrCondition instanceof Expression && op === undefined) {
42
+ return { kind: 'expression', expr: columnOrCondition };
43
+ }
44
+ const col = columnOrCondition instanceof Expression ? columnOrCondition.sql : columnOrCondition;
45
+ if (op === 'IS NULL' || op === 'IS NOT NULL') {
46
+ return { kind: 'unary', column: col, op };
47
+ }
48
+ if (op === 'BETWEEN' || op === 'NOT BETWEEN') {
49
+ if (!Array.isArray(value) || value.length < 2) {
50
+ throw new Error(`${op} requires a [low, high] tuple`);
51
+ }
52
+ return { kind: 'between', column: col, op, low: value[0], high: value[1] };
53
+ }
54
+ return { kind: 'comparison', column: col, op: op, value: value };
55
+ }
56
+ //# sourceMappingURL=delete-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-builder.js","sourceRoot":"","sources":["../../src/query/delete-builder.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import type { CompiledQuery } from './types.js';
2
+ import { Param } from './param.js';
1
3
  /** Represents a raw SQL expression with an optional alias. */
2
4
  export declare class Expression {
3
5
  readonly sql: string;
@@ -6,6 +8,22 @@ export declare class Expression {
6
8
  as(alias: string): Expression;
7
9
  toString(): string;
8
10
  }
11
+ /** A condition tuple: [column, operator, value]. */
12
+ type ConditionTuple = [column: string, op: string, value: Param | Expression];
13
+ /** An expression that carries param references for registration during compile. */
14
+ export declare class ConditionGroup extends Expression {
15
+ readonly params: Param[];
16
+ constructor(conditions: (ConditionTuple | Expression)[], operator: 'AND' | 'OR');
17
+ }
18
+ /** Group conditions with OR. */
19
+ export declare function or(...conditions: (ConditionTuple | Expression)[]): ConditionGroup;
20
+ /** Group conditions with AND. */
21
+ export declare function and(...conditions: (ConditionTuple | Expression)[]): ConditionGroup;
22
+ /** A subquery expression — wraps a compiled SELECT in parentheses and carries its params. */
23
+ export declare class Subquery extends Expression {
24
+ readonly subqueryParams: Record<string, unknown>;
25
+ constructor(compiled: CompiledQuery);
26
+ }
9
27
  /** ClickHouse function builders. */
10
28
  export declare const fn: {
11
29
  argMax(column: string, versionColumn: string): Expression;
@@ -22,7 +40,54 @@ export declare const fn: {
22
40
  uniqExact(column: string): Expression;
23
41
  toStartOfDay(column: string): Expression;
24
42
  toStartOfHour(column: string): Expression;
43
+ arrayMap(lambda: string, column: string): Expression;
44
+ arrayFilter(lambda: string, column: string): Expression;
45
+ arrayExists(lambda: string, column: string): Expression;
46
+ arrayAll(lambda: string, column: string): Expression;
47
+ arraySort(column: string): Expression;
48
+ arrayReverse(column: string): Expression;
49
+ arrayDistinct(column: string): Expression;
50
+ arrayFlatten(column: string): Expression;
51
+ arrayConcat(...columns: string[]): Expression;
52
+ arraySlice(column: string, offset: number, length?: number): Expression;
53
+ length(column: string): Expression;
54
+ has(column: string, element: string): Expression;
55
+ indexOf(column: string, element: string): Expression;
56
+ mapKeys(column: string): Expression;
57
+ mapValues(column: string): Expression;
58
+ mapContains(column: string, key: string): Expression;
59
+ tupleElement(column: string, index: number): Expression;
60
+ toStartOfWeek(column: string): Expression;
61
+ toStartOfMonth(column: string): Expression;
62
+ toStartOfYear(column: string): Expression;
63
+ toStartOfMinute(column: string): Expression;
64
+ toDate(column: string): Expression;
65
+ toDateTime(column: string): Expression;
66
+ now(): Expression;
67
+ today(): Expression;
68
+ dateDiff(unit: string, start: string, end: string): Expression;
69
+ lower(column: string): Expression;
70
+ upper(column: string): Expression;
71
+ trim(column: string): Expression;
72
+ concat(...columns: string[]): Expression;
73
+ substring(column: string, offset: number, length?: number): Expression;
74
+ if_(condition: string, then: string, else_: string): Expression;
75
+ multiIf(...args: string[]): Expression;
76
+ coalesce(...columns: string[]): Expression;
77
+ toUInt32(column: string): Expression;
78
+ toUInt64(column: string): Expression;
79
+ toInt32(column: string): Expression;
80
+ toFloat64(column: string): Expression;
81
+ toString_(column: string): Expression;
82
+ quantile(level: number, column: string): Expression;
83
+ median(column: string): Expression;
84
+ any(column: string): Expression;
85
+ anyLast(column: string): Expression;
86
+ sumIf(column: string, condition: string): Expression;
87
+ countIf(condition: string): Expression;
88
+ avgIf(column: string, condition: string): Expression;
25
89
  /** Raw SQL expression — escape hatch for anything not covered. */
26
90
  raw(sql: string): Expression;
27
91
  };
92
+ export {};
28
93
  //# sourceMappingURL=expressions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/query/expressions.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,qBAAa,UAAU;aAEH,GAAG,EAAE,MAAM;aACX,KAAK,CAAC,EAAE,MAAM;gBADd,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,YAAA;IAGhC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAI7B,QAAQ,IAAI,MAAM;CAGnB;AAED,oCAAoC;AACpC,eAAO,MAAM,EAAE;mBACE,MAAM,iBAAiB,MAAM,GAAG,UAAU;mBAG1C,MAAM,iBAAiB,MAAM,GAAG,UAAU;mBAG1C,MAAM,GAAG,UAAU;0BAGZ,MAAM,GAAG,UAAU;gBAG7B,MAAM,GAAG,UAAU;gBAGnB,MAAM,GAAG,UAAU;gBAGnB,MAAM,GAAG,UAAU;gBAGnB,MAAM,GAAG,UAAU;uBAGZ,MAAM,GAAG,UAAU;sBAGpB,MAAM,GAAG,UAAU;iBAGxB,MAAM,GAAG,UAAU;sBAGd,MAAM,GAAG,UAAU;yBAGhB,MAAM,GAAG,UAAU;0BAGlB,MAAM,GAAG,UAAU;IAGzC,kEAAkE;aACzD,MAAM,GAAG,UAAU;CAG7B,CAAC"}
1
+ {"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/query/expressions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,8DAA8D;AAC9D,qBAAa,UAAU;aAEH,GAAG,EAAE,MAAM;aACX,KAAK,CAAC,EAAE,MAAM;gBADd,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,MAAM,YAAA;IAGhC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU;IAI7B,QAAQ,IAAI,MAAM;CAGnB;AAED,oDAAoD;AACpD,KAAK,cAAc,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC;AAE9E,mFAAmF;AACnF,qBAAa,cAAe,SAAQ,UAAU;IAC5C,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC;gBAEb,UAAU,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,GAAG,IAAI;CAwBhF;AAED,gCAAgC;AAChC,wBAAgB,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,GAAG,cAAc,CAEjF;AAED,iCAAiC;AACjC,wBAAgB,GAAG,CAAC,GAAG,UAAU,EAAE,CAAC,cAAc,GAAG,UAAU,CAAC,EAAE,GAAG,cAAc,CAElF;AAED,6FAA6F;AAC7F,qBAAa,QAAS,SAAQ,UAAU;IACtC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAErC,QAAQ,EAAE,aAAa;CAIpC;AAED,oCAAoC;AACpC,eAAO,MAAM,EAAE;mBACE,MAAM,iBAAiB,MAAM,GAAG,UAAU;mBAG1C,MAAM,iBAAiB,MAAM,GAAG,UAAU;mBAG1C,MAAM,GAAG,UAAU;0BAGZ,MAAM,GAAG,UAAU;gBAG7B,MAAM,GAAG,UAAU;gBAGnB,MAAM,GAAG,UAAU;gBAGnB,MAAM,GAAG,UAAU;gBAGnB,MAAM,GAAG,UAAU;uBAGZ,MAAM,GAAG,UAAU;sBAGpB,MAAM,GAAG,UAAU;iBAGxB,MAAM,GAAG,UAAU;sBAGd,MAAM,GAAG,UAAU;yBAGhB,MAAM,GAAG,UAAU;0BAGlB,MAAM,GAAG,UAAU;qBAKxB,MAAM,UAAU,MAAM,GAAG,UAAU;wBAGhC,MAAM,UAAU,MAAM,GAAG,UAAU;wBAGnC,MAAM,UAAU,MAAM,GAAG,UAAU;qBAGtC,MAAM,UAAU,MAAM,GAAG,UAAU;sBAGlC,MAAM,GAAG,UAAU;yBAGhB,MAAM,GAAG,UAAU;0BAGlB,MAAM,GAAG,UAAU;yBAGpB,MAAM,GAAG,UAAU;4BAGhB,MAAM,EAAE,GAAG,UAAU;uBAG1B,MAAM,UAAU,MAAM,WAAW,MAAM,GAAG,UAAU;mBAIxD,MAAM,GAAG,UAAU;gBAGtB,MAAM,WAAW,MAAM,GAAG,UAAU;oBAGhC,MAAM,WAAW,MAAM,GAAG,UAAU;oBAMpC,MAAM,GAAG,UAAU;sBAGjB,MAAM,GAAG,UAAU;wBAGjB,MAAM,OAAO,MAAM,GAAG,UAAU;yBAM/B,MAAM,SAAS,MAAM,GAAG,UAAU;0BAMjC,MAAM,GAAG,UAAU;2BAGlB,MAAM,GAAG,UAAU;0BAGpB,MAAM,GAAG,UAAU;4BAGjB,MAAM,GAAG,UAAU;mBAG5B,MAAM,GAAG,UAAU;uBAGf,MAAM,GAAG,UAAU;WAG/B,UAAU;aAGR,UAAU;mBAGJ,MAAM,SAAS,MAAM,OAAO,MAAM,GAAG,UAAU;kBAMhD,MAAM,GAAG,UAAU;kBAGnB,MAAM,GAAG,UAAU;iBAGpB,MAAM,GAAG,UAAU;uBAGb,MAAM,EAAE,GAAG,UAAU;sBAGtB,MAAM,UAAU,MAAM,WAAW,MAAM,GAAG,UAAU;mBAOvD,MAAM,QAAQ,MAAM,SAAS,MAAM,GAAG,UAAU;qBAG9C,MAAM,EAAE,GAAG,UAAU;yBAGjB,MAAM,EAAE,GAAG,UAAU;qBAMzB,MAAM,GAAG,UAAU;qBAGnB,MAAM,GAAG,UAAU;oBAGpB,MAAM,GAAG,UAAU;sBAGjB,MAAM,GAAG,UAAU;sBAGnB,MAAM,GAAG,UAAU;oBAMrB,MAAM,UAAU,MAAM,GAAG,UAAU;mBAGpC,MAAM,GAAG,UAAU;gBAGtB,MAAM,GAAG,UAAU;oBAGf,MAAM,GAAG,UAAU;kBAGrB,MAAM,aAAa,MAAM,GAAG,UAAU;uBAGjC,MAAM,GAAG,UAAU;kBAGxB,MAAM,aAAa,MAAM,GAAG,UAAU;IAIpD,kEAAkE;aACzD,MAAM,GAAG,UAAU;CAG7B,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { Param } from './param.js';
1
2
  /** Represents a raw SQL expression with an optional alias. */
2
3
  export class Expression {
3
4
  sql;
@@ -13,6 +14,50 @@ export class Expression {
13
14
  return this.alias ? `${this.sql} AS ${this.alias}` : this.sql;
14
15
  }
15
16
  }
17
+ /** An expression that carries param references for registration during compile. */
18
+ export class ConditionGroup extends Expression {
19
+ params;
20
+ constructor(conditions, operator) {
21
+ const params = [];
22
+ const parts = conditions.map((c) => {
23
+ if (c instanceof ConditionGroup) {
24
+ params.push(...c.params);
25
+ return c.sql;
26
+ }
27
+ if (c instanceof Expression) {
28
+ return c.sql;
29
+ }
30
+ const [col, op, val] = c;
31
+ if (val instanceof ConditionGroup) {
32
+ params.push(...val.params);
33
+ return `${col} ${op} ${val.sql}`;
34
+ }
35
+ if (val instanceof Param) {
36
+ params.push(val);
37
+ return `${col} ${op} ${val.toString()}`;
38
+ }
39
+ return `${col} ${op} ${val.sql}`;
40
+ });
41
+ super(`(${parts.join(` ${operator} `)})`);
42
+ this.params = params;
43
+ }
44
+ }
45
+ /** Group conditions with OR. */
46
+ export function or(...conditions) {
47
+ return new ConditionGroup(conditions, 'OR');
48
+ }
49
+ /** Group conditions with AND. */
50
+ export function and(...conditions) {
51
+ return new ConditionGroup(conditions, 'AND');
52
+ }
53
+ /** A subquery expression — wraps a compiled SELECT in parentheses and carries its params. */
54
+ export class Subquery extends Expression {
55
+ subqueryParams;
56
+ constructor(compiled) {
57
+ super(`(${compiled.sql})`);
58
+ this.subqueryParams = compiled.params;
59
+ }
60
+ }
16
61
  /** ClickHouse function builders. */
17
62
  export const fn = {
18
63
  argMax(column, versionColumn) {
@@ -57,6 +102,154 @@ export const fn = {
57
102
  toStartOfHour(column) {
58
103
  return new Expression(`toStartOfHour(${column})`);
59
104
  },
105
+ // --- Array functions ---
106
+ arrayMap(lambda, column) {
107
+ return new Expression(`arrayMap(${lambda}, ${column})`);
108
+ },
109
+ arrayFilter(lambda, column) {
110
+ return new Expression(`arrayFilter(${lambda}, ${column})`);
111
+ },
112
+ arrayExists(lambda, column) {
113
+ return new Expression(`arrayExists(${lambda}, ${column})`);
114
+ },
115
+ arrayAll(lambda, column) {
116
+ return new Expression(`arrayAll(${lambda}, ${column})`);
117
+ },
118
+ arraySort(column) {
119
+ return new Expression(`arraySort(${column})`);
120
+ },
121
+ arrayReverse(column) {
122
+ return new Expression(`arrayReverse(${column})`);
123
+ },
124
+ arrayDistinct(column) {
125
+ return new Expression(`arrayDistinct(${column})`);
126
+ },
127
+ arrayFlatten(column) {
128
+ return new Expression(`arrayFlatten(${column})`);
129
+ },
130
+ arrayConcat(...columns) {
131
+ return new Expression(`arrayConcat(${columns.join(', ')})`);
132
+ },
133
+ arraySlice(column, offset, length) {
134
+ const args = length !== undefined ? `${column}, ${offset}, ${length}` : `${column}, ${offset}`;
135
+ return new Expression(`arraySlice(${args})`);
136
+ },
137
+ length(column) {
138
+ return new Expression(`length(${column})`);
139
+ },
140
+ has(column, element) {
141
+ return new Expression(`has(${column}, ${element})`);
142
+ },
143
+ indexOf(column, element) {
144
+ return new Expression(`indexOf(${column}, ${element})`);
145
+ },
146
+ // --- Map functions ---
147
+ mapKeys(column) {
148
+ return new Expression(`mapKeys(${column})`);
149
+ },
150
+ mapValues(column) {
151
+ return new Expression(`mapValues(${column})`);
152
+ },
153
+ mapContains(column, key) {
154
+ return new Expression(`mapContains(${column}, ${key})`);
155
+ },
156
+ // --- Tuple functions ---
157
+ tupleElement(column, index) {
158
+ return new Expression(`tupleElement(${column}, ${index})`);
159
+ },
160
+ // --- Date/time functions ---
161
+ toStartOfWeek(column) {
162
+ return new Expression(`toStartOfWeek(${column})`);
163
+ },
164
+ toStartOfMonth(column) {
165
+ return new Expression(`toStartOfMonth(${column})`);
166
+ },
167
+ toStartOfYear(column) {
168
+ return new Expression(`toStartOfYear(${column})`);
169
+ },
170
+ toStartOfMinute(column) {
171
+ return new Expression(`toStartOfMinute(${column})`);
172
+ },
173
+ toDate(column) {
174
+ return new Expression(`toDate(${column})`);
175
+ },
176
+ toDateTime(column) {
177
+ return new Expression(`toDateTime(${column})`);
178
+ },
179
+ now() {
180
+ return new Expression('now()');
181
+ },
182
+ today() {
183
+ return new Expression('today()');
184
+ },
185
+ dateDiff(unit, start, end) {
186
+ return new Expression(`dateDiff('${unit}', ${start}, ${end})`);
187
+ },
188
+ // --- String functions ---
189
+ lower(column) {
190
+ return new Expression(`lower(${column})`);
191
+ },
192
+ upper(column) {
193
+ return new Expression(`upper(${column})`);
194
+ },
195
+ trim(column) {
196
+ return new Expression(`trimBoth(${column})`);
197
+ },
198
+ concat(...columns) {
199
+ return new Expression(`concat(${columns.join(', ')})`);
200
+ },
201
+ substring(column, offset, length) {
202
+ const args = length !== undefined ? `${column}, ${offset}, ${length}` : `${column}, ${offset}`;
203
+ return new Expression(`substring(${args})`);
204
+ },
205
+ // --- Conditional ---
206
+ if_(condition, then, else_) {
207
+ return new Expression(`if(${condition}, ${then}, ${else_})`);
208
+ },
209
+ multiIf(...args) {
210
+ return new Expression(`multiIf(${args.join(', ')})`);
211
+ },
212
+ coalesce(...columns) {
213
+ return new Expression(`coalesce(${columns.join(', ')})`);
214
+ },
215
+ // --- Type conversion ---
216
+ toUInt32(column) {
217
+ return new Expression(`toUInt32(${column})`);
218
+ },
219
+ toUInt64(column) {
220
+ return new Expression(`toUInt64(${column})`);
221
+ },
222
+ toInt32(column) {
223
+ return new Expression(`toInt32(${column})`);
224
+ },
225
+ toFloat64(column) {
226
+ return new Expression(`toFloat64(${column})`);
227
+ },
228
+ toString_(column) {
229
+ return new Expression(`toString(${column})`);
230
+ },
231
+ // --- Aggregate (additional) ---
232
+ quantile(level, column) {
233
+ return new Expression(`quantile(${level})(${column})`);
234
+ },
235
+ median(column) {
236
+ return new Expression(`median(${column})`);
237
+ },
238
+ any(column) {
239
+ return new Expression(`any(${column})`);
240
+ },
241
+ anyLast(column) {
242
+ return new Expression(`anyLast(${column})`);
243
+ },
244
+ sumIf(column, condition) {
245
+ return new Expression(`sumIf(${column}, ${condition})`);
246
+ },
247
+ countIf(condition) {
248
+ return new Expression(`countIf(${condition})`);
249
+ },
250
+ avgIf(column, condition) {
251
+ return new Expression(`avgIf(${column}, ${condition})`);
252
+ },
60
253
  /** Raw SQL expression — escape hatch for anything not covered. */
61
254
  raw(sql) {
62
255
  return new Expression(sql);
@@ -1 +1 @@
1
- {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../src/query/expressions.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,MAAM,OAAO,UAAU;IAEH;IACA;IAFlB,YACkB,GAAW,EACX,KAAc;QADd,QAAG,GAAH,GAAG,CAAQ;QACX,UAAK,GAAL,KAAK,CAAS;IAC7B,CAAC;IAEJ,EAAE,CAAC,KAAa;QACd,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACzC,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IAChE,CAAC;CACF;AAED,oCAAoC;AACpC,MAAM,CAAC,MAAM,EAAE,GAAG;IAChB,MAAM,CAAC,MAAc,EAAE,aAAqB;QAC1C,OAAO,IAAI,UAAU,CAAC,UAAU,MAAM,KAAK,aAAa,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,CAAC,MAAc,EAAE,aAAqB;QAC1C,OAAO,IAAI,UAAU,CAAC,UAAU,MAAM,KAAK,aAAa,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,KAAK,CAAC,MAAe;QACnB,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjE,CAAC;IACD,aAAa,CAAC,MAAc;QAC1B,OAAO,IAAI,UAAU,CAAC,kBAAkB,MAAM,GAAG,CAAC,CAAC;IACrD,CAAC;IACD,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,UAAU,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,UAAU,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,UAAU,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,UAAU,CAAC,OAAO,MAAM,GAAG,CAAC,CAAC;IAC1C,CAAC;IACD,UAAU,CAAC,MAAc;QACvB,OAAO,IAAI,UAAU,CAAC,cAAc,MAAM,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,UAAU,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,IAAI,CAAC,MAAc;QACjB,OAAO,IAAI,UAAU,CAAC,QAAQ,MAAM,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,SAAS,CAAC,MAAc;QACtB,OAAO,IAAI,UAAU,CAAC,aAAa,MAAM,GAAG,CAAC,CAAC;IAChD,CAAC;IACD,YAAY,CAAC,MAAc;QACzB,OAAO,IAAI,UAAU,CAAC,gBAAgB,MAAM,GAAG,CAAC,CAAC;IACnD,CAAC;IACD,aAAa,CAAC,MAAc;QAC1B,OAAO,IAAI,UAAU,CAAC,iBAAiB,MAAM,GAAG,CAAC,CAAC;IACpD,CAAC;IACD,kEAAkE;IAClE,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../src/query/expressions.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  export { createQueryBuilder, type QueryBuilder } from './query-builder.js';
2
- export { SelectBuilder } from './select-builder.js';
2
+ export { SelectBuilder, unionAll, unionDistinct, intersect, except, setOperation } from './select-builder.js';
3
3
  export { InsertBuilder } from './insert-builder.js';
4
- export { Expression, fn } from './expressions.js';
4
+ export { DeleteBuilder } from './delete-builder.js';
5
+ export { UpdateBuilder } from './update-builder.js';
6
+ export { Expression, ConditionGroup, Subquery, fn, or, and } from './expressions.js';
5
7
  export { Param, param, type ClickHouseParamType } from './param.js';
6
- export type { DatabaseSchema, TableName, RowType, InsertType, ColumnName, CompiledQuery, SortDirection, ComparisonOp, SetOp, WhereOp, JoinType, } from './types.js';
8
+ export type { DatabaseSchema, TableName, RowType, InsertType, ColumnName, CompiledQuery, SortDirection, ComparisonOp, SetOp, UnaryOp, BetweenOp, WhereOp, JoinType, } from './types.js';
7
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,KAAK,EACL,OAAO,EACP,QAAQ,GACT,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9G,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,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,EACV,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,KAAK,EACL,OAAO,EACP,SAAS,EACT,OAAO,EACP,QAAQ,GACT,MAAM,YAAY,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export { createQueryBuilder } from './query-builder.js';
2
- export { SelectBuilder } from './select-builder.js';
2
+ export { SelectBuilder, unionAll, unionDistinct, intersect, except, setOperation } from './select-builder.js';
3
3
  export { InsertBuilder } from './insert-builder.js';
4
- export { Expression, fn } from './expressions.js';
4
+ export { DeleteBuilder } from './delete-builder.js';
5
+ export { UpdateBuilder } from './update-builder.js';
6
+ export { Expression, ConditionGroup, Subquery, fn, or, and } from './expressions.js';
5
7
  export { Param, param } from './param.js';
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAA4B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC9G,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,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,KAAK,EAAE,KAAK,EAA4B,MAAM,YAAY,CAAC"}
@@ -1,12 +1,20 @@
1
- import type { DatabaseSchema, TableName } from './types.js';
1
+ import type { CompiledQuery, DatabaseSchema, TableName } from './types.js';
2
2
  import { type ClickHouseParamType, Param } from './param.js';
3
3
  import { SelectBuilder } from './select-builder.js';
4
4
  import { InsertBuilder } from './insert-builder.js';
5
- import { fn } from './expressions.js';
5
+ import { DeleteBuilder } from './delete-builder.js';
6
+ import { UpdateBuilder } from './update-builder.js';
7
+ import { fn, Subquery } from './expressions.js';
6
8
  export interface QueryBuilder<DB extends DatabaseSchema> {
7
9
  selectFrom<T extends TableName<DB>>(table: T): SelectBuilder<DB, T>;
8
10
  insertInto<T extends TableName<DB>>(table: T): InsertBuilder<DB, T>;
11
+ deleteFrom<T extends TableName<DB>>(table: T): DeleteBuilder<DB, T>;
12
+ update<T extends TableName<DB>>(table: T): UpdateBuilder<DB, T>;
9
13
  param(name: string, type: ClickHouseParamType): Param;
14
+ /** Wrap a compiled query as a subquery expression for use in WHERE IN / NOT IN. */
15
+ subquery(builder: {
16
+ compile(): CompiledQuery;
17
+ }): Subquery;
10
18
  fn: typeof fn;
11
19
  }
12
20
  /**