@cubejs-backend/clickhouse-driver 1.7.32 → 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 +26 -15
- package/dist/src/ClickHouseDriver.d.ts.map +1 -1
- package/dist/src/ClickHouseDriver.js +170 -129
- 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/dist/src/utils.d.ts +2 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +13 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +7 -8
- 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
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @copyright Cube Dev, Inc.
|
|
3
|
-
* @license Apache-2.0
|
|
4
|
-
* @fileoverview The `ClickHouseDriver` and related types declaration.
|
|
5
|
-
*/
|
|
6
1
|
import { BaseDriver, DownloadQueryResultsOptions, DownloadQueryResultsResult, DownloadTableCSVData, DriverCapabilities, DriverInterface, GenericDataBaseType, QueryOptions, QuerySchemasResult, StreamOptions, StreamTableDataWithTypes, TableColumn, TableQueryResult, TableStructure, UnloadOptions } from '@cubejs-backend/base-driver';
|
|
7
2
|
import { ClickHouseClient } from '@clickhouse/client';
|
|
8
3
|
import type { ClickHouseSettings, ResponseJSON } from '@clickhouse/client';
|
|
@@ -80,13 +75,19 @@ export declare class ClickHouseDriver extends BaseDriver implements DriverInterf
|
|
|
80
75
|
* Class constructor.
|
|
81
76
|
*/
|
|
82
77
|
constructor(config?: ClickHouseDriverOptions);
|
|
83
|
-
|
|
78
|
+
private buildQueryId;
|
|
79
|
+
protected withCancel<T>(fn: (con: ClickHouseClient, queryId: string, signal: AbortSignal) => Promise<T>, options?: QueryOptions): Promise<T>;
|
|
84
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;
|
|
85
86
|
testConnection(): Promise<void>;
|
|
86
87
|
readOnly(): boolean;
|
|
87
|
-
query<R = unknown>(query: string, values: unknown[]): Promise<R[]>;
|
|
88
|
-
protected queryResponse(query: string, values: unknown[]): Promise<ResponseJSON<
|
|
89
|
-
protected normaliseResponse<R = unknown>(res: ResponseJSON<
|
|
88
|
+
query<R = unknown>(query: string, values: unknown[], options?: QueryOptions): Promise<R[]>;
|
|
89
|
+
protected queryResponse(query: string, values: unknown[], options?: QueryOptions): Promise<ResponseJSON<Array<unknown>>>;
|
|
90
|
+
protected normaliseResponse<R = unknown>(res: ResponseJSON<Array<unknown>>): Array<R>;
|
|
90
91
|
release(): Promise<void>;
|
|
91
92
|
informationSchemaQuery(): string;
|
|
92
93
|
protected getTablesForSpecificSchemasQuery(schemasPlaceholders: string): string;
|
|
@@ -94,28 +95,38 @@ export declare class ClickHouseDriver extends BaseDriver implements DriverInterf
|
|
|
94
95
|
protected getColumnNameForSchemaName(): string;
|
|
95
96
|
protected getColumnNameForTableName(): string;
|
|
96
97
|
getSchemas(): Promise<QuerySchemasResult[]>;
|
|
97
|
-
stream(query: string, values: unknown[], { highWaterMark }: StreamOptions): Promise<StreamTableDataWithTypes>;
|
|
98
|
+
stream(query: string, values: unknown[], { highWaterMark, requestId }: StreamOptions): Promise<StreamTableDataWithTypes>;
|
|
98
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
|
+
*/
|
|
99
110
|
protected toGenericType(columnType: string, precision?: number | null, scale?: number | null): GenericDataBaseType;
|
|
100
111
|
createSchemaIfNotExists(schemaName: string): Promise<void>;
|
|
101
112
|
getTablesQuery(schemaName: string): Promise<TableQueryResult[]>;
|
|
102
|
-
dropTable(tableName: string,
|
|
113
|
+
dropTable(tableName: string, options?: QueryOptions): Promise<void>;
|
|
103
114
|
protected getExportBucket(dataSource: string, preAggregations?: boolean): ClickhouseDriverExportAWS | null;
|
|
104
115
|
isUnloadSupported(): Promise<boolean>;
|
|
105
116
|
/**
|
|
106
117
|
* Returns an array of queried fields meta info.
|
|
107
118
|
*/
|
|
108
|
-
queryColumnTypes(sql: string, params: unknown[]): Promise<TableStructure>;
|
|
119
|
+
queryColumnTypes(sql: string, params: unknown[], options?: QueryOptions): Promise<TableStructure>;
|
|
109
120
|
createTableRaw(query: string): Promise<void>;
|
|
110
121
|
createTable(quotedTableName: string, columns: TableColumn[]): Promise<void>;
|
|
111
122
|
/**
|
|
112
123
|
* We use unloadWithoutTempTable strategy
|
|
113
124
|
*/
|
|
114
125
|
unload(_tableName: string, options: UnloadOptions): Promise<DownloadTableCSVData>;
|
|
115
|
-
unloadFromQuery(sql: string, params: unknown[],
|
|
126
|
+
unloadFromQuery(sql: string, params: unknown[], options: UnloadOptions): Promise<DownloadTableCSVData>;
|
|
116
127
|
capabilities(): DriverCapabilities;
|
|
117
|
-
command(query: string): Promise<void>;
|
|
118
|
-
insert(table: string, values: Array<Array<unknown
|
|
128
|
+
command(query: string, options?: QueryOptions): Promise<void>;
|
|
129
|
+
insert(table: string, values: Array<Array<unknown>>, options?: QueryOptions): Promise<void>;
|
|
119
130
|
}
|
|
120
131
|
export {};
|
|
121
132
|
//# sourceMappingURL=ClickHouseDriver.d.ts.map
|
|
@@ -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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"}
|
|
@@ -1,21 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* @copyright Cube Dev, Inc.
|
|
4
|
-
* @license Apache-2.0
|
|
5
|
-
* @fileoverview The `ClickHouseDriver` and related types declaration.
|
|
6
|
-
*/
|
|
7
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
8
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
9
|
-
};
|
|
10
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
3
|
exports.ClickHouseDriver = void 0;
|
|
12
4
|
const shared_1 = require("@cubejs-backend/shared");
|
|
13
5
|
const base_driver_1 = require("@cubejs-backend/base-driver");
|
|
14
|
-
const node_stream_1 = require("node:stream");
|
|
15
6
|
const client_1 = require("@clickhouse/client");
|
|
16
7
|
const uuid_1 = require("uuid");
|
|
17
|
-
const
|
|
18
|
-
const
|
|
8
|
+
const RowStream_1 = require("./RowStream");
|
|
9
|
+
const Transform_1 = require("./Transform");
|
|
10
|
+
const utils_1 = require("./utils");
|
|
19
11
|
const SUPPORTED_BUCKET_TYPES = ['s3'];
|
|
20
12
|
const ClickhouseTypeToGeneric = {
|
|
21
13
|
enum: 'text',
|
|
@@ -91,31 +83,35 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
91
83
|
/// Let's disable it, because we don't need them.
|
|
92
84
|
send_progress_in_http_headers: 0,
|
|
93
85
|
// If ClickHouse user's permissions are restricted with "readonly = 1",
|
|
94
|
-
// change settings queries are not allowed
|
|
95
|
-
|
|
96
|
-
|
|
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
|
+
}),
|
|
97
94
|
},
|
|
98
95
|
// Custom HTTP headers can only be passed via driver_factory, not env vars.
|
|
99
96
|
headers: config.headers ?? {},
|
|
100
97
|
};
|
|
101
|
-
const maxPoolSize = config.maxPoolSize ??
|
|
98
|
+
const maxPoolSize = config.maxPoolSize ??
|
|
99
|
+
(0, shared_1.getEnv)('dbMaxPoolSize', { dataSource, preAggregations }) ??
|
|
100
|
+
ClickHouseDriver.getDefaultConcurrency();
|
|
102
101
|
this.client = this.createClient(maxPoolSize);
|
|
103
102
|
}
|
|
104
|
-
|
|
105
|
-
const
|
|
103
|
+
buildQueryId(requestId) {
|
|
104
|
+
const prefix = requestId ? (0, shared_1.extractRequestUUID)(requestId).slice(0, 63) : '';
|
|
105
|
+
if (!prefix) {
|
|
106
|
+
return (0, uuid_1.v4)();
|
|
107
|
+
}
|
|
108
|
+
return `${prefix}-${(0, uuid_1.v4)()}`;
|
|
109
|
+
}
|
|
110
|
+
withCancel(fn, options) {
|
|
111
|
+
const queryId = this.buildQueryId(options?.requestId);
|
|
106
112
|
const abortController = new AbortController();
|
|
107
113
|
const { signal } = abortController;
|
|
108
114
|
const promise = (async () => {
|
|
109
|
-
const pingResult = await this.client.ping();
|
|
110
|
-
if (!pingResult.success) {
|
|
111
|
-
// TODO replace string formatting with proper cause
|
|
112
|
-
// pingResult.error can be AggregateError when ClickHouse hostname resolves to multiple addresses
|
|
113
|
-
let errorMessage = pingResult.error.toString();
|
|
114
|
-
if (pingResult.error instanceof AggregateError) {
|
|
115
|
-
errorMessage = `Aggregate error: ${pingResult.error.message}; errors: ${pingResult.error.errors.join('; ')}`;
|
|
116
|
-
}
|
|
117
|
-
throw new Error(`Connection check failed: ${errorMessage}`);
|
|
118
|
-
}
|
|
119
115
|
signal.throwIfAborted();
|
|
120
116
|
// Queries sent by `fn` can hit a timeout error, would _not_ get killed, and continue running in ClickHouse
|
|
121
117
|
// TODO should we kill those as well?
|
|
@@ -129,7 +125,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
129
125
|
const killClient = this.createClient(1);
|
|
130
126
|
try {
|
|
131
127
|
await killClient.command({
|
|
132
|
-
query:
|
|
128
|
+
query: (0, shared_1.formatMySql)('KILL QUERY WHERE query_id = ?', [queryId]),
|
|
133
129
|
});
|
|
134
130
|
}
|
|
135
131
|
finally {
|
|
@@ -149,8 +145,47 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
149
145
|
request_timeout: this.config.requestTimeout,
|
|
150
146
|
max_open_connections: maxPoolSize,
|
|
151
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
|
+
},
|
|
152
154
|
});
|
|
153
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
|
+
}
|
|
154
189
|
async testConnection() {
|
|
155
190
|
await this.query('SELECT 1', []);
|
|
156
191
|
}
|
|
@@ -159,15 +194,17 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
159
194
|
(!!this.config.readOnly || this.readOnlyMode) :
|
|
160
195
|
true;
|
|
161
196
|
}
|
|
162
|
-
async query(query, values) {
|
|
163
|
-
const response = await this.queryResponse(query, values);
|
|
197
|
+
async query(query, values, options) {
|
|
198
|
+
const response = await this.queryResponse(query, values, options);
|
|
164
199
|
return this.normaliseResponse(response);
|
|
165
200
|
}
|
|
166
|
-
queryResponse(query, values) {
|
|
167
|
-
const formattedQuery =
|
|
201
|
+
queryResponse(query, values, options) {
|
|
202
|
+
const formattedQuery = (0, shared_1.formatMySql)(query, values);
|
|
168
203
|
return this.withCancel(async (connection, queryId, signal) => {
|
|
169
204
|
try {
|
|
170
|
-
|
|
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';
|
|
171
208
|
const resultSet = await connection.query({
|
|
172
209
|
query: formattedQuery,
|
|
173
210
|
query_id: queryId,
|
|
@@ -180,25 +217,35 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
180
217
|
if (resultSet.response_headers['x-clickhouse-format'] && resultSet.response_headers['x-clickhouse-format'] !== format) {
|
|
181
218
|
throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
|
|
182
219
|
}
|
|
183
|
-
// We used format JSON, so we expect each row to be Record with column names as keys
|
|
184
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
|
+
}
|
|
185
228
|
return results;
|
|
186
229
|
}
|
|
187
230
|
catch (e) {
|
|
188
|
-
|
|
189
|
-
throw new Error(`Query failed: ${e}; query id: ${queryId}`);
|
|
231
|
+
throw new Error(`Query failed: ${(0, utils_1.formatError)(e)}; query id: ${queryId}`, { cause: e });
|
|
190
232
|
}
|
|
191
|
-
});
|
|
233
|
+
}, options);
|
|
192
234
|
}
|
|
193
235
|
normaliseResponse(res) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
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');
|
|
242
|
+
}
|
|
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);
|
|
200
247
|
}
|
|
201
|
-
return
|
|
248
|
+
return rows;
|
|
202
249
|
}
|
|
203
250
|
async release() {
|
|
204
251
|
await this.client.close();
|
|
@@ -242,14 +289,12 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
242
289
|
async getSchemas() {
|
|
243
290
|
return [{ schema_name: this.config.database }];
|
|
244
291
|
}
|
|
245
|
-
async stream(query, values,
|
|
246
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
247
|
-
{ highWaterMark }) {
|
|
292
|
+
async stream(query, values, { highWaterMark, requestId }) {
|
|
248
293
|
// Use separate client for this long-living query
|
|
249
294
|
const client = this.createClient(1);
|
|
250
|
-
const queryId =
|
|
295
|
+
const queryId = this.buildQueryId(requestId);
|
|
251
296
|
try {
|
|
252
|
-
const formattedQuery =
|
|
297
|
+
const formattedQuery = (0, shared_1.formatMySql)(query, values);
|
|
253
298
|
const format = 'JSONCompactEachRowWithNamesAndTypes';
|
|
254
299
|
const resultSet = await client.query({
|
|
255
300
|
query: formattedQuery,
|
|
@@ -263,35 +308,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
263
308
|
// Array<unknown> is okay, because we use fixed JSONCompactEachRowWithNamesAndTypes format
|
|
264
309
|
// And each row after first two will look like this: [42, "hello", [0,1]]
|
|
265
310
|
// https://clickhouse.com/docs/en/interfaces/formats#jsoncompacteachrowwithnamesandtypes
|
|
266
|
-
const
|
|
267
|
-
const allRowsIter = (async function* allRowsIter() {
|
|
268
|
-
for await (const rowsBatch of resultSetStream) {
|
|
269
|
-
for (const row of rowsBatch) {
|
|
270
|
-
yield row.json();
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
}());
|
|
274
|
-
const first = await allRowsIter.next();
|
|
275
|
-
if (first.done) {
|
|
276
|
-
throw new Error('Unexpected stream end before row with names');
|
|
277
|
-
}
|
|
278
|
-
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
279
|
-
const names = first.value;
|
|
280
|
-
const second = await allRowsIter.next();
|
|
281
|
-
if (second.done) {
|
|
282
|
-
throw new Error('Unexpected stream end before row with types');
|
|
283
|
-
}
|
|
284
|
-
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
285
|
-
const types = second.value;
|
|
286
|
-
if (names.length !== types.length) {
|
|
287
|
-
throw new Error(`Unexpected names and types length mismatch; names ${names.length} vs types ${types.length}`);
|
|
288
|
-
}
|
|
289
|
-
const dataRowsIter = (async function* () {
|
|
290
|
-
for await (const row of allRowsIter) {
|
|
291
|
-
yield (0, HydrationStream_1.transformStreamRow)(row, names, types);
|
|
292
|
-
}
|
|
293
|
-
}());
|
|
294
|
-
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'));
|
|
295
312
|
return {
|
|
296
313
|
rowStream,
|
|
297
314
|
types: names.map((name, idx) => {
|
|
@@ -308,15 +325,14 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
308
325
|
}
|
|
309
326
|
catch (e) {
|
|
310
327
|
await client.close();
|
|
311
|
-
|
|
312
|
-
throw new Error(`Stream query failed: ${e}; query id: ${queryId}`);
|
|
328
|
+
throw new Error(`Stream query failed: ${(0, utils_1.formatError)(e)}; query id: ${queryId}`, { cause: e });
|
|
313
329
|
}
|
|
314
330
|
}
|
|
315
331
|
async downloadQueryResults(query, values, options) {
|
|
316
332
|
if ((options ?? {}).streamImport) {
|
|
317
333
|
return this.stream(query, values, options);
|
|
318
334
|
}
|
|
319
|
-
const response = await this.queryResponse(query, values);
|
|
335
|
+
const response = await this.queryResponse(query, values, options);
|
|
320
336
|
return {
|
|
321
337
|
rows: this.normaliseResponse(response),
|
|
322
338
|
types: (response.meta ?? []).map((field) => ({
|
|
@@ -325,33 +341,49 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
325
341
|
})),
|
|
326
342
|
};
|
|
327
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
|
+
*/
|
|
328
354
|
toGenericType(columnType, precision, scale) {
|
|
329
|
-
|
|
330
|
-
|
|
355
|
+
const type = columnType.trim();
|
|
356
|
+
const lowerType = type.toLowerCase();
|
|
357
|
+
if (lowerType in ClickhouseTypeToGeneric) {
|
|
358
|
+
return ClickhouseTypeToGeneric[lowerType];
|
|
331
359
|
}
|
|
332
|
-
const
|
|
333
|
-
if (
|
|
334
|
-
precision
|
|
335
|
-
scale = Number(match[2]);
|
|
360
|
+
const argsStart = type.indexOf('(');
|
|
361
|
+
if (argsStart === -1) {
|
|
362
|
+
return super.toGenericType(type, precision, scale);
|
|
336
363
|
}
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
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));
|
|
352
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);
|
|
353
386
|
}
|
|
354
|
-
return super.toGenericType(columnType, precision, scale);
|
|
355
387
|
}
|
|
356
388
|
async createSchemaIfNotExists(schemaName) {
|
|
357
389
|
await this.command(`CREATE DATABASE IF NOT EXISTS ${schemaName}`);
|
|
@@ -359,8 +391,8 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
359
391
|
getTablesQuery(schemaName) {
|
|
360
392
|
return this.query('SELECT name as table_name FROM system.tables WHERE database = ?', [schemaName]);
|
|
361
393
|
}
|
|
362
|
-
async dropTable(tableName,
|
|
363
|
-
await this.command(`DROP TABLE ${tableName}
|
|
394
|
+
async dropTable(tableName, options) {
|
|
395
|
+
await this.command(`DROP TABLE ${tableName}`, options);
|
|
364
396
|
}
|
|
365
397
|
getExportBucket(dataSource, preAggregations) {
|
|
366
398
|
const requiredExportBucket = {
|
|
@@ -397,8 +429,8 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
397
429
|
/**
|
|
398
430
|
* Returns an array of queried fields meta info.
|
|
399
431
|
*/
|
|
400
|
-
async queryColumnTypes(sql, params) {
|
|
401
|
-
const columns = await this.query(`DESCRIBE ${sql}`, params);
|
|
432
|
+
async queryColumnTypes(sql, params, options) {
|
|
433
|
+
const columns = await this.query(`DESCRIBE ${sql}`, params, options);
|
|
402
434
|
if (!columns) {
|
|
403
435
|
throw new Error('Unable to describe table');
|
|
404
436
|
}
|
|
@@ -417,8 +449,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
417
449
|
await this.command(createTableSql);
|
|
418
450
|
}
|
|
419
451
|
catch (e) {
|
|
420
|
-
|
|
421
|
-
throw new Error(`Create table failed: ${e}`);
|
|
452
|
+
throw new Error(`Create table ${quotedTableName} failed: ${(0, utils_1.formatError)(e)}`, { cause: e });
|
|
422
453
|
}
|
|
423
454
|
}
|
|
424
455
|
/**
|
|
@@ -430,14 +461,14 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
430
461
|
}
|
|
431
462
|
return this.unloadFromQuery(options.query?.sql, options.query?.params, options);
|
|
432
463
|
}
|
|
433
|
-
async unloadFromQuery(sql, params,
|
|
464
|
+
async unloadFromQuery(sql, params, options) {
|
|
434
465
|
if (!this.config.exportBucket) {
|
|
435
466
|
throw new Error('Unload is not configured');
|
|
436
467
|
}
|
|
437
|
-
const types = await this.queryColumnTypes(`(${sql})`, params);
|
|
468
|
+
const types = await this.queryColumnTypes(`(${sql})`, params, { requestId: options.requestId });
|
|
438
469
|
const { bucketName, path } = this.parseBucketUrl(this.config.exportBucket.bucketName);
|
|
439
470
|
const exportPrefix = path ? `${path}/${(0, uuid_1.v4)()}` : (0, uuid_1.v4)();
|
|
440
|
-
const formattedQuery =
|
|
471
|
+
const formattedQuery = (0, shared_1.formatMySql)(`
|
|
441
472
|
INSERT INTO FUNCTION
|
|
442
473
|
s3(
|
|
443
474
|
'https://${bucketName}.s3.${this.config.exportBucket.region}.amazonaws.com/${exportPrefix}/export.csv.gz',
|
|
@@ -447,7 +478,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
447
478
|
)
|
|
448
479
|
${sql}
|
|
449
480
|
`, params);
|
|
450
|
-
await this.command(formattedQuery);
|
|
481
|
+
await this.command(formattedQuery, { requestId: options.requestId });
|
|
451
482
|
const csvFile = await this.extractUnloadedFilesFromS3({
|
|
452
483
|
credentials: {
|
|
453
484
|
accessKeyId: this.config.exportBucket.keyId,
|
|
@@ -470,26 +501,36 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
470
501
|
};
|
|
471
502
|
}
|
|
472
503
|
// This is not part of a driver interface, and marked public only for testing
|
|
473
|
-
async command(query) {
|
|
504
|
+
async command(query, options) {
|
|
474
505
|
await this.withCancel(async (connection, queryId, signal) => {
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
506
|
+
try {
|
|
507
|
+
await connection.command({
|
|
508
|
+
query,
|
|
509
|
+
query_id: queryId,
|
|
510
|
+
abort_signal: signal,
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
catch (e) {
|
|
514
|
+
throw new Error(`Command failed: ${(0, utils_1.formatError)(e)}; query id: ${queryId}`, { cause: e });
|
|
515
|
+
}
|
|
516
|
+
}, options);
|
|
481
517
|
}
|
|
482
518
|
// This is not part of a driver interface, and marked public only for testing
|
|
483
|
-
async insert(table, values) {
|
|
519
|
+
async insert(table, values, options) {
|
|
484
520
|
await this.withCancel(async (connection, queryId, signal) => {
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
521
|
+
try {
|
|
522
|
+
await connection.insert({
|
|
523
|
+
table,
|
|
524
|
+
values,
|
|
525
|
+
format: 'JSONCompactEachRow',
|
|
526
|
+
query_id: queryId,
|
|
527
|
+
abort_signal: signal,
|
|
528
|
+
});
|
|
529
|
+
}
|
|
530
|
+
catch (e) {
|
|
531
|
+
throw new Error(`Insert failed: ${(0, utils_1.formatError)(e)}; query id: ${queryId}`, { cause: e });
|
|
532
|
+
}
|
|
533
|
+
}, options);
|
|
493
534
|
}
|
|
494
535
|
}
|
|
495
536
|
exports.ClickHouseDriver = ClickHouseDriver;
|
|
@@ -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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAQ9C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.formatError = void 0;
|
|
4
|
+
function formatError(e) {
|
|
5
|
+
if (e instanceof AggregateError) {
|
|
6
|
+
// Node leaves `message` empty for the errors it raises itself
|
|
7
|
+
const prefix = e.message ? `Aggregate error: ${e.message}` : 'Aggregate error';
|
|
8
|
+
return `${prefix}; errors: ${e.errors.map((inner) => formatError(inner)).join('; ')}`;
|
|
9
|
+
}
|
|
10
|
+
return `${e}`;
|
|
11
|
+
}
|
|
12
|
+
exports.formatError = formatError;
|
|
13
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":";;;AAAA,SAAgB,WAAW,CAAC,CAAU;IACpC,IAAI,CAAC,YAAY,cAAc,EAAE;QAC/B,8DAA8D;QAC9D,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;QAC/E,OAAO,GAAG,MAAM,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;KACvF;IAED,OAAO,GAAG,CAAC,EAAE,CAAC;AAChB,CAAC;AARD,kCAQC"}
|
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,17 +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
|
-
"sqlstring": "^2.3.1",
|
|
36
35
|
"uuid": "^11.1.1"
|
|
37
36
|
},
|
|
38
37
|
"license": "Apache-2.0",
|
|
39
38
|
"devDependencies": {
|
|
40
|
-
"@cubejs-backend/linter": "1.7.
|
|
41
|
-
"@cubejs-backend/testing-shared": "1.7.
|
|
39
|
+
"@cubejs-backend/linter": "1.7.34",
|
|
40
|
+
"@cubejs-backend/testing-shared": "1.7.34",
|
|
42
41
|
"@types/jest": "^29",
|
|
43
42
|
"jest": "^29",
|
|
44
43
|
"typescript": "~5.2.2"
|
|
@@ -49,5 +48,5 @@
|
|
|
49
48
|
"eslintConfig": {
|
|
50
49
|
"extends": "../cubejs-linter"
|
|
51
50
|
},
|
|
52
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "9237c26f3c6181fa6abe964ee784d4a997e89523"
|
|
53
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"}
|