@jantokic/chtype 0.2.0 → 0.4.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.
- package/dist/client/client.d.ts +4 -2
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +11 -0
- package/dist/client/client.js.map +1 -1
- package/dist/migrate/differ.d.ts +43 -0
- package/dist/migrate/differ.d.ts.map +1 -0
- package/dist/migrate/differ.js +77 -0
- package/dist/migrate/differ.js.map +1 -0
- package/dist/migrate/generator.d.ts +33 -0
- package/dist/migrate/generator.d.ts.map +1 -0
- package/dist/migrate/generator.js +125 -0
- package/dist/migrate/generator.js.map +1 -0
- package/dist/migrate/index.d.ts +4 -0
- package/dist/migrate/index.d.ts.map +1 -0
- package/dist/migrate/index.js +4 -0
- package/dist/migrate/index.js.map +1 -0
- package/dist/migrate/snapshot.d.ts +31 -0
- package/dist/migrate/snapshot.d.ts.map +1 -0
- package/dist/migrate/snapshot.js +68 -0
- package/dist/migrate/snapshot.js.map +1 -0
- package/dist/query/compile-utils.d.ts +37 -0
- package/dist/query/compile-utils.d.ts.map +1 -0
- package/dist/query/compile-utils.js +59 -0
- package/dist/query/compile-utils.js.map +1 -0
- package/dist/query/delete-builder.d.ts +24 -0
- package/dist/query/delete-builder.d.ts.map +1 -0
- package/dist/query/delete-builder.js +56 -0
- package/dist/query/delete-builder.js.map +1 -0
- package/dist/query/expressions.d.ts +70 -3
- package/dist/query/expressions.d.ts.map +1 -1
- package/dist/query/expressions.js +194 -1
- package/dist/query/expressions.js.map +1 -1
- package/dist/query/index.d.ts +6 -3
- package/dist/query/index.d.ts.map +1 -1
- package/dist/query/index.js +5 -2
- package/dist/query/index.js.map +1 -1
- package/dist/query/query-builder.d.ts +10 -2
- package/dist/query/query-builder.d.ts.map +1 -1
- package/dist/query/query-builder.js +12 -1
- package/dist/query/query-builder.js.map +1 -1
- package/dist/query/select-builder.d.ts +61 -5
- package/dist/query/select-builder.d.ts.map +1 -1
- package/dist/query/select-builder.js +129 -35
- package/dist/query/select-builder.js.map +1 -1
- package/dist/query/sql-template.d.ts +37 -0
- package/dist/query/sql-template.d.ts.map +1 -0
- package/dist/query/sql-template.js +80 -0
- package/dist/query/sql-template.js.map +1 -0
- package/dist/query/types.d.ts +12 -4
- package/dist/query/types.d.ts.map +1 -1
- package/dist/query/update-builder.d.ts +27 -0
- package/dist/query/update-builder.d.ts.map +1 -0
- package/dist/query/update-builder.js +72 -0
- package/dist/query/update-builder.js.map +1 -0
- package/package.json +8 -4
|
@@ -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,11 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import type { CompiledQuery } from './types.js';
|
|
2
|
+
import { Param } from './param.js';
|
|
3
|
+
/** Represents a raw SQL expression with an optional alias. TType carries the result type for typed expressions. */
|
|
4
|
+
export declare class Expression<TType = unknown> {
|
|
3
5
|
readonly sql: string;
|
|
4
6
|
readonly alias?: string | undefined;
|
|
5
7
|
constructor(sql: string, alias?: string | undefined);
|
|
6
|
-
as(alias:
|
|
8
|
+
as<A extends string>(alias: A): Expression<TType> & {
|
|
9
|
+
alias: A;
|
|
10
|
+
};
|
|
7
11
|
toString(): string;
|
|
8
12
|
}
|
|
13
|
+
/** A condition tuple: [column, operator, value]. */
|
|
14
|
+
type ConditionTuple = [column: string, op: string, value: Param | Expression];
|
|
15
|
+
/** An expression that carries param references for registration during compile. */
|
|
16
|
+
export declare class ConditionGroup extends Expression {
|
|
17
|
+
readonly params: Param[];
|
|
18
|
+
constructor(conditions: (ConditionTuple | Expression)[], operator: 'AND' | 'OR');
|
|
19
|
+
}
|
|
20
|
+
/** Group conditions with OR. */
|
|
21
|
+
export declare function or(...conditions: (ConditionTuple | Expression)[]): ConditionGroup;
|
|
22
|
+
/** Group conditions with AND. */
|
|
23
|
+
export declare function and(...conditions: (ConditionTuple | Expression)[]): ConditionGroup;
|
|
24
|
+
/** A subquery expression — wraps a compiled SELECT in parentheses and carries its params. */
|
|
25
|
+
export declare class Subquery extends Expression {
|
|
26
|
+
readonly subqueryParams: Record<string, unknown>;
|
|
27
|
+
constructor(compiled: CompiledQuery<unknown>);
|
|
28
|
+
}
|
|
9
29
|
/** ClickHouse function builders. */
|
|
10
30
|
export declare const fn: {
|
|
11
31
|
argMax(column: string, versionColumn: string): Expression;
|
|
@@ -22,7 +42,54 @@ export declare const fn: {
|
|
|
22
42
|
uniqExact(column: string): Expression;
|
|
23
43
|
toStartOfDay(column: string): Expression;
|
|
24
44
|
toStartOfHour(column: string): Expression;
|
|
45
|
+
arrayMap(lambda: string, column: string): Expression;
|
|
46
|
+
arrayFilter(lambda: string, column: string): Expression;
|
|
47
|
+
arrayExists(lambda: string, column: string): Expression;
|
|
48
|
+
arrayAll(lambda: string, column: string): Expression;
|
|
49
|
+
arraySort(column: string): Expression;
|
|
50
|
+
arrayReverse(column: string): Expression;
|
|
51
|
+
arrayDistinct(column: string): Expression;
|
|
52
|
+
arrayFlatten(column: string): Expression;
|
|
53
|
+
arrayConcat(...columns: string[]): Expression;
|
|
54
|
+
arraySlice(column: string, offset: number, length?: number): Expression;
|
|
55
|
+
length(column: string): Expression;
|
|
56
|
+
has(column: string, element: string): Expression;
|
|
57
|
+
indexOf(column: string, element: string): Expression;
|
|
58
|
+
mapKeys(column: string): Expression;
|
|
59
|
+
mapValues(column: string): Expression;
|
|
60
|
+
mapContains(column: string, key: string): Expression;
|
|
61
|
+
tupleElement(column: string, index: number): Expression;
|
|
62
|
+
toStartOfWeek(column: string): Expression;
|
|
63
|
+
toStartOfMonth(column: string): Expression;
|
|
64
|
+
toStartOfYear(column: string): Expression;
|
|
65
|
+
toStartOfMinute(column: string): Expression;
|
|
66
|
+
toDate(column: string): Expression;
|
|
67
|
+
toDateTime(column: string): Expression;
|
|
68
|
+
now(): Expression;
|
|
69
|
+
today(): Expression;
|
|
70
|
+
dateDiff(unit: string, start: string, end: string): Expression;
|
|
71
|
+
lower(column: string): Expression;
|
|
72
|
+
upper(column: string): Expression;
|
|
73
|
+
trim(column: string): Expression;
|
|
74
|
+
concat(...columns: string[]): Expression;
|
|
75
|
+
substring(column: string, offset: number, length?: number): Expression;
|
|
76
|
+
if_(condition: string, then: string, else_: string): Expression;
|
|
77
|
+
multiIf(...args: string[]): Expression;
|
|
78
|
+
coalesce(...columns: string[]): Expression;
|
|
79
|
+
toUInt32(column: string): Expression;
|
|
80
|
+
toUInt64(column: string): Expression;
|
|
81
|
+
toInt32(column: string): Expression;
|
|
82
|
+
toFloat64(column: string): Expression;
|
|
83
|
+
toString_(column: string): Expression;
|
|
84
|
+
quantile(level: number, column: string): Expression;
|
|
85
|
+
median(column: string): Expression;
|
|
86
|
+
any(column: string): Expression;
|
|
87
|
+
anyLast(column: string): Expression;
|
|
88
|
+
sumIf(column: string, condition: string): Expression;
|
|
89
|
+
countIf(condition: string): Expression;
|
|
90
|
+
avgIf(column: string, condition: string): Expression;
|
|
25
91
|
/** Raw SQL expression — escape hatch for anything not covered. */
|
|
26
92
|
raw(sql: string): Expression;
|
|
27
93
|
};
|
|
94
|
+
export {};
|
|
28
95
|
//# sourceMappingURL=expressions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/query/expressions.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"expressions.d.ts","sourceRoot":"","sources":["../../src/query/expressions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import { Param } from './param.js';
|
|
2
|
+
/** Represents a raw SQL expression with an optional alias. TType carries the result type for typed expressions. */
|
|
2
3
|
export class Expression {
|
|
3
4
|
sql;
|
|
4
5
|
alias;
|
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"expressions.js","sourceRoot":"","sources":["../../src/query/expressions.ts"],"names":[],"mappings":"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"}
|
package/dist/query/index.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
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 {
|
|
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
|
|
8
|
+
export { sql, type SqlInterpolation } from './sql-template.js';
|
|
9
|
+
export type { DatabaseSchema, TableName, RowType, InsertType, ColumnName, CompiledQuery, SelectResult, SortDirection, ComparisonOp, SetOp, UnaryOp, BetweenOp, WhereOp, JoinType, } from './types.js';
|
|
7
10
|
//# 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;
|
|
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,OAAO,EAAE,GAAG,EAAE,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC/D,YAAY,EACV,cAAc,EACd,SAAS,EACT,OAAO,EACP,UAAU,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,KAAK,EACL,OAAO,EACP,SAAS,EACT,OAAO,EACP,QAAQ,GACT,MAAM,YAAY,CAAC"}
|
package/dist/query/index.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
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 {
|
|
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';
|
|
8
|
+
export { sql } from './sql-template.js';
|
|
6
9
|
//# sourceMappingURL=index.js.map
|
package/dist/query/index.js.map
CHANGED
|
@@ -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;
|
|
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;AACpE,OAAO,EAAE,GAAG,EAAyB,MAAM,mBAAmB,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 {
|
|
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<unknown>;
|
|
17
|
+
}): Subquery;
|
|
10
18
|
fn: typeof fn;
|
|
11
19
|
}
|
|
12
20
|
/**
|
|
@@ -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;
|
|
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,CAAC,OAAO,CAAC,CAAA;KAAE,GAAG,QAAQ,CAAC;IACnE,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 {
|
|
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;
|
|
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,OAA8C;YACrD,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, RowType, SelectResult, 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,39 @@ 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;
|
|
27
|
-
|
|
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<unknown>;
|
|
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;
|
|
44
|
+
select<C extends ColumnName<DB, T>, E extends Expression & {
|
|
45
|
+
alias: string;
|
|
46
|
+
}>(columns: (C | E | Expression)[]): SelectBuilder<DB, T, C | (E extends {
|
|
47
|
+
alias: infer A extends string;
|
|
48
|
+
} ? A : never)>;
|
|
28
49
|
/** Add a WHERE condition. Values must be Param or Expression — no raw strings. */
|
|
29
50
|
where(column: ColumnName<DB, T> | Expression | string, op: ComparisonOp, value: Param | Expression): this;
|
|
30
51
|
/** Add a WHERE IN / NOT IN condition. Value must be an Array(...) Param. */
|
|
31
52
|
where(column: ColumnName<DB, T> | Expression | string, op: SetOp, value: Param | Expression): this;
|
|
53
|
+
/** Add a WHERE IS NULL / IS NOT NULL condition (no value). */
|
|
54
|
+
where(column: ColumnName<DB, T> | Expression | string, op: UnaryOp): this;
|
|
55
|
+
/** Add a WHERE BETWEEN condition with a [low, high] range. */
|
|
56
|
+
where(column: ColumnName<DB, T> | Expression | string, op: BetweenOp, value: [Param | Expression, Param | Expression]): this;
|
|
57
|
+
/** Add a pre-built condition group (from `or()` / `and()`). */
|
|
58
|
+
where(condition: Expression): this;
|
|
32
59
|
/**
|
|
33
60
|
* Add a JOIN clause.
|
|
34
61
|
*
|
|
@@ -52,13 +79,42 @@ export declare class SelectBuilder<DB extends DatabaseSchema, T extends TableNam
|
|
|
52
79
|
anyLeftJoin(table: string, alias: string | undefined, onLeft: string, onRight: string): this;
|
|
53
80
|
groupBy(...columns: (ColumnName<DB, T> | Expression | string)[]): this;
|
|
54
81
|
having(column: string | Expression, op: ComparisonOp, value: Param | Expression): this;
|
|
82
|
+
having(condition: Expression): this;
|
|
55
83
|
orderBy(column: ColumnName<DB, T> | Expression | string, direction?: SortDirection): this;
|
|
56
84
|
limit(n: number | Param): this;
|
|
57
85
|
offset(n: number | Param): this;
|
|
58
86
|
/** Add the FINAL modifier (use sparingly — only for debug/audit). */
|
|
59
87
|
final(): this;
|
|
60
|
-
/**
|
|
88
|
+
/**
|
|
89
|
+
* Add SAMPLE clause (ClickHouse-specific approximate query optimization).
|
|
90
|
+
* @param ratio — fraction (0-1) or absolute row count (>= 1)
|
|
91
|
+
* @param offset — optional OFFSET for reproducible sampling (0-1)
|
|
92
|
+
*/
|
|
93
|
+
sample(ratio: number, offset?: number): this;
|
|
94
|
+
/** Add SETTINGS clause. Keys and string values are validated to prevent injection. */
|
|
61
95
|
settings(s: Record<string, string | number | boolean>): this;
|
|
62
|
-
compile(): CompiledQuery
|
|
96
|
+
compile(): CompiledQuery<string extends TSelected ? RowType<DB, T> : SelectResult<DB, T, TSelected>>;
|
|
63
97
|
}
|
|
98
|
+
type SetOperator = 'UNION ALL' | 'UNION DISTINCT' | 'INTERSECT' | 'EXCEPT';
|
|
99
|
+
/** Combine multiple SELECT queries with a set operator (UNION ALL, UNION DISTINCT, INTERSECT, EXCEPT). */
|
|
100
|
+
export declare function setOperation<T = Record<string, unknown>>(operator: SetOperator, ...queries: {
|
|
101
|
+
compile(): CompiledQuery<T>;
|
|
102
|
+
}[]): CompiledQuery<T>;
|
|
103
|
+
/** Shorthand for UNION ALL. */
|
|
104
|
+
export declare function unionAll<T = Record<string, unknown>>(...queries: {
|
|
105
|
+
compile(): CompiledQuery<T>;
|
|
106
|
+
}[]): CompiledQuery<T>;
|
|
107
|
+
/** Shorthand for UNION DISTINCT. */
|
|
108
|
+
export declare function unionDistinct<T = Record<string, unknown>>(...queries: {
|
|
109
|
+
compile(): CompiledQuery<T>;
|
|
110
|
+
}[]): CompiledQuery<T>;
|
|
111
|
+
/** Shorthand for INTERSECT. */
|
|
112
|
+
export declare function intersect<T = Record<string, unknown>>(...queries: {
|
|
113
|
+
compile(): CompiledQuery<T>;
|
|
114
|
+
}[]): CompiledQuery<T>;
|
|
115
|
+
/** Shorthand for EXCEPT. */
|
|
116
|
+
export declare function except<T = Record<string, unknown>>(...queries: {
|
|
117
|
+
compile(): CompiledQuery<T>;
|
|
118
|
+
}[]): CompiledQuery<T>;
|
|
119
|
+
export {};
|
|
64
120
|
//# 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":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,QAAQ,EACR,KAAK,EACL,aAAa,EACb,SAAS,
|
|
1
|
+
{"version":3,"file":"select-builder.d.ts","sourceRoot":"","sources":["../../src/query/select-builder.ts"],"names":[],"mappings":"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"}
|