@cubejs-backend/clickhouse-driver 1.7.33 → 1.7.34
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/src/ClickHouseDriver.d.ts +17 -2
- package/dist/src/ClickHouseDriver.d.ts.map +1 -1
- package/dist/src/ClickHouseDriver.js +111 -68
- package/dist/src/ClickHouseDriver.js.map +1 -1
- package/dist/src/RowStream.d.ts +36 -0
- package/dist/src/RowStream.d.ts.map +1 -0
- package/dist/src/RowStream.js +107 -0
- package/dist/src/RowStream.js.map +1 -0
- package/dist/src/Transform.d.ts +17 -0
- package/dist/src/Transform.d.ts.map +1 -0
- package/dist/src/Transform.js +274 -0
- package/dist/src/Transform.js.map +1 -0
- package/package.json +7 -7
- package/dist/src/HydrationStream.d.ts +0 -3
- package/dist/src/HydrationStream.d.ts.map +0 -1
- package/dist/src/HydrationStream.js +0 -74
- package/dist/src/HydrationStream.js.map +0 -1
|
@@ -78,11 +78,16 @@ export declare class ClickHouseDriver extends BaseDriver implements DriverInterf
|
|
|
78
78
|
private buildQueryId;
|
|
79
79
|
protected withCancel<T>(fn: (con: ClickHouseClient, queryId: string, signal: AbortSignal) => Promise<T>, options?: QueryOptions): Promise<T>;
|
|
80
80
|
protected createClient(maxPoolSize: number): ClickHouseClient;
|
|
81
|
+
/**
|
|
82
|
+
* The client instantiates `LoggerClass` with no arguments, and `setLogger` runs
|
|
83
|
+
* after the constructor, so the Cube logger is resolved lazily on every call.
|
|
84
|
+
*/
|
|
85
|
+
private clientLoggerClass;
|
|
81
86
|
testConnection(): Promise<void>;
|
|
82
87
|
readOnly(): boolean;
|
|
83
88
|
query<R = unknown>(query: string, values: unknown[], options?: QueryOptions): Promise<R[]>;
|
|
84
|
-
protected queryResponse(query: string, values: unknown[], options?: QueryOptions): Promise<ResponseJSON<
|
|
85
|
-
protected normaliseResponse<R = unknown>(res: ResponseJSON<
|
|
89
|
+
protected queryResponse(query: string, values: unknown[], options?: QueryOptions): Promise<ResponseJSON<Array<unknown>>>;
|
|
90
|
+
protected normaliseResponse<R = unknown>(res: ResponseJSON<Array<unknown>>): Array<R>;
|
|
86
91
|
release(): Promise<void>;
|
|
87
92
|
informationSchemaQuery(): string;
|
|
88
93
|
protected getTablesForSpecificSchemasQuery(schemasPlaceholders: string): string;
|
|
@@ -92,6 +97,16 @@ export declare class ClickHouseDriver extends BaseDriver implements DriverInterf
|
|
|
92
97
|
getSchemas(): Promise<QuerySchemasResult[]>;
|
|
93
98
|
stream(query: string, values: unknown[], { highWaterMark, requestId }: StreamOptions): Promise<StreamTableDataWithTypes>;
|
|
94
99
|
downloadQueryResults(query: string, values: unknown[], options: DownloadQueryResultsOptions): Promise<DownloadQueryResultsResult>;
|
|
100
|
+
/**
|
|
101
|
+
* Example of types:
|
|
102
|
+
*
|
|
103
|
+
* Int64
|
|
104
|
+
* Nullable(Int64) / Nullable(String)
|
|
105
|
+
* Nullable(DateTime('UTC'))
|
|
106
|
+
* LowCardinality(Nullable(String))
|
|
107
|
+
* Array(DateTime) -> timestamp[]
|
|
108
|
+
* Map(String, Int32) / Tuple(Int32, String)
|
|
109
|
+
*/
|
|
95
110
|
protected toGenericType(columnType: string, precision?: number | null, scale?: number | null): GenericDataBaseType;
|
|
96
111
|
createSchemaIfNotExists(schemaName: string): Promise<void>;
|
|
97
112
|
getTablesQuery(schemaName: string): Promise<TableQueryResult[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickHouseDriver.d.ts","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClickHouseDriver.d.ts","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ClickHouseDriver = void 0;
|
|
4
4
|
const shared_1 = require("@cubejs-backend/shared");
|
|
5
5
|
const base_driver_1 = require("@cubejs-backend/base-driver");
|
|
6
|
-
const node_stream_1 = require("node:stream");
|
|
7
6
|
const client_1 = require("@clickhouse/client");
|
|
8
7
|
const uuid_1 = require("uuid");
|
|
9
|
-
const
|
|
8
|
+
const RowStream_1 = require("./RowStream");
|
|
9
|
+
const Transform_1 = require("./Transform");
|
|
10
10
|
const utils_1 = require("./utils");
|
|
11
11
|
const SUPPORTED_BUCKET_TYPES = ['s3'];
|
|
12
12
|
const ClickhouseTypeToGeneric = {
|
|
@@ -83,9 +83,14 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
83
83
|
/// Let's disable it, because we don't need them.
|
|
84
84
|
send_progress_in_http_headers: 0,
|
|
85
85
|
// If ClickHouse user's permissions are restricted with "readonly = 1",
|
|
86
|
-
// change settings queries are not allowed
|
|
87
|
-
|
|
88
|
-
|
|
86
|
+
// change settings queries are not allowed
|
|
87
|
+
...(this.readOnlyMode ? {} : {
|
|
88
|
+
join_use_nulls: 1,
|
|
89
|
+
// Pins every DateTime value to the width its column type implies, which is what the
|
|
90
|
+
// specialized converters in Transform.ts key off. Not guaranteed: a readonly user or a
|
|
91
|
+
// driver_factory override still lands on the generic formatter.
|
|
92
|
+
date_time_output_format: 'simple',
|
|
93
|
+
}),
|
|
89
94
|
},
|
|
90
95
|
// Custom HTTP headers can only be passed via driver_factory, not env vars.
|
|
91
96
|
headers: config.headers ?? {},
|
|
@@ -140,8 +145,47 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
140
145
|
request_timeout: this.config.requestTimeout,
|
|
141
146
|
max_open_connections: maxPoolSize,
|
|
142
147
|
http_headers: this.config.headers,
|
|
148
|
+
log: {
|
|
149
|
+
LoggerClass: this.clientLoggerClass(),
|
|
150
|
+
// At WARN the client advises enabling progress headers on every construction,
|
|
151
|
+
// which we disable on purpose.
|
|
152
|
+
level: client_1.ClickHouseLogLevel.ERROR,
|
|
153
|
+
},
|
|
143
154
|
});
|
|
144
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* The client instantiates `LoggerClass` with no arguments, and `setLogger` runs
|
|
158
|
+
* after the constructor, so the Cube logger is resolved lazily on every call.
|
|
159
|
+
*/
|
|
160
|
+
clientLoggerClass() {
|
|
161
|
+
const emit = (level, { module, message, args }, err) => {
|
|
162
|
+
this.logger?.('ClickHouse Client Log', {
|
|
163
|
+
...args,
|
|
164
|
+
level,
|
|
165
|
+
module,
|
|
166
|
+
message,
|
|
167
|
+
...(err ? { error: (err.stack || err).toString() } : {}),
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
return class {
|
|
171
|
+
trace(params) {
|
|
172
|
+
emit('trace', params);
|
|
173
|
+
}
|
|
174
|
+
// Cube's LogLevel has no debug counterpart
|
|
175
|
+
debug(params) {
|
|
176
|
+
emit('trace', params);
|
|
177
|
+
}
|
|
178
|
+
info(params) {
|
|
179
|
+
emit('info', params);
|
|
180
|
+
}
|
|
181
|
+
warn(params) {
|
|
182
|
+
emit('warn', params, params.err);
|
|
183
|
+
}
|
|
184
|
+
error(params) {
|
|
185
|
+
emit('error', params, params.err);
|
|
186
|
+
}
|
|
187
|
+
};
|
|
188
|
+
}
|
|
145
189
|
async testConnection() {
|
|
146
190
|
await this.query('SELECT 1', []);
|
|
147
191
|
}
|
|
@@ -158,7 +202,9 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
158
202
|
const formattedQuery = (0, shared_1.formatMySql)(query, values);
|
|
159
203
|
return this.withCancel(async (connection, queryId, signal) => {
|
|
160
204
|
try {
|
|
161
|
-
|
|
205
|
+
// Positional rows drop the repeated column names and share the transform with `stream()`;
|
|
206
|
+
// ClickHouse serializes cell values identically in JSON and JSONCompact.
|
|
207
|
+
const format = 'JSONCompact';
|
|
162
208
|
const resultSet = await connection.query({
|
|
163
209
|
query: formattedQuery,
|
|
164
210
|
query_id: queryId,
|
|
@@ -171,8 +217,14 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
171
217
|
if (resultSet.response_headers['x-clickhouse-format'] && resultSet.response_headers['x-clickhouse-format'] !== format) {
|
|
172
218
|
throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
|
|
173
219
|
}
|
|
174
|
-
// We used format JSON, so we expect each row to be Record with column names as keys
|
|
175
220
|
const results = await resultSet.json();
|
|
221
|
+
// Up to ClickHouse 25.x, failures after the first flushed block are appended to a 200
|
|
222
|
+
// response; newer versions truncate the JSON and are rejected while parsing it above.
|
|
223
|
+
// The client declares `exception` for `JSONEachRowWithProgress` rows only, never here.
|
|
224
|
+
const { exception } = results;
|
|
225
|
+
if (exception) {
|
|
226
|
+
throw new Error(`ClickHouse aborted after ${results.data?.length ?? 0} row(s): ${exception}`);
|
|
227
|
+
}
|
|
176
228
|
return results;
|
|
177
229
|
}
|
|
178
230
|
catch (e) {
|
|
@@ -181,14 +233,19 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
181
233
|
}, options);
|
|
182
234
|
}
|
|
183
235
|
normaliseResponse(res) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
236
|
+
const { data } = res;
|
|
237
|
+
if (!data || data.length === 0) {
|
|
238
|
+
return [];
|
|
239
|
+
}
|
|
240
|
+
if (!res.meta) {
|
|
241
|
+
throw new Error('Unexpected response without meta for format JSONCompact');
|
|
190
242
|
}
|
|
191
|
-
|
|
243
|
+
const transform = (0, Transform_1.buildTransformFromMeta)(res.meta);
|
|
244
|
+
const rows = new Array(data.length);
|
|
245
|
+
for (let i = 0; i < data.length; i++) {
|
|
246
|
+
rows[i] = (0, Transform_1.transformRow)(data[i], transform);
|
|
247
|
+
}
|
|
248
|
+
return rows;
|
|
192
249
|
}
|
|
193
250
|
async release() {
|
|
194
251
|
await this.client.close();
|
|
@@ -232,9 +289,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
232
289
|
async getSchemas() {
|
|
233
290
|
return [{ schema_name: this.config.database }];
|
|
234
291
|
}
|
|
235
|
-
async stream(query, values,
|
|
236
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
237
|
-
{ highWaterMark, requestId }) {
|
|
292
|
+
async stream(query, values, { highWaterMark, requestId }) {
|
|
238
293
|
// Use separate client for this long-living query
|
|
239
294
|
const client = this.createClient(1);
|
|
240
295
|
const queryId = this.buildQueryId(requestId);
|
|
@@ -253,35 +308,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
253
308
|
// Array<unknown> is okay, because we use fixed JSONCompactEachRowWithNamesAndTypes format
|
|
254
309
|
// And each row after first two will look like this: [42, "hello", [0,1]]
|
|
255
310
|
// https://clickhouse.com/docs/en/interfaces/formats#jsoncompacteachrowwithnamesandtypes
|
|
256
|
-
const
|
|
257
|
-
const allRowsIter = (async function* allRowsIter() {
|
|
258
|
-
for await (const rowsBatch of resultSetStream) {
|
|
259
|
-
for (const row of rowsBatch) {
|
|
260
|
-
yield row.json();
|
|
261
|
-
}
|
|
262
|
-
}
|
|
263
|
-
}());
|
|
264
|
-
const first = await allRowsIter.next();
|
|
265
|
-
if (first.done) {
|
|
266
|
-
throw new Error('Unexpected stream end before row with names');
|
|
267
|
-
}
|
|
268
|
-
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
269
|
-
const names = first.value;
|
|
270
|
-
const second = await allRowsIter.next();
|
|
271
|
-
if (second.done) {
|
|
272
|
-
throw new Error('Unexpected stream end before row with types');
|
|
273
|
-
}
|
|
274
|
-
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
275
|
-
const types = second.value;
|
|
276
|
-
if (names.length !== types.length) {
|
|
277
|
-
throw new Error(`Unexpected names and types length mismatch; names ${names.length} vs types ${types.length}`);
|
|
278
|
-
}
|
|
279
|
-
const dataRowsIter = (async function* () {
|
|
280
|
-
for await (const row of allRowsIter) {
|
|
281
|
-
yield (0, HydrationStream_1.transformStreamRow)(row, names, types);
|
|
282
|
-
}
|
|
283
|
-
}());
|
|
284
|
-
const rowStream = node_stream_1.Readable.from(dataRowsIter);
|
|
311
|
+
const { rowStream, names, types } = await RowStream_1.ClickHouseRowStream.open(resultSet.stream()[Symbol.asyncIterator](), queryId, highWaterMark || (0, shared_1.getEnv)('dbQueryStreamHighWaterMark'));
|
|
285
312
|
return {
|
|
286
313
|
rowStream,
|
|
287
314
|
types: names.map((name, idx) => {
|
|
@@ -314,33 +341,49 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
314
341
|
})),
|
|
315
342
|
};
|
|
316
343
|
}
|
|
344
|
+
/**
|
|
345
|
+
* Example of types:
|
|
346
|
+
*
|
|
347
|
+
* Int64
|
|
348
|
+
* Nullable(Int64) / Nullable(String)
|
|
349
|
+
* Nullable(DateTime('UTC'))
|
|
350
|
+
* LowCardinality(Nullable(String))
|
|
351
|
+
* Array(DateTime) -> timestamp[]
|
|
352
|
+
* Map(String, Int32) / Tuple(Int32, String)
|
|
353
|
+
*/
|
|
317
354
|
toGenericType(columnType, precision, scale) {
|
|
318
|
-
|
|
319
|
-
|
|
355
|
+
const type = columnType.trim();
|
|
356
|
+
const lowerType = type.toLowerCase();
|
|
357
|
+
if (lowerType in ClickhouseTypeToGeneric) {
|
|
358
|
+
return ClickhouseTypeToGeneric[lowerType];
|
|
320
359
|
}
|
|
321
|
-
const
|
|
322
|
-
if (
|
|
323
|
-
precision
|
|
324
|
-
scale = Number(match[2]);
|
|
360
|
+
const argsStart = type.indexOf('(');
|
|
361
|
+
if (argsStart === -1) {
|
|
362
|
+
return super.toGenericType(type, precision, scale);
|
|
325
363
|
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
364
|
+
const name = lowerType.slice(0, argsStart).trim();
|
|
365
|
+
const args = type.slice(argsStart + 1, type.lastIndexOf(')'));
|
|
366
|
+
switch (name) {
|
|
367
|
+
case 'nullable':
|
|
368
|
+
case 'lowcardinality':
|
|
369
|
+
return this.toGenericType(args, precision, scale);
|
|
370
|
+
case 'array':
|
|
371
|
+
return `${this.toGenericType(args)}[]`;
|
|
372
|
+
case 'map':
|
|
373
|
+
case 'tuple':
|
|
374
|
+
case 'nested':
|
|
375
|
+
return 'text';
|
|
376
|
+
case 'decimal': {
|
|
377
|
+
const [argPrecision, argScale] = args.split(',');
|
|
378
|
+
return super.toGenericType(name, Number(argPrecision), Number(argScale));
|
|
341
379
|
}
|
|
380
|
+
default:
|
|
381
|
+
// Parameterized scalars: DateTime('UTC'), DateTime64(3, 'UTC'), Enum8('Date' = 1),
|
|
382
|
+
// FixedString(16). Their arguments never carry a type, so only the name is mapped.
|
|
383
|
+
return name in ClickhouseTypeToGeneric
|
|
384
|
+
? ClickhouseTypeToGeneric[name]
|
|
385
|
+
: super.toGenericType(name, precision, scale);
|
|
342
386
|
}
|
|
343
|
-
return super.toGenericType(columnType, precision, scale);
|
|
344
387
|
}
|
|
345
388
|
async createSchemaIfNotExists(schemaName) {
|
|
346
389
|
await this.command(`CREATE DATABASE IF NOT EXISTS ${schemaName}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickHouseDriver.js","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ClickHouseDriver.js","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { Readable } from 'node:stream';
|
|
3
|
+
import type { Row } from '@clickhouse/client';
|
|
4
|
+
type RowBatch = Array<Row<Array<unknown>>>;
|
|
5
|
+
/**
|
|
6
|
+
* Streams a JSONCompactEachRowWithNamesAndTypes result set as hydrated row objects.
|
|
7
|
+
*
|
|
8
|
+
* @clickhouse/client hands out batches of rows, so a whole batch is pushed per `await` on the
|
|
9
|
+
* source instead of one row per `await`, and the caller's `highWaterMark` decides how far ahead
|
|
10
|
+
* of the consumer we read.
|
|
11
|
+
*/
|
|
12
|
+
export declare class ClickHouseRowStream extends Readable {
|
|
13
|
+
private readonly source;
|
|
14
|
+
private readonly queryId;
|
|
15
|
+
private reading;
|
|
16
|
+
private batch;
|
|
17
|
+
private idx;
|
|
18
|
+
private transform;
|
|
19
|
+
private constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Consumes the two header rows the format starts with. Reading them here rather than through
|
|
22
|
+
* a consumer keeps it to the one moment where skipping rows is correct.
|
|
23
|
+
*/
|
|
24
|
+
static open(source: AsyncIterator<RowBatch>, queryId: string, highWaterMark: number): Promise<{
|
|
25
|
+
rowStream: ClickHouseRowStream;
|
|
26
|
+
names: Array<string>;
|
|
27
|
+
types: Array<string>;
|
|
28
|
+
}>;
|
|
29
|
+
/** Advances to the next non-empty batch; false once the source is exhausted. */
|
|
30
|
+
private fetchBatch;
|
|
31
|
+
private readRawRow;
|
|
32
|
+
_read(): Promise<void>;
|
|
33
|
+
_destroy(error: Error | null, callback: (error?: Error | null) => void): void;
|
|
34
|
+
}
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=RowStream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RowStream.d.ts","sourceRoot":"","sources":["../../src/RowStream.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAK9C,KAAK,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAE3C;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,QAAQ;IAU7C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAV1B,OAAO,CAAC,OAAO,CAAkB;IAEjC,OAAO,CAAC,KAAK,CAAgB;IAE7B,OAAO,CAAC,GAAG,CAAa;IAExB,OAAO,CAAC,SAAS,CAAa;IAE9B,OAAO;IAQP;;;OAGG;WACiB,IAAI,CACtB,MAAM,EAAE,aAAa,CAAC,QAAQ,CAAC,EAC/B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC;QAAE,SAAS,EAAE,mBAAmB,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;KAAE,CAAC;IAyB1F,gFAAgF;YAClE,UAAU;YAcV,UAAU;IAQF,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoC5B,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI;CAG9F"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ClickHouseRowStream = void 0;
|
|
4
|
+
const node_stream_1 = require("node:stream");
|
|
5
|
+
const Transform_1 = require("./Transform");
|
|
6
|
+
const utils_1 = require("./utils");
|
|
7
|
+
/**
|
|
8
|
+
* Streams a JSONCompactEachRowWithNamesAndTypes result set as hydrated row objects.
|
|
9
|
+
*
|
|
10
|
+
* @clickhouse/client hands out batches of rows, so a whole batch is pushed per `await` on the
|
|
11
|
+
* source instead of one row per `await`, and the caller's `highWaterMark` decides how far ahead
|
|
12
|
+
* of the consumer we read.
|
|
13
|
+
*/
|
|
14
|
+
class ClickHouseRowStream extends node_stream_1.Readable {
|
|
15
|
+
source;
|
|
16
|
+
queryId;
|
|
17
|
+
reading = false;
|
|
18
|
+
batch = [];
|
|
19
|
+
idx = 0;
|
|
20
|
+
transform;
|
|
21
|
+
constructor(source, queryId, highWaterMark) {
|
|
22
|
+
super({ objectMode: true, highWaterMark });
|
|
23
|
+
this.source = source;
|
|
24
|
+
this.queryId = queryId;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Consumes the two header rows the format starts with. Reading them here rather than through
|
|
28
|
+
* a consumer keeps it to the one moment where skipping rows is correct.
|
|
29
|
+
*/
|
|
30
|
+
static async open(source, queryId, highWaterMark) {
|
|
31
|
+
const rowStream = new ClickHouseRowStream(source, queryId, highWaterMark);
|
|
32
|
+
try {
|
|
33
|
+
const names = await rowStream.readRawRow();
|
|
34
|
+
if (!names) {
|
|
35
|
+
throw new Error('Unexpected stream end before row with names');
|
|
36
|
+
}
|
|
37
|
+
const types = await rowStream.readRawRow();
|
|
38
|
+
if (!types) {
|
|
39
|
+
throw new Error('Unexpected stream end before row with types');
|
|
40
|
+
}
|
|
41
|
+
rowStream.transform = (0, Transform_1.buildTransformFromNamesAndTypes)(names, types);
|
|
42
|
+
return { rowStream, names, types };
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
// Nobody holds the stream yet, so destroy it without an error to release the source
|
|
46
|
+
// rather than emit 'error' with no listener attached
|
|
47
|
+
rowStream.destroy();
|
|
48
|
+
throw e;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Advances to the next non-empty batch; false once the source is exhausted. */
|
|
52
|
+
async fetchBatch() {
|
|
53
|
+
do {
|
|
54
|
+
const next = await this.source.next();
|
|
55
|
+
if (next.done) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
this.batch = next.value;
|
|
59
|
+
this.idx = 0;
|
|
60
|
+
} while (this.batch.length === 0);
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
async readRawRow() {
|
|
64
|
+
if (this.idx >= this.batch.length && !await this.fetchBatch()) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
return this.batch[this.idx++].json();
|
|
68
|
+
}
|
|
69
|
+
async _read() {
|
|
70
|
+
// A synchronous push() can re-enter _read() while the loop below is still running
|
|
71
|
+
if (this.reading) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
this.reading = true;
|
|
75
|
+
try {
|
|
76
|
+
let canPush = true;
|
|
77
|
+
while (canPush) {
|
|
78
|
+
if (this.idx >= this.batch.length) {
|
|
79
|
+
if (!await this.fetchBatch()) {
|
|
80
|
+
this.push(null);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
// A destroy() while parked on the source settles the pending next() via source.return();
|
|
84
|
+
// the rows it carried have no reader anymore. A destroy() mid-batch needs no check of its
|
|
85
|
+
// own: push() into a destroyed stream returns false, so the loop exits on its own
|
|
86
|
+
if (this.destroyed) {
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
canPush = this.push((0, Transform_1.transformRow)(this.batch[this.idx++].json(), this.transform));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (e) {
|
|
94
|
+
// Since 25.11 the server reports an exception raised after the first block through
|
|
95
|
+
// the response headers and an in-stream tag, and the client rethrows it here.
|
|
96
|
+
this.destroy(new Error(`Stream query failed: ${(0, utils_1.formatError)(e)}; query id: ${this.queryId}`, { cause: e }));
|
|
97
|
+
}
|
|
98
|
+
finally {
|
|
99
|
+
this.reading = false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
_destroy(error, callback) {
|
|
103
|
+
Promise.resolve(this.source.return?.()).then(() => callback(error), () => callback(error));
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
exports.ClickHouseRowStream = ClickHouseRowStream;
|
|
107
|
+
//# sourceMappingURL=RowStream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RowStream.js","sourceRoot":"","sources":["../../src/RowStream.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ColumnConverter = (value: unknown) => unknown;
|
|
2
|
+
export type ColumnMeta = {
|
|
3
|
+
name: string;
|
|
4
|
+
type: string;
|
|
5
|
+
};
|
|
6
|
+
export type Transform = {
|
|
7
|
+
names: Array<string>;
|
|
8
|
+
converters: Array<ColumnConverter | null>;
|
|
9
|
+
objectShape: Record<string, unknown> | null;
|
|
10
|
+
};
|
|
11
|
+
export declare function formatCanonicalDateTime(s: string): string | null;
|
|
12
|
+
export declare function formatDateTime(value: unknown): string;
|
|
13
|
+
export declare function getColumnConverter(type: string): ColumnConverter | null;
|
|
14
|
+
export declare function buildTransformFromMeta(meta: ReadonlyArray<ColumnMeta>): Transform;
|
|
15
|
+
export declare function buildTransformFromNamesAndTypes(names: Array<string>, types: Array<string>): Transform;
|
|
16
|
+
export declare function transformRow(row: ReadonlyArray<unknown>, transform: Transform): Record<string, unknown>;
|
|
17
|
+
//# sourceMappingURL=Transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../../src/Transform.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC;AAE1D,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACrB,UAAU,EAAE,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC1C,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7C,CAAC;AA6CF,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiChE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASrD;AA+ID,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAsBvE;AAUD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,CAAC,UAAU,CAAC,GAAG,SAAS,CAUjF;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAWrG;AAID,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkBvG"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.transformRow = exports.buildTransformFromNamesAndTypes = exports.buildTransformFromMeta = exports.getColumnConverter = exports.formatDateTime = exports.formatCanonicalDateTime = void 0;
|
|
27
|
+
const moment = __importStar(require("moment"));
|
|
28
|
+
const shared_1 = require("@cubejs-backend/shared");
|
|
29
|
+
const CHAR_0 = 48;
|
|
30
|
+
const CHAR_9 = 57;
|
|
31
|
+
const CHAR_SPACE = 32;
|
|
32
|
+
const CHAR_DASH = 45;
|
|
33
|
+
const CHAR_DOT = 46;
|
|
34
|
+
const CHAR_COLON = 58;
|
|
35
|
+
const CHAR_T = 84;
|
|
36
|
+
const CHAR_LPAREN = 40;
|
|
37
|
+
const CHAR_Z = 90;
|
|
38
|
+
const ZEROS = '000';
|
|
39
|
+
function isDigit(code) {
|
|
40
|
+
return code >= CHAR_0 && code <= CHAR_9;
|
|
41
|
+
}
|
|
42
|
+
function hasCanonicalDateTimePrefix(s) {
|
|
43
|
+
if (s.length < 19) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const separator = s.charCodeAt(10);
|
|
47
|
+
if (s.charCodeAt(4) !== CHAR_DASH ||
|
|
48
|
+
s.charCodeAt(7) !== CHAR_DASH ||
|
|
49
|
+
(separator !== CHAR_SPACE && separator !== CHAR_T) ||
|
|
50
|
+
s.charCodeAt(13) !== CHAR_COLON ||
|
|
51
|
+
s.charCodeAt(16) !== CHAR_COLON) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
return isDigit(s.charCodeAt(0)) && isDigit(s.charCodeAt(1)) &&
|
|
55
|
+
isDigit(s.charCodeAt(2)) && isDigit(s.charCodeAt(3)) &&
|
|
56
|
+
isDigit(s.charCodeAt(5)) && isDigit(s.charCodeAt(6)) &&
|
|
57
|
+
isDigit(s.charCodeAt(8)) && isDigit(s.charCodeAt(9)) &&
|
|
58
|
+
isDigit(s.charCodeAt(11)) && isDigit(s.charCodeAt(12)) &&
|
|
59
|
+
isDigit(s.charCodeAt(14)) && isDigit(s.charCodeAt(15)) &&
|
|
60
|
+
isDigit(s.charCodeAt(17)) && isDigit(s.charCodeAt(18));
|
|
61
|
+
}
|
|
62
|
+
// The server can override `date_time_output_format`, so only bypass moment for known-equivalent
|
|
63
|
+
// simple and ISO values.
|
|
64
|
+
function formatCanonicalDateTime(s) {
|
|
65
|
+
if (!hasCanonicalDateTimePrefix(s)) {
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
const len = s.length;
|
|
69
|
+
let millis = ZEROS;
|
|
70
|
+
let tail = 19;
|
|
71
|
+
if (len > 19 && s.charCodeAt(19) === CHAR_DOT) {
|
|
72
|
+
let end = 20;
|
|
73
|
+
while (end < len && isDigit(s.charCodeAt(end))) {
|
|
74
|
+
end++;
|
|
75
|
+
}
|
|
76
|
+
const fractionLength = end - 20;
|
|
77
|
+
if (fractionLength === 0) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
millis = fractionLength >= 3
|
|
81
|
+
? s.slice(20, 23)
|
|
82
|
+
: s.slice(20, end) + ZEROS.slice(fractionLength);
|
|
83
|
+
tail = end;
|
|
84
|
+
}
|
|
85
|
+
// Offsets require a timezone shift, which only moment does.
|
|
86
|
+
if (tail !== len && !(tail === len - 1 && s.charCodeAt(tail) === CHAR_Z)) {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return `${s.slice(0, 10)}T${s.slice(11, 19)}.${millis}`;
|
|
90
|
+
}
|
|
91
|
+
exports.formatCanonicalDateTime = formatCanonicalDateTime;
|
|
92
|
+
function formatDateTime(value) {
|
|
93
|
+
if (typeof value === 'string') {
|
|
94
|
+
const formatted = formatCanonicalDateTime(value);
|
|
95
|
+
if (formatted !== null) {
|
|
96
|
+
return formatted;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return moment.utc(value).format(moment.HTML5_FMT.DATETIME_LOCAL_MS);
|
|
100
|
+
}
|
|
101
|
+
exports.formatDateTime = formatDateTime;
|
|
102
|
+
// The other two `date_time_output_format` shapes never share the width a column type pins: iso is
|
|
103
|
+
// always one character longer, unix_timestamp far shorter. The fraction marker is checked on top of
|
|
104
|
+
// the width because `2020-01-01 12:34:56+03:00` is exactly as wide as a DateTime64(5) value.
|
|
105
|
+
const dateTime0Converter = (value) => {
|
|
106
|
+
if (value === null || value === undefined) {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
if (typeof value === 'string' && value.length === 19) {
|
|
110
|
+
return `${value.slice(0, 10)}T${value.slice(11, 19)}.${ZEROS}`;
|
|
111
|
+
}
|
|
112
|
+
return formatDateTime(value);
|
|
113
|
+
};
|
|
114
|
+
const dateTime1Converter = (value) => {
|
|
115
|
+
if (value === null || value === undefined) {
|
|
116
|
+
return value;
|
|
117
|
+
}
|
|
118
|
+
if (typeof value === 'string' && value.length === 21 && value.charCodeAt(19) === CHAR_DOT) {
|
|
119
|
+
return `${value.slice(0, 10)}T${value.slice(11, 19)}.${value.slice(20, 21)}00`;
|
|
120
|
+
}
|
|
121
|
+
return formatDateTime(value);
|
|
122
|
+
};
|
|
123
|
+
const dateTime2Converter = (value) => {
|
|
124
|
+
if (value === null || value === undefined) {
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
127
|
+
if (typeof value === 'string' && value.length === 22 && value.charCodeAt(19) === CHAR_DOT) {
|
|
128
|
+
return `${value.slice(0, 10)}T${value.slice(11, 19)}.${value.slice(20, 22)}0`;
|
|
129
|
+
}
|
|
130
|
+
return formatDateTime(value);
|
|
131
|
+
};
|
|
132
|
+
function createTruncatingDateTimeConverter(width) {
|
|
133
|
+
return (value) => {
|
|
134
|
+
if (value === null || value === undefined) {
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
if (typeof value === 'string' && value.length === width && value.charCodeAt(19) === CHAR_DOT) {
|
|
138
|
+
return `${value.slice(0, 10)}T${value.slice(11, 23)}`;
|
|
139
|
+
}
|
|
140
|
+
return formatDateTime(value);
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
const DATE_TIME_CONVERTERS = [
|
|
144
|
+
dateTime0Converter,
|
|
145
|
+
dateTime1Converter,
|
|
146
|
+
dateTime2Converter,
|
|
147
|
+
createTruncatingDateTimeConverter(23),
|
|
148
|
+
createTruncatingDateTimeConverter(24),
|
|
149
|
+
createTruncatingDateTimeConverter(25),
|
|
150
|
+
createTruncatingDateTimeConverter(26),
|
|
151
|
+
createTruncatingDateTimeConverter(27),
|
|
152
|
+
createTruncatingDateTimeConverter(28),
|
|
153
|
+
createTruncatingDateTimeConverter(29),
|
|
154
|
+
];
|
|
155
|
+
const dateTimeConverter = (value) => (value === null || value === undefined ? value : formatDateTime(value));
|
|
156
|
+
const dateConverter = (value) => (value === null || value === undefined ? value : `${value}T00:00:00.000`);
|
|
157
|
+
const numberConverter = (value) => {
|
|
158
|
+
if (value === null || value === undefined) {
|
|
159
|
+
return value;
|
|
160
|
+
}
|
|
161
|
+
return typeof value === 'string' ? value : String(value);
|
|
162
|
+
};
|
|
163
|
+
const WRAPPER_PREFIXES = ['Nullable(', 'LowCardinality('];
|
|
164
|
+
// Scalar names inside container arguments must not select a converter for the container itself.
|
|
165
|
+
// SimpleAggregateFunction is excluded because it reads back as its scalar argument type.
|
|
166
|
+
const NON_SCALAR_PREFIXES = ['Array(', 'Map(', 'Tuple(', 'Nested(', 'Enum', 'JSON', 'AggregateFunction('];
|
|
167
|
+
function unwrapScalar(type) {
|
|
168
|
+
let inner = type;
|
|
169
|
+
let stripped = true;
|
|
170
|
+
while (stripped) {
|
|
171
|
+
stripped = false;
|
|
172
|
+
for (const prefix of WRAPPER_PREFIXES) {
|
|
173
|
+
if (inner.startsWith(prefix)) {
|
|
174
|
+
inner = inner.slice(prefix.length);
|
|
175
|
+
stripped = true;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return inner;
|
|
180
|
+
}
|
|
181
|
+
const DATE_TIME64 = 'DateTime64';
|
|
182
|
+
const DEFAULT_DATE_TIME64_PRECISION = 3;
|
|
183
|
+
const MAX_DATE_TIME64_PRECISION = 9;
|
|
184
|
+
const PRECISION_UNSUPPORTED = -1;
|
|
185
|
+
// `DateTime` and `DateTime64(0)` read back with the same 19 character shape, so a plain DateTime is
|
|
186
|
+
// precision 0. indexOf rather than startsWith, because SimpleAggregateFunction(max, DateTime64(3))
|
|
187
|
+
// reads back as its argument type. charCodeAt past the end is NaN, so no bounds checks are needed.
|
|
188
|
+
function parseDateTimePrecision(inner) {
|
|
189
|
+
const at = inner.indexOf(DATE_TIME64);
|
|
190
|
+
if (at === -1) {
|
|
191
|
+
return 0;
|
|
192
|
+
}
|
|
193
|
+
let i = at + DATE_TIME64.length;
|
|
194
|
+
if (inner.charCodeAt(i) !== CHAR_LPAREN) {
|
|
195
|
+
return DEFAULT_DATE_TIME64_PRECISION;
|
|
196
|
+
}
|
|
197
|
+
i++;
|
|
198
|
+
let precision = 0;
|
|
199
|
+
let digits = 0;
|
|
200
|
+
while (isDigit(inner.charCodeAt(i))) {
|
|
201
|
+
precision = precision * 10 + (inner.charCodeAt(i) - CHAR_0);
|
|
202
|
+
digits++;
|
|
203
|
+
i++;
|
|
204
|
+
}
|
|
205
|
+
if (digits === 0 || precision > MAX_DATE_TIME64_PRECISION) {
|
|
206
|
+
return PRECISION_UNSUPPORTED;
|
|
207
|
+
}
|
|
208
|
+
return precision;
|
|
209
|
+
}
|
|
210
|
+
function getColumnConverter(type) {
|
|
211
|
+
const inner = unwrapScalar(type);
|
|
212
|
+
if (NON_SCALAR_PREFIXES.some((prefix) => inner.startsWith(prefix))) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
if (inner.includes('Date')) {
|
|
216
|
+
if (!inner.includes('DateTime')) {
|
|
217
|
+
return dateConverter;
|
|
218
|
+
}
|
|
219
|
+
const precision = parseDateTimePrecision(inner);
|
|
220
|
+
return precision === PRECISION_UNSUPPORTED ? dateTimeConverter : DATE_TIME_CONVERTERS[precision];
|
|
221
|
+
}
|
|
222
|
+
if (inner.includes('Int') || inner.includes('Float') || inner.includes('Decimal')) {
|
|
223
|
+
return numberConverter;
|
|
224
|
+
}
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
exports.getColumnConverter = getColumnConverter;
|
|
228
|
+
function buildTransform(names, converters) {
|
|
229
|
+
return {
|
|
230
|
+
names,
|
|
231
|
+
converters,
|
|
232
|
+
objectShape: (0, shared_1.buildObjectShape)(names),
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
function buildTransformFromMeta(meta) {
|
|
236
|
+
const names = new Array(meta.length);
|
|
237
|
+
const converters = new Array(meta.length);
|
|
238
|
+
for (let i = 0; i < meta.length; i++) {
|
|
239
|
+
names[i] = meta[i].name;
|
|
240
|
+
converters[i] = getColumnConverter(meta[i].type);
|
|
241
|
+
}
|
|
242
|
+
return buildTransform(names, converters);
|
|
243
|
+
}
|
|
244
|
+
exports.buildTransformFromMeta = buildTransformFromMeta;
|
|
245
|
+
function buildTransformFromNamesAndTypes(names, types) {
|
|
246
|
+
if (names.length !== types.length) {
|
|
247
|
+
throw new Error(`Unexpected names and types length mismatch; names ${names.length} vs types ${types.length}`);
|
|
248
|
+
}
|
|
249
|
+
const converters = new Array(names.length);
|
|
250
|
+
for (let i = 0; i < names.length; i++) {
|
|
251
|
+
converters[i] = getColumnConverter(types[i]);
|
|
252
|
+
}
|
|
253
|
+
return buildTransform(names, converters);
|
|
254
|
+
}
|
|
255
|
+
exports.buildTransformFromNamesAndTypes = buildTransformFromNamesAndTypes;
|
|
256
|
+
// Left-to-right assignment preserves JSON.parse's ordering and last-value behavior for duplicate
|
|
257
|
+
// column names, keeping pre-aggregation content versions stable.
|
|
258
|
+
function transformRow(row, transform) {
|
|
259
|
+
const { names, converters, objectShape } = transform;
|
|
260
|
+
if (row.length !== names.length) {
|
|
261
|
+
throw new Error(`Unexpected row and names/types length mismatch; row ${row.length} vs names ${names.length}`);
|
|
262
|
+
}
|
|
263
|
+
// Cloning a shape that already holds every column keeps the row in fast-properties mode; see
|
|
264
|
+
// buildObjectShape for why that matters to everything reading the row afterwards.
|
|
265
|
+
const rowObj = objectShape === null ? {} : { ...objectShape };
|
|
266
|
+
for (let i = 0; i < names.length; i++) {
|
|
267
|
+
const converter = converters[i];
|
|
268
|
+
const value = row[i];
|
|
269
|
+
rowObj[names[i]] = converter === null ? value : converter(value);
|
|
270
|
+
}
|
|
271
|
+
return rowObj;
|
|
272
|
+
}
|
|
273
|
+
exports.transformRow = transformRow;
|
|
274
|
+
//# sourceMappingURL=Transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transform.js","sourceRoot":"","sources":["../../src/Transform.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@cubejs-backend/clickhouse-driver",
|
|
3
3
|
"description": "Cube.js ClickHouse database driver",
|
|
4
4
|
"author": "Cube Dev, Inc.",
|
|
5
|
-
"version": "1.7.
|
|
5
|
+
"version": "1.7.34",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/cube-js/cube.git",
|
|
@@ -28,16 +28,16 @@
|
|
|
28
28
|
"integration:clickhouse": "jest dist/test/integration"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@clickhouse/client": "^1.
|
|
32
|
-
"@cubejs-backend/base-driver": "1.7.
|
|
33
|
-
"@cubejs-backend/shared": "1.7.
|
|
31
|
+
"@clickhouse/client": "^1.23.1",
|
|
32
|
+
"@cubejs-backend/base-driver": "1.7.34",
|
|
33
|
+
"@cubejs-backend/shared": "1.7.34",
|
|
34
34
|
"moment": "^2.24.0",
|
|
35
35
|
"uuid": "^11.1.1"
|
|
36
36
|
},
|
|
37
37
|
"license": "Apache-2.0",
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@cubejs-backend/linter": "1.7.
|
|
40
|
-
"@cubejs-backend/testing-shared": "1.7.
|
|
39
|
+
"@cubejs-backend/linter": "1.7.34",
|
|
40
|
+
"@cubejs-backend/testing-shared": "1.7.34",
|
|
41
41
|
"@types/jest": "^29",
|
|
42
42
|
"jest": "^29",
|
|
43
43
|
"typescript": "~5.2.2"
|
|
@@ -48,5 +48,5 @@
|
|
|
48
48
|
"eslintConfig": {
|
|
49
49
|
"extends": "../cubejs-linter"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "9237c26f3c6181fa6abe964ee784d4a997e89523"
|
|
52
52
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HydrationStream.d.ts","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":"AA4BA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,GAAG,QAKnE;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAY3H"}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
-
exports.transformStreamRow = exports.transformRow = void 0;
|
|
27
|
-
const moment = __importStar(require("moment"));
|
|
28
|
-
// ClickHouse returns DateTime as strings in format "YYYY-DD-MM HH:MM:SS"
|
|
29
|
-
// cube.js expects them in format "YYYY-DD-MMTHH:MM:SS.000", so translate them based on the metadata returned
|
|
30
|
-
//
|
|
31
|
-
// ClickHouse returns some number types as js numbers, others as js string, normalise them all to strings
|
|
32
|
-
function transformValue(type, value) {
|
|
33
|
-
if (value !== null) {
|
|
34
|
-
if (type.includes('DateTime64')) {
|
|
35
|
-
return moment.utc(value).format(moment.HTML5_FMT.DATETIME_LOCAL_MS);
|
|
36
|
-
}
|
|
37
|
-
else if (type.includes('DateTime') /** Can be DateTime or DateTime('timezone') */) {
|
|
38
|
-
// expect DateTime to always be string
|
|
39
|
-
const valueStr = value;
|
|
40
|
-
return `${valueStr.substring(0, 10)}T${valueStr.substring(11, 22)}.000`;
|
|
41
|
-
}
|
|
42
|
-
else if (type.includes('Date')) {
|
|
43
|
-
return `${value}T00:00:00.000`;
|
|
44
|
-
}
|
|
45
|
-
else if (type.includes('Int')
|
|
46
|
-
|| type.includes('Float')
|
|
47
|
-
|| type.includes('Decimal')) {
|
|
48
|
-
// convert all numbers into strings
|
|
49
|
-
return `${value}`;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return value;
|
|
53
|
-
}
|
|
54
|
-
function transformRow(row, meta) {
|
|
55
|
-
for (const [fieldName, value] of Object.entries(row)) {
|
|
56
|
-
const metaForField = meta[fieldName];
|
|
57
|
-
row[fieldName] = transformValue(metaForField.type, value);
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
exports.transformRow = transformRow;
|
|
61
|
-
function transformStreamRow(row, names, types) {
|
|
62
|
-
if (row.length !== names.length) {
|
|
63
|
-
throw new Error(`Unexpected row and names/types length mismatch; row ${row.length} vs names ${names.length}`);
|
|
64
|
-
}
|
|
65
|
-
return row.reduce((rowObj, value, idx) => {
|
|
66
|
-
const name = names[idx];
|
|
67
|
-
const type = types[idx];
|
|
68
|
-
rowObj[name] = transformValue(type, value);
|
|
69
|
-
return rowObj;
|
|
70
|
-
// TODO do we actually want Object.create(null) safety? or is it ok to use {}
|
|
71
|
-
}, Object.create(null));
|
|
72
|
-
}
|
|
73
|
-
exports.transformStreamRow = transformStreamRow;
|
|
74
|
-
//# sourceMappingURL=HydrationStream.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HydrationStream.js","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AAEjC,0EAA0E;AAC1E,8GAA8G;AAC9G,EAAE;AACF,0GAA0G;AAC1G,SAAS,cAAc,CAAC,IAAY,EAAE,KAAc;IAClD,IAAI,KAAK,KAAK,IAAI,EAAE;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YAC/B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;SACrE;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,8CAA8C,EAAE;YACnF,sCAAsC;YACtC,MAAM,QAAQ,GAAG,KAAe,CAAC;YACjC,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC;SACzE;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAChC,OAAO,GAAG,KAAK,eAAe,CAAC;SAChC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;eAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;eACtB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAC3B;YACA,mCAAmC;YACnC,OAAO,GAAG,KAAK,EAAE,CAAC;SACnB;KACF;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,YAAY,CAAC,GAA4B,EAAE,IAAS;IAClE,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,GAAG,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;KAC3D;AACH,CAAC;AALD,oCAKC;AAED,SAAgB,kBAAkB,CAAC,GAAmB,EAAE,KAAoB,EAAE,KAAoB;IAChG,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,uDAAuD,GAAG,CAAC,MAAM,aAAa,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/G;IAED,OAAO,GAAG,CAAC,MAAM,CAA0B,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QAChE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;QACd,6EAA6E;IAC/E,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1B,CAAC;AAZD,gDAYC"}
|