@querypanel/node-sdk 1.0.17 → 1.0.18
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/cjs/__tests__/ingest.test.d.ts +5 -0
- package/dist/cjs/__tests__/ingest.test.d.ts.map +1 -0
- package/dist/cjs/__tests__/ingest.test.js +95 -0
- package/dist/cjs/__tests__/ingest.test.js.map +1 -0
- package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.d.ts +2 -0
- package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.d.ts.map +1 -0
- package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.js +119 -0
- package/dist/cjs/connectors/__tests__/clickhouse.introspect.test.js.map +1 -0
- package/dist/cjs/connectors/base.d.ts +2 -3
- package/dist/cjs/connectors/base.d.ts.map +1 -1
- package/dist/cjs/connectors/clickhouse.d.ts +28 -10
- package/dist/cjs/connectors/clickhouse.d.ts.map +1 -1
- package/dist/cjs/connectors/clickhouse.js +55 -77
- package/dist/cjs/connectors/clickhouse.js.map +1 -1
- package/dist/cjs/index.d.ts +26 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +114 -5
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/tenant-isolation.spec.d.ts +2 -0
- package/dist/cjs/tenant-isolation.spec.d.ts.map +1 -0
- package/dist/cjs/tenant-isolation.spec.js +345 -0
- package/dist/cjs/tenant-isolation.spec.js.map +1 -0
- package/dist/esm/connectors/clickhouse.d.ts +4 -4
- package/dist/esm/connectors/clickhouse.d.ts.map +1 -1
- package/dist/esm/connectors/clickhouse.js +25 -32
- package/dist/esm/connectors/clickhouse.js.map +1 -1
- package/dist/esm/index.d.ts +26 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +114 -5
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/tenant-isolation.spec.d.ts +2 -0
- package/dist/esm/tenant-isolation.spec.d.ts.map +1 -0
- package/dist/esm/tenant-isolation.spec.js +343 -0
- package/dist/esm/tenant-isolation.spec.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const vitest_1 = require("vitest");
|
|
4
|
+
const index_js_1 = require("./index.js");
|
|
5
|
+
(0, vitest_1.describe)("Tenant Isolation", () => {
|
|
6
|
+
let sdk;
|
|
7
|
+
const mockBaseUrl = "https://api.test.com";
|
|
8
|
+
const mockToken = "test-token";
|
|
9
|
+
(0, vitest_1.beforeEach)(() => {
|
|
10
|
+
sdk = new index_js_1.QueryPanelSdkAPI(mockBaseUrl, mockToken);
|
|
11
|
+
});
|
|
12
|
+
(0, vitest_1.describe)("ClickHouse - ensureTenantIsolation", () => {
|
|
13
|
+
(0, vitest_1.it)("should add WHERE clause with tenant filter when missing", () => {
|
|
14
|
+
const metadata = {
|
|
15
|
+
name: "analytics",
|
|
16
|
+
dialect: "clickhouse",
|
|
17
|
+
tenantFieldName: "customer_id",
|
|
18
|
+
tenantFieldType: "String",
|
|
19
|
+
enforceTenantIsolation: true,
|
|
20
|
+
};
|
|
21
|
+
const sql = "SELECT * FROM transactions ORDER BY created_at DESC";
|
|
22
|
+
const params = {};
|
|
23
|
+
const tenantId = "customer-123";
|
|
24
|
+
// Access private method for testing
|
|
25
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
26
|
+
(0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
|
|
27
|
+
(0, vitest_1.expect)(result).toContain("ORDER BY created_at DESC");
|
|
28
|
+
(0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
|
|
29
|
+
});
|
|
30
|
+
(0, vitest_1.it)("should add AND condition when WHERE clause exists", () => {
|
|
31
|
+
const metadata = {
|
|
32
|
+
name: "analytics",
|
|
33
|
+
dialect: "clickhouse",
|
|
34
|
+
tenantFieldName: "customer_id",
|
|
35
|
+
tenantFieldType: "String",
|
|
36
|
+
enforceTenantIsolation: true,
|
|
37
|
+
};
|
|
38
|
+
const sql = "SELECT * FROM transactions WHERE status = 'active' ORDER BY date";
|
|
39
|
+
const params = {};
|
|
40
|
+
const tenantId = "customer-123";
|
|
41
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
42
|
+
(0, vitest_1.expect)(result).toContain("customer_id = {customer_id:String}");
|
|
43
|
+
(0, vitest_1.expect)(result).toContain("AND");
|
|
44
|
+
(0, vitest_1.expect)(result).toContain("status = 'active'");
|
|
45
|
+
(0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
|
|
46
|
+
});
|
|
47
|
+
(0, vitest_1.it)("should insert before GROUP BY when no WHERE clause", () => {
|
|
48
|
+
const metadata = {
|
|
49
|
+
name: "analytics",
|
|
50
|
+
dialect: "clickhouse",
|
|
51
|
+
tenantFieldName: "customer_id",
|
|
52
|
+
tenantFieldType: "UUID",
|
|
53
|
+
enforceTenantIsolation: true,
|
|
54
|
+
};
|
|
55
|
+
const sql = "SELECT product_id, COUNT(*) FROM orders GROUP BY product_id";
|
|
56
|
+
const params = {};
|
|
57
|
+
const tenantId = "customer-123";
|
|
58
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
59
|
+
(0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:UUID}");
|
|
60
|
+
(0, vitest_1.expect)(result).toMatch(/WHERE customer_id.*GROUP BY product_id/);
|
|
61
|
+
(0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
|
|
62
|
+
});
|
|
63
|
+
(0, vitest_1.it)("should insert before LIMIT when no WHERE clause", () => {
|
|
64
|
+
const metadata = {
|
|
65
|
+
name: "analytics",
|
|
66
|
+
dialect: "clickhouse",
|
|
67
|
+
tenantFieldName: "tenant_id",
|
|
68
|
+
tenantFieldType: "Int64",
|
|
69
|
+
enforceTenantIsolation: true,
|
|
70
|
+
};
|
|
71
|
+
const sql = "SELECT * FROM events LIMIT 100";
|
|
72
|
+
const params = {};
|
|
73
|
+
const tenantId = "customer-123";
|
|
74
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
75
|
+
(0, vitest_1.expect)(result).toContain("WHERE tenant_id = {tenant_id:Int64}");
|
|
76
|
+
(0, vitest_1.expect)(result).toMatch(/WHERE tenant_id.*LIMIT 100/);
|
|
77
|
+
(0, vitest_1.expect)(params).toHaveProperty("tenant_id", "customer-123");
|
|
78
|
+
});
|
|
79
|
+
(0, vitest_1.it)("should not modify SQL if tenant field already present", () => {
|
|
80
|
+
const metadata = {
|
|
81
|
+
name: "analytics",
|
|
82
|
+
dialect: "clickhouse",
|
|
83
|
+
tenantFieldName: "customer_id",
|
|
84
|
+
tenantFieldType: "String",
|
|
85
|
+
enforceTenantIsolation: true,
|
|
86
|
+
};
|
|
87
|
+
const sql = "SELECT * FROM transactions WHERE customer_id = {customer_id:String} AND status = 'active'";
|
|
88
|
+
const params = {};
|
|
89
|
+
const tenantId = "customer-123";
|
|
90
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
91
|
+
// Should not modify SQL since tenant field is already present
|
|
92
|
+
(0, vitest_1.expect)(result).toBe(sql);
|
|
93
|
+
(0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
|
|
94
|
+
});
|
|
95
|
+
(0, vitest_1.it)("should recognize {tenant_field} syntax without type", () => {
|
|
96
|
+
const metadata = {
|
|
97
|
+
name: "analytics",
|
|
98
|
+
dialect: "clickhouse",
|
|
99
|
+
tenantFieldName: "customer_id",
|
|
100
|
+
tenantFieldType: "String",
|
|
101
|
+
enforceTenantIsolation: true,
|
|
102
|
+
};
|
|
103
|
+
const sql = "SELECT * FROM transactions WHERE customer_id = {customer_id}";
|
|
104
|
+
const params = {};
|
|
105
|
+
const tenantId = "customer-123";
|
|
106
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
107
|
+
// Should not modify SQL since tenant field is already present (without type)
|
|
108
|
+
(0, vitest_1.expect)(result).toBe(sql);
|
|
109
|
+
(0, vitest_1.expect)(params).toHaveProperty("customer_id", "customer-123");
|
|
110
|
+
});
|
|
111
|
+
(0, vitest_1.it)("should handle different field types", () => {
|
|
112
|
+
const testCases = [
|
|
113
|
+
{ type: "String", expected: "{org_id:String}" },
|
|
114
|
+
{ type: "UUID", expected: "{org_id:UUID}" },
|
|
115
|
+
{ type: "Int64", expected: "{org_id:Int64}" },
|
|
116
|
+
{ type: "UInt64", expected: "{org_id:UInt64}" },
|
|
117
|
+
];
|
|
118
|
+
testCases.forEach(({ type, expected }) => {
|
|
119
|
+
const metadata = {
|
|
120
|
+
name: "analytics",
|
|
121
|
+
dialect: "clickhouse",
|
|
122
|
+
tenantFieldName: "org_id",
|
|
123
|
+
tenantFieldType: type,
|
|
124
|
+
enforceTenantIsolation: true,
|
|
125
|
+
};
|
|
126
|
+
const sql = "SELECT * FROM data";
|
|
127
|
+
const params = {};
|
|
128
|
+
const tenantId = "org-123";
|
|
129
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
130
|
+
(0, vitest_1.expect)(result).toContain(`org_id = ${expected}`);
|
|
131
|
+
});
|
|
132
|
+
});
|
|
133
|
+
(0, vitest_1.it)("should default to String type when not specified", () => {
|
|
134
|
+
const metadata = {
|
|
135
|
+
name: "analytics",
|
|
136
|
+
dialect: "clickhouse",
|
|
137
|
+
tenantFieldName: "customer_id",
|
|
138
|
+
// tenantFieldType not specified
|
|
139
|
+
enforceTenantIsolation: true,
|
|
140
|
+
};
|
|
141
|
+
const sql = "SELECT * FROM transactions";
|
|
142
|
+
const params = {};
|
|
143
|
+
const tenantId = "customer-123";
|
|
144
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
145
|
+
(0, vitest_1.expect)(result).toContain("{customer_id:String}"); // Default to String
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
(0, vitest_1.describe)("Postgres - ensureTenantIsolation", () => {
|
|
149
|
+
(0, vitest_1.it)("should add WHERE clause for Postgres", () => {
|
|
150
|
+
const metadata = {
|
|
151
|
+
name: "users",
|
|
152
|
+
dialect: "postgres",
|
|
153
|
+
tenantFieldName: "tenant_id",
|
|
154
|
+
enforceTenantIsolation: true,
|
|
155
|
+
};
|
|
156
|
+
const sql = "SELECT * FROM users ORDER BY created_at DESC";
|
|
157
|
+
const params = {};
|
|
158
|
+
const tenantId = "tenant-123";
|
|
159
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
160
|
+
(0, vitest_1.expect)(result).toContain("WHERE tenant_id = 'tenant-123'");
|
|
161
|
+
(0, vitest_1.expect)(params).toHaveProperty("tenant_id", "tenant-123");
|
|
162
|
+
});
|
|
163
|
+
(0, vitest_1.it)("should not modify if tenant field already in SQL", () => {
|
|
164
|
+
const metadata = {
|
|
165
|
+
name: "users",
|
|
166
|
+
dialect: "postgres",
|
|
167
|
+
tenantFieldName: "tenant_id",
|
|
168
|
+
enforceTenantIsolation: true,
|
|
169
|
+
};
|
|
170
|
+
const sql = "SELECT * FROM users WHERE tenant_id = $1 AND active = true";
|
|
171
|
+
const params = { tenant_id: "tenant-123" };
|
|
172
|
+
const tenantId = "tenant-123";
|
|
173
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
174
|
+
// Should not modify since tenant_id is in SQL
|
|
175
|
+
(0, vitest_1.expect)(result).toBe(sql);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
(0, vitest_1.describe)("Enforcement Control", () => {
|
|
179
|
+
(0, vitest_1.it)("should not modify SQL when enforceTenantIsolation is false", () => {
|
|
180
|
+
const metadata = {
|
|
181
|
+
name: "public_data",
|
|
182
|
+
dialect: "clickhouse",
|
|
183
|
+
tenantFieldName: "customer_id",
|
|
184
|
+
tenantFieldType: "String",
|
|
185
|
+
enforceTenantIsolation: false, // Disabled
|
|
186
|
+
};
|
|
187
|
+
const sql = "SELECT * FROM public_transactions";
|
|
188
|
+
const params = {};
|
|
189
|
+
const tenantId = "customer-123";
|
|
190
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
191
|
+
// SQL should not be modified
|
|
192
|
+
(0, vitest_1.expect)(result).toBe(sql);
|
|
193
|
+
});
|
|
194
|
+
(0, vitest_1.it)("should not modify SQL when tenantFieldName is not set", () => {
|
|
195
|
+
const metadata = {
|
|
196
|
+
name: "analytics",
|
|
197
|
+
dialect: "clickhouse",
|
|
198
|
+
// No tenantFieldName
|
|
199
|
+
enforceTenantIsolation: true,
|
|
200
|
+
};
|
|
201
|
+
const sql = "SELECT * FROM transactions";
|
|
202
|
+
const params = {};
|
|
203
|
+
const tenantId = "customer-123";
|
|
204
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
205
|
+
// SQL should not be modified
|
|
206
|
+
(0, vitest_1.expect)(result).toBe(sql);
|
|
207
|
+
});
|
|
208
|
+
(0, vitest_1.it)("should still add param when enforcement is disabled but field is set", () => {
|
|
209
|
+
const metadata = {
|
|
210
|
+
name: "analytics",
|
|
211
|
+
dialect: "clickhouse",
|
|
212
|
+
tenantFieldName: "customer_id",
|
|
213
|
+
tenantFieldType: "String",
|
|
214
|
+
enforceTenantIsolation: false,
|
|
215
|
+
};
|
|
216
|
+
const sql = "SELECT * FROM transactions";
|
|
217
|
+
const params = {};
|
|
218
|
+
const tenantId = "customer-123";
|
|
219
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
220
|
+
// SQL not modified, but param should be added
|
|
221
|
+
(0, vitest_1.expect)(result).toBe(sql);
|
|
222
|
+
// Note: params won't be added because enforcement is disabled
|
|
223
|
+
// The ensureTenantIsolation returns early
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
(0, vitest_1.describe)("Edge Cases", () => {
|
|
227
|
+
(0, vitest_1.it)("should handle SQL with semicolon at end", () => {
|
|
228
|
+
const metadata = {
|
|
229
|
+
name: "analytics",
|
|
230
|
+
dialect: "clickhouse",
|
|
231
|
+
tenantFieldName: "customer_id",
|
|
232
|
+
tenantFieldType: "String",
|
|
233
|
+
enforceTenantIsolation: true,
|
|
234
|
+
};
|
|
235
|
+
const sql = "SELECT * FROM transactions;";
|
|
236
|
+
const params = {};
|
|
237
|
+
const tenantId = "customer-123";
|
|
238
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
239
|
+
(0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
|
|
240
|
+
(0, vitest_1.expect)(result).toMatch(/WHERE.*customer_id.*;$/);
|
|
241
|
+
});
|
|
242
|
+
(0, vitest_1.it)("should handle multi-line SQL", () => {
|
|
243
|
+
const metadata = {
|
|
244
|
+
name: "analytics",
|
|
245
|
+
dialect: "clickhouse",
|
|
246
|
+
tenantFieldName: "customer_id",
|
|
247
|
+
tenantFieldType: "String",
|
|
248
|
+
enforceTenantIsolation: true,
|
|
249
|
+
};
|
|
250
|
+
const sql = `
|
|
251
|
+
SELECT
|
|
252
|
+
product_id,
|
|
253
|
+
COUNT(*) as count
|
|
254
|
+
FROM orders
|
|
255
|
+
GROUP BY product_id
|
|
256
|
+
ORDER BY count DESC
|
|
257
|
+
`;
|
|
258
|
+
const params = {};
|
|
259
|
+
const tenantId = "customer-123";
|
|
260
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
261
|
+
(0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
|
|
262
|
+
(0, vitest_1.expect)(result).toMatch(/WHERE.*GROUP BY/s);
|
|
263
|
+
});
|
|
264
|
+
(0, vitest_1.it)("should be case-insensitive for SQL keywords", () => {
|
|
265
|
+
const metadata = {
|
|
266
|
+
name: "analytics",
|
|
267
|
+
dialect: "clickhouse",
|
|
268
|
+
tenantFieldName: "customer_id",
|
|
269
|
+
tenantFieldType: "String",
|
|
270
|
+
enforceTenantIsolation: true,
|
|
271
|
+
};
|
|
272
|
+
const sql = "select * from transactions order by date";
|
|
273
|
+
const params = {};
|
|
274
|
+
const tenantId = "customer-123";
|
|
275
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
276
|
+
(0, vitest_1.expect)(result).toContain("customer_id = {customer_id:String}");
|
|
277
|
+
});
|
|
278
|
+
(0, vitest_1.it)("should handle HAVING clause", () => {
|
|
279
|
+
const metadata = {
|
|
280
|
+
name: "analytics",
|
|
281
|
+
dialect: "clickhouse",
|
|
282
|
+
tenantFieldName: "customer_id",
|
|
283
|
+
tenantFieldType: "String",
|
|
284
|
+
enforceTenantIsolation: true,
|
|
285
|
+
};
|
|
286
|
+
const sql = "SELECT product_id, COUNT(*) as cnt FROM orders GROUP BY product_id HAVING cnt > 10";
|
|
287
|
+
const params = {};
|
|
288
|
+
const tenantId = "customer-123";
|
|
289
|
+
const result = sdk.ensureTenantIsolation(sql, params, metadata, tenantId);
|
|
290
|
+
(0, vitest_1.expect)(result).toContain("WHERE customer_id = {customer_id:String}");
|
|
291
|
+
(0, vitest_1.expect)(result).toMatch(/WHERE.*GROUP BY/);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
294
|
+
(0, vitest_1.describe)("attachClickhouse configuration", () => {
|
|
295
|
+
(0, vitest_1.it)("should default enforceTenantIsolation to true when tenantFieldName is set", () => {
|
|
296
|
+
const mockFn = async () => ({});
|
|
297
|
+
sdk.attachClickhouse("test", mockFn, {
|
|
298
|
+
tenantFieldName: "customer_id",
|
|
299
|
+
tenantFieldType: "String",
|
|
300
|
+
// enforceTenantIsolation not specified
|
|
301
|
+
});
|
|
302
|
+
const metadata = sdk.databaseMetadata.get("test");
|
|
303
|
+
(0, vitest_1.expect)(metadata.enforceTenantIsolation).toBe(true);
|
|
304
|
+
});
|
|
305
|
+
(0, vitest_1.it)("should respect explicit enforceTenantIsolation value", () => {
|
|
306
|
+
const mockFn = async () => ({});
|
|
307
|
+
sdk.attachClickhouse("test", mockFn, {
|
|
308
|
+
tenantFieldName: "customer_id",
|
|
309
|
+
tenantFieldType: "String",
|
|
310
|
+
enforceTenantIsolation: false,
|
|
311
|
+
});
|
|
312
|
+
const metadata = sdk.databaseMetadata.get("test");
|
|
313
|
+
(0, vitest_1.expect)(metadata.enforceTenantIsolation).toBe(false);
|
|
314
|
+
});
|
|
315
|
+
(0, vitest_1.it)("should default tenantFieldType to String", () => {
|
|
316
|
+
const mockFn = async () => ({});
|
|
317
|
+
sdk.attachClickhouse("test", mockFn, {
|
|
318
|
+
tenantFieldName: "customer_id",
|
|
319
|
+
// tenantFieldType not specified
|
|
320
|
+
});
|
|
321
|
+
const metadata = sdk.databaseMetadata.get("test");
|
|
322
|
+
(0, vitest_1.expect)(metadata.tenantFieldType).toBe("String");
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
(0, vitest_1.describe)("attachPostgres configuration", () => {
|
|
326
|
+
(0, vitest_1.it)("should default enforceTenantIsolation to true when tenantFieldName is set", () => {
|
|
327
|
+
const mockFn = async () => ({ rows: [], fields: [] });
|
|
328
|
+
sdk.attachPostgres("test", mockFn, {
|
|
329
|
+
tenantFieldName: "tenant_id",
|
|
330
|
+
// enforceTenantIsolation not specified
|
|
331
|
+
});
|
|
332
|
+
const metadata = sdk.databaseMetadata.get("test");
|
|
333
|
+
(0, vitest_1.expect)(metadata.enforceTenantIsolation).toBe(true);
|
|
334
|
+
});
|
|
335
|
+
(0, vitest_1.it)("should not set tenantFieldType for Postgres", () => {
|
|
336
|
+
const mockFn = async () => ({ rows: [], fields: [] });
|
|
337
|
+
sdk.attachPostgres("test", mockFn, {
|
|
338
|
+
tenantFieldName: "tenant_id",
|
|
339
|
+
});
|
|
340
|
+
const metadata = sdk.databaseMetadata.get("test");
|
|
341
|
+
(0, vitest_1.expect)(metadata.tenantFieldType).toBeUndefined();
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
});
|
|
345
|
+
//# sourceMappingURL=tenant-isolation.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tenant-isolation.spec.js","sourceRoot":"","sources":["../../src/tenant-isolation.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { type ClickHouseClient, type ClickHouseClientConfigOptions } from
|
|
2
|
-
import type { IntrospectOptions, SchemaIntrospection } from
|
|
3
|
-
import type { DatabaseConnector, QueryOptions } from
|
|
1
|
+
import { type ClickHouseClient, type ClickHouseClientConfigOptions } from '@clickhouse/client';
|
|
2
|
+
import type { IntrospectOptions, SchemaIntrospection } from '../schema/types.js';
|
|
3
|
+
import type { DatabaseConnector, QueryOptions } from './base.js';
|
|
4
4
|
export interface ClickHouseConnectorConfig {
|
|
5
5
|
/** Fully qualified ClickHouse URL. Overrides host/port/protocol when provided. */
|
|
6
6
|
url?: string;
|
|
7
7
|
host?: string;
|
|
8
8
|
port?: number;
|
|
9
|
-
protocol?:
|
|
9
|
+
protocol?: 'http' | 'https';
|
|
10
10
|
database: string;
|
|
11
11
|
username?: string;
|
|
12
12
|
password?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../../src/connectors/clickhouse.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"clickhouse.d.ts","sourceRoot":"","sources":["../../../src/connectors/clickhouse.ts"],"names":[],"mappings":"AAAA,OAAO,EAEH,KAAK,gBAAgB,EACrB,KAAK,6BAA6B,EAGrC,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,mBAAmB,EAA6B,MAAM,oBAAoB,CAAC;AAQ5G,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEjE,MAAM,WAAW,yBAAyB;IACtC,kFAAkF;IAClF,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,OAAO,CAAC,6BAA6B,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,4BAA4B;IACzC,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,gBAAgB,CAAC;CAC1C;AA4BD,qBAAa,mBAAoB,YAAW,iBAAiB;IAKrD,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAL9B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqE;gBAG9E,MAAM,EAAE,yBAAyB,EACjC,SAAS,GAAE,4BAAiC;IAK3D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAiCrF,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAsGrE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAMd,YAAY;YAYZ,QAAQ;IAUtB,OAAO,CAAC,iBAAiB;CAkC5B"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { createClient, } from
|
|
2
|
-
import { extractFixedStringLength, extractPrecisionScale, isNullableType, parseKeyExpression, unwrapTypeModifiers, } from
|
|
1
|
+
import { createClient, } from '@clickhouse/client';
|
|
2
|
+
import { extractFixedStringLength, extractPrecisionScale, isNullableType, parseKeyExpression, unwrapTypeModifiers, } from '../utils/clickhouse.js';
|
|
3
3
|
export class ClickHouseConnector {
|
|
4
4
|
constructor(config, overrides = {}) {
|
|
5
5
|
this.config = config;
|
|
6
6
|
this.overrides = overrides;
|
|
7
|
-
this.defaultFormat =
|
|
7
|
+
this.defaultFormat = 'JSONEachRow';
|
|
8
8
|
this.client = overrides.client ?? null;
|
|
9
9
|
}
|
|
10
10
|
async connect() {
|
|
@@ -23,16 +23,14 @@ export class ClickHouseConnector {
|
|
|
23
23
|
Object.assign(params, { query_params: options.params });
|
|
24
24
|
}
|
|
25
25
|
if (options?.settings) {
|
|
26
|
-
Object.assign(params, {
|
|
27
|
-
clickhouse_settings: options.settings,
|
|
28
|
-
});
|
|
26
|
+
Object.assign(params, { clickhouse_settings: options.settings });
|
|
29
27
|
}
|
|
30
28
|
const result = await client.query(params);
|
|
31
29
|
const payload = await result.json();
|
|
32
30
|
if (Array.isArray(payload)) {
|
|
33
31
|
return payload;
|
|
34
32
|
}
|
|
35
|
-
if (payload && typeof payload ===
|
|
33
|
+
if (payload && typeof payload === 'object') {
|
|
36
34
|
const maybeData = payload.data;
|
|
37
35
|
if (Array.isArray(maybeData)) {
|
|
38
36
|
return maybeData;
|
|
@@ -49,14 +47,12 @@ export class ClickHouseConnector {
|
|
|
49
47
|
if (hasFilter) {
|
|
50
48
|
queryParams.tables = allowTables;
|
|
51
49
|
}
|
|
52
|
-
const filterClause = hasFilter ?
|
|
50
|
+
const filterClause = hasFilter ? ' AND name IN {tables:Array(String)}' : '';
|
|
53
51
|
const tables = await this.query(`SELECT name, engine, comment, total_rows, total_bytes, is_view, primary_key, sorting_key
|
|
54
52
|
FROM system.tables
|
|
55
53
|
WHERE database = {db:String}${filterClause}
|
|
56
54
|
ORDER BY name`, { params: queryParams });
|
|
57
|
-
const columnFilterClause = hasFilter
|
|
58
|
-
? " AND table IN {tables:Array(String)}"
|
|
59
|
-
: "";
|
|
55
|
+
const columnFilterClause = hasFilter ? ' AND table IN {tables:Array(String)}' : '';
|
|
60
56
|
const columns = await this.query(`SELECT table, name, type, position, default_kind, default_expression, comment,
|
|
61
57
|
codec_expression, ttl_expression, is_in_primary_key,
|
|
62
58
|
data_compressed_bytes, data_uncompressed_bytes
|
|
@@ -75,16 +71,15 @@ export class ClickHouseConnector {
|
|
|
75
71
|
const totalRows = toNumber(table.total_rows);
|
|
76
72
|
const totalBytes = toNumber(table.total_bytes);
|
|
77
73
|
for (const column of tableColumns) {
|
|
78
|
-
column.isPrimaryKey =
|
|
79
|
-
column.isPrimaryKey || primaryKeyColumns.includes(column.name);
|
|
74
|
+
column.isPrimaryKey = column.isPrimaryKey || primaryKeyColumns.includes(column.name);
|
|
80
75
|
}
|
|
81
76
|
const indexes = primaryKeyColumns.length
|
|
82
77
|
? [
|
|
83
78
|
{
|
|
84
|
-
name:
|
|
79
|
+
name: 'primary_key',
|
|
85
80
|
columns: primaryKeyColumns,
|
|
86
81
|
unique: true,
|
|
87
|
-
type:
|
|
82
|
+
type: 'PRIMARY KEY',
|
|
88
83
|
...(table.primary_key ? { definition: table.primary_key } : {}),
|
|
89
84
|
},
|
|
90
85
|
]
|
|
@@ -92,8 +87,8 @@ export class ClickHouseConnector {
|
|
|
92
87
|
const constraints = primaryKeyColumns.length
|
|
93
88
|
? [
|
|
94
89
|
{
|
|
95
|
-
name:
|
|
96
|
-
type:
|
|
90
|
+
name: 'primary_key',
|
|
91
|
+
type: 'PRIMARY KEY',
|
|
97
92
|
columns: primaryKeyColumns,
|
|
98
93
|
},
|
|
99
94
|
]
|
|
@@ -119,7 +114,7 @@ export class ClickHouseConnector {
|
|
|
119
114
|
});
|
|
120
115
|
return {
|
|
121
116
|
db: {
|
|
122
|
-
kind:
|
|
117
|
+
kind: 'clickhouse',
|
|
123
118
|
name: this.config.database,
|
|
124
119
|
},
|
|
125
120
|
tables: tableSchemas,
|
|
@@ -136,12 +131,10 @@ export class ClickHouseConnector {
|
|
|
136
131
|
if (this.client) {
|
|
137
132
|
return this.client;
|
|
138
133
|
}
|
|
139
|
-
this.client =
|
|
140
|
-
this.overrides?.clientFactory?.() ??
|
|
141
|
-
createClient(this.buildClientConfig());
|
|
134
|
+
this.client = this.overrides?.clientFactory?.() ?? createClient(this.buildClientConfig());
|
|
142
135
|
const pingResult = await this.safePing(this.client);
|
|
143
|
-
if (pingResult &&
|
|
144
|
-
throw pingResult.error ?? new Error(
|
|
136
|
+
if (pingResult && 'success' in pingResult && pingResult.success === false) {
|
|
137
|
+
throw pingResult.error ?? new Error('ClickHouse ping failed');
|
|
145
138
|
}
|
|
146
139
|
return this.client;
|
|
147
140
|
}
|
|
@@ -163,8 +156,8 @@ export class ClickHouseConnector {
|
|
|
163
156
|
merged.url = this.config.url;
|
|
164
157
|
}
|
|
165
158
|
else if (this.config.host) {
|
|
166
|
-
const protocol = this.config.protocol ??
|
|
167
|
-
const port = this.config.port ?? (protocol ===
|
|
159
|
+
const protocol = this.config.protocol ?? 'https';
|
|
160
|
+
const port = this.config.port ?? (protocol === 'https' ? 8443 : 8123);
|
|
168
161
|
merged.url = `${protocol}://${this.config.host}:${port}`;
|
|
169
162
|
}
|
|
170
163
|
merged.database = this.config.database;
|
|
@@ -197,7 +190,7 @@ function normalizeTableFilter(tables) {
|
|
|
197
190
|
const trimmed = table.trim();
|
|
198
191
|
if (!trimmed)
|
|
199
192
|
continue;
|
|
200
|
-
const parts = trimmed.split(
|
|
193
|
+
const parts = trimmed.split('.');
|
|
201
194
|
const tableName = parts[parts.length - 1];
|
|
202
195
|
if (!tableName || seen.has(tableName))
|
|
203
196
|
continue;
|
|
@@ -254,7 +247,7 @@ function transformColumnRow(row) {
|
|
|
254
247
|
function toNumber(value) {
|
|
255
248
|
if (value === null || value === undefined)
|
|
256
249
|
return undefined;
|
|
257
|
-
if (typeof value ===
|
|
250
|
+
if (typeof value === 'number')
|
|
258
251
|
return value;
|
|
259
252
|
const parsed = Number.parseFloat(String(value));
|
|
260
253
|
return Number.isNaN(parsed) ? undefined : parsed;
|
|
@@ -266,14 +259,14 @@ function sanitize(value) {
|
|
|
266
259
|
return trimmed.length ? trimmed : undefined;
|
|
267
260
|
}
|
|
268
261
|
function asTableType(isView) {
|
|
269
|
-
if (typeof isView ===
|
|
270
|
-
return isView > 0 ?
|
|
262
|
+
if (typeof isView === 'number') {
|
|
263
|
+
return isView > 0 ? 'view' : 'table';
|
|
271
264
|
}
|
|
272
|
-
if (typeof isView ===
|
|
265
|
+
if (typeof isView === 'string') {
|
|
273
266
|
const normalized = isView.toLowerCase();
|
|
274
|
-
return normalized ===
|
|
267
|
+
return normalized === '1' || normalized === 'true' ? 'view' : 'table';
|
|
275
268
|
}
|
|
276
|
-
return
|
|
269
|
+
return 'table';
|
|
277
270
|
}
|
|
278
271
|
function buildTableStatistics(totalRows, totalBytes) {
|
|
279
272
|
if (totalRows === undefined && totalBytes === undefined)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../../src/connectors/clickhouse.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"clickhouse.js","sourceRoot":"","sources":["../../../src/connectors/clickhouse.ts"],"names":[],"mappings":"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"}
|