@cubejs-backend/clickhouse-driver 1.1.6 → 1.1.8
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 +51 -30
- package/dist/src/ClickHouseDriver.d.ts.map +1 -1
- package/dist/src/ClickHouseDriver.js +209 -136
- package/dist/src/ClickHouseDriver.js.map +1 -1
- package/dist/src/HydrationStream.d.ts +2 -6
- package/dist/src/HydrationStream.d.ts.map +1 -1
- package/dist/src/HydrationStream.js +36 -34
- package/dist/src/HydrationStream.js.map +1 -1
- package/package.json +6 -7
|
@@ -3,16 +3,35 @@
|
|
|
3
3
|
* @license Apache-2.0
|
|
4
4
|
* @fileoverview The `ClickHouseDriver` and related types declaration.
|
|
5
5
|
*/
|
|
6
|
-
import { BaseDriver, DownloadQueryResultsOptions, DownloadQueryResultsResult, DownloadTableCSVData, DriverCapabilities, DriverInterface, QuerySchemasResult, StreamOptions, StreamTableDataWithTypes, TableStructure, UnloadOptions } from '@cubejs-backend/base-driver';
|
|
7
|
-
import {
|
|
8
|
-
|
|
6
|
+
import { BaseDriver, DownloadQueryResultsOptions, DownloadQueryResultsResult, DownloadTableCSVData, DriverCapabilities, DriverInterface, QueryOptions, QuerySchemasResult, StreamOptions, StreamTableDataWithTypes, TableColumn, TableQueryResult, TableStructure, UnloadOptions } from '@cubejs-backend/base-driver';
|
|
7
|
+
import { ClickHouseClient } from '@clickhouse/client';
|
|
8
|
+
import type { ClickHouseSettings, ResponseJSON } from '@clickhouse/client';
|
|
9
|
+
export interface ClickHouseDriverOptions {
|
|
9
10
|
host?: string;
|
|
10
11
|
port?: string;
|
|
11
|
-
|
|
12
|
+
username?: string;
|
|
13
|
+
password?: string;
|
|
12
14
|
protocol?: string;
|
|
13
15
|
database?: string;
|
|
14
16
|
readOnly?: boolean;
|
|
15
|
-
|
|
17
|
+
/**
|
|
18
|
+
* Timeout in milliseconds for requests to ClickHouse.
|
|
19
|
+
* Default is 10 minutes
|
|
20
|
+
*/
|
|
21
|
+
requestTimeout?: number;
|
|
22
|
+
/**
|
|
23
|
+
* Data source name.
|
|
24
|
+
*/
|
|
25
|
+
dataSource?: string;
|
|
26
|
+
/**
|
|
27
|
+
* Max pool size value for the [cube]<-->[db] pool.
|
|
28
|
+
*/
|
|
29
|
+
maxPoolSize?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Time to wait for a response from a connection after validation
|
|
32
|
+
* request before determining it as not valid. Default - 10000 ms.
|
|
33
|
+
*/
|
|
34
|
+
testConnectionTimeout?: number;
|
|
16
35
|
}
|
|
17
36
|
interface ClickhouseDriverExportRequiredAWS {
|
|
18
37
|
bucketType: 's3';
|
|
@@ -20,43 +39,40 @@ interface ClickhouseDriverExportRequiredAWS {
|
|
|
20
39
|
region: string;
|
|
21
40
|
}
|
|
22
41
|
interface ClickhouseDriverExportKeySecretAWS extends ClickhouseDriverExportRequiredAWS {
|
|
23
|
-
keyId
|
|
24
|
-
secretKey
|
|
42
|
+
keyId: string;
|
|
43
|
+
secretKey: string;
|
|
25
44
|
}
|
|
26
45
|
interface ClickhouseDriverExportAWS extends ClickhouseDriverExportKeySecretAWS {
|
|
27
46
|
}
|
|
47
|
+
type ClickHouseDriverConfig = {
|
|
48
|
+
url: string;
|
|
49
|
+
username: string;
|
|
50
|
+
password: string;
|
|
51
|
+
readOnly: boolean;
|
|
52
|
+
database: string;
|
|
53
|
+
requestTimeout: number;
|
|
54
|
+
exportBucket: ClickhouseDriverExportAWS | null;
|
|
55
|
+
clickhouseSettings: ClickHouseSettings;
|
|
56
|
+
};
|
|
28
57
|
export declare class ClickHouseDriver extends BaseDriver implements DriverInterface {
|
|
29
58
|
/**
|
|
30
59
|
* Returns default concurrency value.
|
|
31
60
|
*/
|
|
32
61
|
static getDefaultConcurrency(): number;
|
|
33
|
-
protected readonly
|
|
62
|
+
protected readonly client: ClickHouseClient;
|
|
34
63
|
protected readonly readOnlyMode: boolean;
|
|
35
|
-
protected readonly config:
|
|
64
|
+
protected readonly config: ClickHouseDriverConfig;
|
|
36
65
|
/**
|
|
37
66
|
* Class constructor.
|
|
38
67
|
*/
|
|
39
|
-
constructor(config?: ClickHouseDriverOptions
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*/
|
|
43
|
-
dataSource?: string;
|
|
44
|
-
/**
|
|
45
|
-
* Max pool size value for the [cube]<-->[db] pool.
|
|
46
|
-
*/
|
|
47
|
-
maxPoolSize?: number;
|
|
48
|
-
/**
|
|
49
|
-
* Time to wait for a response from a connection after validation
|
|
50
|
-
* request before determining it as not valid. Default - 10000 ms.
|
|
51
|
-
*/
|
|
52
|
-
testConnectionTimeout?: number;
|
|
53
|
-
});
|
|
54
|
-
protected withConnection(fn: (con: any, queryId: string) => Promise<any>): any;
|
|
68
|
+
constructor(config?: ClickHouseDriverOptions);
|
|
69
|
+
protected withCancel<T>(fn: (con: ClickHouseClient, queryId: string, signal: AbortSignal) => Promise<T>): Promise<T>;
|
|
70
|
+
protected createClient(maxPoolSize: number): ClickHouseClient;
|
|
55
71
|
testConnection(): Promise<void>;
|
|
56
72
|
readOnly(): boolean;
|
|
57
|
-
query(query: string, values: unknown[]): Promise<
|
|
58
|
-
protected queryResponse(query: string, values: unknown[]):
|
|
59
|
-
protected normaliseResponse(res:
|
|
73
|
+
query<R = unknown>(query: string, values: unknown[]): Promise<R[]>;
|
|
74
|
+
protected queryResponse(query: string, values: unknown[]): Promise<ResponseJSON<Record<string, unknown>>>;
|
|
75
|
+
protected normaliseResponse<R = unknown>(res: ResponseJSON<Record<string, unknown>>): Array<R>;
|
|
60
76
|
release(): Promise<void>;
|
|
61
77
|
informationSchemaQuery(): string;
|
|
62
78
|
protected getTablesForSpecificSchemasQuery(schemasPlaceholders: string): string;
|
|
@@ -68,19 +84,24 @@ export declare class ClickHouseDriver extends BaseDriver implements DriverInterf
|
|
|
68
84
|
downloadQueryResults(query: string, values: unknown[], options: DownloadQueryResultsOptions): Promise<DownloadQueryResultsResult>;
|
|
69
85
|
toGenericType(columnType: string): string;
|
|
70
86
|
createSchemaIfNotExists(schemaName: string): Promise<void>;
|
|
71
|
-
getTablesQuery(schemaName: string): Promise<
|
|
72
|
-
|
|
87
|
+
getTablesQuery(schemaName: string): Promise<TableQueryResult[]>;
|
|
88
|
+
dropTable(tableName: string, _options?: QueryOptions): Promise<void>;
|
|
89
|
+
protected getExportBucket(dataSource: string): ClickhouseDriverExportAWS | null;
|
|
73
90
|
isUnloadSupported(): Promise<boolean>;
|
|
74
91
|
/**
|
|
75
92
|
* Returns an array of queried fields meta info.
|
|
76
93
|
*/
|
|
77
94
|
queryColumnTypes(sql: string, params: unknown[]): Promise<TableStructure>;
|
|
95
|
+
createTableRaw(query: string): Promise<void>;
|
|
96
|
+
createTable(quotedTableName: string, columns: TableColumn[]): Promise<void>;
|
|
78
97
|
/**
|
|
79
98
|
* We use unloadWithoutTempTable strategy
|
|
80
99
|
*/
|
|
81
100
|
unload(_tableName: string, options: UnloadOptions): Promise<DownloadTableCSVData>;
|
|
82
101
|
unloadFromQuery(sql: string, params: unknown[], options: UnloadOptions): Promise<DownloadTableCSVData>;
|
|
83
102
|
capabilities(): DriverCapabilities;
|
|
103
|
+
command(query: string): Promise<void>;
|
|
104
|
+
insert(table: string, values: Array<Array<unknown>>): Promise<void>;
|
|
84
105
|
}
|
|
85
106
|
export {};
|
|
86
107
|
//# sourceMappingURL=ClickHouseDriver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickHouseDriver.d.ts","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACL,UAAU,EACV,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,wBAAwB,EACxB,cAAc,EACd,aAAa,EACd,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"ClickHouseDriver.d.ts","sourceRoot":"","sources":["../../src/ClickHouseDriver.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,11 +11,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
11
11
|
exports.ClickHouseDriver = void 0;
|
|
12
12
|
const shared_1 = require("@cubejs-backend/shared");
|
|
13
13
|
const base_driver_1 = require("@cubejs-backend/base-driver");
|
|
14
|
-
const
|
|
14
|
+
const node_stream_1 = require("node:stream");
|
|
15
|
+
const client_1 = require("@clickhouse/client");
|
|
15
16
|
const uuid_1 = require("uuid");
|
|
16
17
|
const sqlstring_1 = __importDefault(require("sqlstring"));
|
|
17
18
|
const HydrationStream_1 = require("./HydrationStream");
|
|
18
|
-
const ClickHouse = require('@cubejs-backend/apla-clickhouse');
|
|
19
19
|
const ClickhouseTypeToGeneric = {
|
|
20
20
|
enum: 'text',
|
|
21
21
|
string: 'text',
|
|
@@ -47,7 +47,8 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
47
47
|
static getDefaultConcurrency() {
|
|
48
48
|
return 5;
|
|
49
49
|
}
|
|
50
|
-
pool
|
|
50
|
+
// ClickHouseClient has internal pool of several sockets, no need for generic-pool
|
|
51
|
+
client;
|
|
51
52
|
readOnlyMode;
|
|
52
53
|
config;
|
|
53
54
|
/**
|
|
@@ -57,84 +58,86 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
57
58
|
super({
|
|
58
59
|
testConnectionTimeout: config.testConnectionTimeout,
|
|
59
60
|
});
|
|
60
|
-
const dataSource = config.dataSource
|
|
61
|
-
|
|
61
|
+
const dataSource = config.dataSource ?? (0, shared_1.assertDataSource)('default');
|
|
62
|
+
const host = config.host ?? (0, shared_1.getEnv)('dbHost', { dataSource });
|
|
63
|
+
const port = config.port ?? (0, shared_1.getEnv)('dbPort', { dataSource }) ?? 8123;
|
|
64
|
+
const protocol = config.protocol ?? (0, shared_1.getEnv)('dbSsl', { dataSource }) ? 'https:' : 'http:';
|
|
65
|
+
const url = `${protocol}//${host}:${port}`;
|
|
66
|
+
const username = (0, shared_1.getEnv)('dbUser', { dataSource });
|
|
67
|
+
const password = (0, shared_1.getEnv)('dbPass', { dataSource });
|
|
68
|
+
const database = config.database ?? (0, shared_1.getEnv)('dbName', { dataSource }) ?? 'default';
|
|
69
|
+
// TODO this is a bit inconsistent with readOnly
|
|
70
|
+
this.readOnlyMode =
|
|
71
|
+
(0, shared_1.getEnv)('clickhouseReadOnly', { dataSource }) === 'true';
|
|
72
|
+
// Expect that getEnv('dbQueryTimeout') will always return a value
|
|
73
|
+
const requestTimeoutEnv = (0, shared_1.getEnv)('dbQueryTimeout', { dataSource }) * 1000;
|
|
74
|
+
const requestTimeout = config.requestTimeout ?? requestTimeoutEnv;
|
|
62
75
|
this.config = {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
? `${(0, shared_1.getEnv)('dbUser', { dataSource })}:${(0, shared_1.getEnv)('dbPass', { dataSource })}`
|
|
68
|
-
: '',
|
|
69
|
-
protocol: (0, shared_1.getEnv)('dbSsl', { dataSource }) ? 'https:' : 'http:',
|
|
70
|
-
queryOptions: {
|
|
71
|
-
database: (0, shared_1.getEnv)('dbName', { dataSource }) ||
|
|
72
|
-
config && config.database ||
|
|
73
|
-
'default'
|
|
74
|
-
},
|
|
76
|
+
url,
|
|
77
|
+
username,
|
|
78
|
+
password,
|
|
79
|
+
database,
|
|
75
80
|
exportBucket: this.getExportBucket(dataSource),
|
|
76
|
-
|
|
81
|
+
readOnly: !!config.readOnly,
|
|
82
|
+
requestTimeout,
|
|
83
|
+
clickhouseSettings: {
|
|
84
|
+
// If ClickHouse user's permissions are restricted with "readonly = 1",
|
|
85
|
+
// change settings queries are not allowed. Thus, "join_use_nulls" setting
|
|
86
|
+
// can not be changed
|
|
87
|
+
...(this.readOnlyMode ? {} : { join_use_nulls: 1 }),
|
|
88
|
+
},
|
|
77
89
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
this.pool = generic_pool_1.default.createPool({
|
|
81
|
-
create: async () => new ClickHouse({
|
|
82
|
-
...this.config,
|
|
83
|
-
queryOptions: {
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
// If ClickHouse user's permissions are restricted with "readonly = 1",
|
|
87
|
-
// change settings queries are not allowed. Thus, "join_use_nulls" setting
|
|
88
|
-
// can not be changed
|
|
89
|
-
//
|
|
90
|
-
//
|
|
91
|
-
...(this.readOnlyMode ? {} : { join_use_nulls: 1 }),
|
|
92
|
-
session_id: (0, uuid_1.v4)(),
|
|
93
|
-
...this.config.queryOptions,
|
|
94
|
-
}
|
|
95
|
-
}),
|
|
96
|
-
destroy: () => Promise.resolve()
|
|
97
|
-
}, {
|
|
98
|
-
min: 0,
|
|
99
|
-
max: config.maxPoolSize ||
|
|
100
|
-
(0, shared_1.getEnv)('dbMaxPoolSize', { dataSource }) ||
|
|
101
|
-
8,
|
|
102
|
-
evictionRunIntervalMillis: 10000,
|
|
103
|
-
softIdleTimeoutMillis: 30000,
|
|
104
|
-
idleTimeoutMillis: 30000,
|
|
105
|
-
acquireTimeoutMillis: 20000
|
|
106
|
-
});
|
|
90
|
+
const maxPoolSize = config.maxPoolSize ?? (0, shared_1.getEnv)("dbMaxPoolSize", { dataSource }) ?? 8;
|
|
91
|
+
this.client = this.createClient(maxPoolSize);
|
|
107
92
|
}
|
|
108
|
-
|
|
109
|
-
const self = this;
|
|
110
|
-
const connectionPromise = this.pool.acquire();
|
|
93
|
+
withCancel(fn) {
|
|
111
94
|
const queryId = (0, uuid_1.v4)();
|
|
112
|
-
|
|
113
|
-
const
|
|
114
|
-
const promise =
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
.then(res => this.pool.release(connection).then(() => {
|
|
123
|
-
if (cancelled) {
|
|
124
|
-
throw new Error('Query cancelled');
|
|
95
|
+
const abortController = new AbortController();
|
|
96
|
+
const { signal } = abortController;
|
|
97
|
+
const promise = (async () => {
|
|
98
|
+
const pingResult = await this.client.ping();
|
|
99
|
+
if (!pingResult.success) {
|
|
100
|
+
// TODO replace string formatting with proper cause
|
|
101
|
+
// pingResult.error can be AggregateError when ClickHouse hostname resolves to multiple addresses
|
|
102
|
+
let errorMessage = pingResult.error.toString();
|
|
103
|
+
if (pingResult.error instanceof AggregateError) {
|
|
104
|
+
errorMessage = `Aggregate error: ${pingResult.error.message}; errors: ${pingResult.error.errors.join('; ')}`;
|
|
125
105
|
}
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
});
|
|
135
|
-
promise.cancel = () =>
|
|
106
|
+
throw new Error(`Connection check failed: ${errorMessage}`);
|
|
107
|
+
}
|
|
108
|
+
signal.throwIfAborted();
|
|
109
|
+
// Queries sent by `fn` can hit a timeout error, would _not_ get killed, and continue running in ClickHouse
|
|
110
|
+
// TODO should we kill those as well?
|
|
111
|
+
const result = await fn(this.client, queryId, signal);
|
|
112
|
+
signal.throwIfAborted();
|
|
113
|
+
return result;
|
|
114
|
+
})();
|
|
115
|
+
promise.cancel = async () => {
|
|
116
|
+
abortController.abort();
|
|
117
|
+
// Use separate client for kill query, usual pool may be busy
|
|
118
|
+
const killClient = this.createClient(1);
|
|
119
|
+
try {
|
|
120
|
+
await killClient.command({
|
|
121
|
+
query: `KILL QUERY WHERE query_id = '${queryId}'`,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
await killClient.close();
|
|
126
|
+
}
|
|
127
|
+
};
|
|
136
128
|
return promise;
|
|
137
129
|
}
|
|
130
|
+
createClient(maxPoolSize) {
|
|
131
|
+
return (0, client_1.createClient)({
|
|
132
|
+
url: this.config.url,
|
|
133
|
+
username: this.config.username,
|
|
134
|
+
password: this.config.password,
|
|
135
|
+
database: this.config.database,
|
|
136
|
+
clickhouse_settings: this.config.clickhouseSettings,
|
|
137
|
+
request_timeout: this.config.requestTimeout,
|
|
138
|
+
max_open_connections: maxPoolSize,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
138
141
|
async testConnection() {
|
|
139
142
|
await this.query('SELECT 1', []);
|
|
140
143
|
}
|
|
@@ -144,28 +147,38 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
144
147
|
true;
|
|
145
148
|
}
|
|
146
149
|
async query(query, values) {
|
|
147
|
-
|
|
150
|
+
const response = await this.queryResponse(query, values);
|
|
151
|
+
return this.normaliseResponse(response);
|
|
148
152
|
}
|
|
149
153
|
queryResponse(query, values) {
|
|
150
154
|
const formattedQuery = sqlstring_1.default.format(query, values);
|
|
151
|
-
return this.
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
155
|
+
return this.withCancel(async (connection, queryId, signal) => {
|
|
156
|
+
try {
|
|
157
|
+
const format = 'JSON';
|
|
158
|
+
const resultSet = await connection.query({
|
|
159
|
+
query: formattedQuery,
|
|
160
|
+
query_id: queryId,
|
|
161
|
+
format,
|
|
162
|
+
clickhouse_settings: this.config.clickhouseSettings,
|
|
163
|
+
abort_signal: signal,
|
|
164
|
+
});
|
|
165
|
+
if (resultSet.response_headers['x-clickhouse-format'] !== format) {
|
|
166
|
+
throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
|
|
167
|
+
}
|
|
168
|
+
// We used format JSON, so we expect each row to be Record with column names as keys
|
|
169
|
+
const results = await resultSet.json();
|
|
170
|
+
return results;
|
|
163
171
|
}
|
|
164
|
-
|
|
172
|
+
catch (e) {
|
|
173
|
+
// TODO replace string formatting with proper cause
|
|
174
|
+
throw new Error(`Query failed: ${e}; query id: ${queryId}`);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
165
177
|
}
|
|
166
178
|
normaliseResponse(res) {
|
|
167
179
|
if (res.data) {
|
|
168
|
-
const meta = res.meta.reduce((state, element) => ({ [element.name]: element, ...state }), {});
|
|
180
|
+
const meta = (res.meta ?? []).reduce((state, element) => ({ [element.name]: element, ...state }), {});
|
|
181
|
+
// TODO maybe use row-based format here as well?
|
|
169
182
|
res.data.forEach((row) => {
|
|
170
183
|
(0, HydrationStream_1.transformRow)(row, meta);
|
|
171
184
|
});
|
|
@@ -173,8 +186,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
173
186
|
return res.data;
|
|
174
187
|
}
|
|
175
188
|
async release() {
|
|
176
|
-
await this.
|
|
177
|
-
await this.pool.clear();
|
|
189
|
+
await this.client.close();
|
|
178
190
|
}
|
|
179
191
|
informationSchemaQuery() {
|
|
180
192
|
return `
|
|
@@ -183,7 +195,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
183
195
|
database as table_schema,
|
|
184
196
|
type as data_type
|
|
185
197
|
FROM system.columns
|
|
186
|
-
WHERE database = '${this.config.
|
|
198
|
+
WHERE database = '${this.config.database}'
|
|
187
199
|
`;
|
|
188
200
|
}
|
|
189
201
|
getTablesForSpecificSchemasQuery(schemasPlaceholders) {
|
|
@@ -213,65 +225,86 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
213
225
|
return 'table';
|
|
214
226
|
}
|
|
215
227
|
async getSchemas() {
|
|
216
|
-
return [{ schema_name: this.config.
|
|
228
|
+
return [{ schema_name: this.config.database }];
|
|
217
229
|
}
|
|
218
230
|
async stream(query, values,
|
|
219
231
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
220
232
|
{ highWaterMark }) {
|
|
221
|
-
//
|
|
222
|
-
const
|
|
233
|
+
// Use separate client for this long-living query
|
|
234
|
+
const client = this.createClient(1);
|
|
235
|
+
const queryId = (0, uuid_1.v4)();
|
|
223
236
|
try {
|
|
224
237
|
const formattedQuery = sqlstring_1.default.format(query, values);
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
// If ClickHouse user's permissions are restricted with "readonly = 1",
|
|
232
|
-
// change settings queries are not allowed. Thus, "join_use_nulls" setting
|
|
233
|
-
// can not be changed
|
|
234
|
-
//
|
|
235
|
-
//
|
|
236
|
-
...(this.readOnlyMode ? {} : { join_use_nulls: 1 }),
|
|
237
|
-
}
|
|
238
|
-
};
|
|
239
|
-
const originalStream = conn.query(formattedQuery, options, (err, result) => {
|
|
240
|
-
if (err) {
|
|
241
|
-
reject(err);
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
const rowStream = new HydrationStream_1.HydrationStream(result.meta);
|
|
245
|
-
originalStream.pipe(rowStream);
|
|
246
|
-
resolve({
|
|
247
|
-
rowStream,
|
|
248
|
-
types: result.meta.map((field) => ({
|
|
249
|
-
name: field.name,
|
|
250
|
-
type: this.toGenericType(field.type),
|
|
251
|
-
})),
|
|
252
|
-
release: async () => {
|
|
253
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
254
|
-
await this.pool._factory.destroy(conn);
|
|
255
|
-
}
|
|
256
|
-
});
|
|
257
|
-
}
|
|
258
|
-
});
|
|
238
|
+
const format = 'JSONCompactEachRowWithNamesAndTypes';
|
|
239
|
+
const resultSet = await client.query({
|
|
240
|
+
query: formattedQuery,
|
|
241
|
+
query_id: queryId,
|
|
242
|
+
format,
|
|
243
|
+
clickhouse_settings: this.config.clickhouseSettings,
|
|
259
244
|
});
|
|
245
|
+
if (resultSet.response_headers['x-clickhouse-format'] !== format) {
|
|
246
|
+
throw new Error(`Unexpected x-clickhouse-format in response: expected ${format}, received ${resultSet.response_headers['x-clickhouse-format']}`);
|
|
247
|
+
}
|
|
248
|
+
// Array<unknown> is okay, because we use fixed JSONCompactEachRowWithNamesAndTypes format
|
|
249
|
+
// And each row after first two will look like this: [42, "hello", [0,1]]
|
|
250
|
+
// https://clickhouse.com/docs/en/interfaces/formats#jsoncompacteachrowwithnamesandtypes
|
|
251
|
+
const resultSetStream = resultSet.stream();
|
|
252
|
+
const allRowsIter = (async function* allRowsIter() {
|
|
253
|
+
for await (const rowsBatch of resultSetStream) {
|
|
254
|
+
for (const row of rowsBatch) {
|
|
255
|
+
yield row.json();
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}());
|
|
259
|
+
const first = await allRowsIter.next();
|
|
260
|
+
if (first.done) {
|
|
261
|
+
throw new Error('Unexpected stream end before row with names');
|
|
262
|
+
}
|
|
263
|
+
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
264
|
+
const names = first.value;
|
|
265
|
+
const second = await allRowsIter.next();
|
|
266
|
+
if (second.done) {
|
|
267
|
+
throw new Error('Unexpected stream end before row with types');
|
|
268
|
+
}
|
|
269
|
+
// JSONCompactEachRowWithNamesAndTypes: expect first row to be column names as string
|
|
270
|
+
const types = second.value;
|
|
271
|
+
if (names.length !== types.length) {
|
|
272
|
+
throw new Error(`Unexpected names and types length mismatch; names ${names.length} vs types ${types.length}`);
|
|
273
|
+
}
|
|
274
|
+
const dataRowsIter = (async function* () {
|
|
275
|
+
for await (const row of allRowsIter) {
|
|
276
|
+
yield (0, HydrationStream_1.transformStreamRow)(row, names, types);
|
|
277
|
+
}
|
|
278
|
+
}());
|
|
279
|
+
const rowStream = node_stream_1.Readable.from(dataRowsIter);
|
|
280
|
+
return {
|
|
281
|
+
rowStream,
|
|
282
|
+
types: names.map((name, idx) => {
|
|
283
|
+
const type = types[idx];
|
|
284
|
+
return {
|
|
285
|
+
name,
|
|
286
|
+
type: this.toGenericType(type),
|
|
287
|
+
};
|
|
288
|
+
}),
|
|
289
|
+
release: async () => {
|
|
290
|
+
await client.close();
|
|
291
|
+
}
|
|
292
|
+
};
|
|
260
293
|
}
|
|
261
294
|
catch (e) {
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
throw e;
|
|
295
|
+
await client.close();
|
|
296
|
+
// TODO replace string formatting with proper cause
|
|
297
|
+
throw new Error(`Stream query failed: ${e}; query id: ${queryId}`);
|
|
265
298
|
}
|
|
266
299
|
}
|
|
267
300
|
async downloadQueryResults(query, values, options) {
|
|
268
|
-
if ((options
|
|
301
|
+
if ((options ?? {}).streamImport) {
|
|
269
302
|
return this.stream(query, values, options);
|
|
270
303
|
}
|
|
271
304
|
const response = await this.queryResponse(query, values);
|
|
272
305
|
return {
|
|
273
306
|
rows: this.normaliseResponse(response),
|
|
274
|
-
types: response.meta.map((field) => ({
|
|
307
|
+
types: (response.meta ?? []).map((field) => ({
|
|
275
308
|
name: field.name,
|
|
276
309
|
type: this.toGenericType(field.type),
|
|
277
310
|
})),
|
|
@@ -301,11 +334,14 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
301
334
|
return super.toGenericType(columnType);
|
|
302
335
|
}
|
|
303
336
|
async createSchemaIfNotExists(schemaName) {
|
|
304
|
-
await this.
|
|
337
|
+
await this.command(`CREATE DATABASE IF NOT EXISTS ${schemaName}`);
|
|
305
338
|
}
|
|
306
339
|
getTablesQuery(schemaName) {
|
|
307
340
|
return this.query('SELECT name as table_name FROM system.tables WHERE database = ?', [schemaName]);
|
|
308
341
|
}
|
|
342
|
+
async dropTable(tableName, _options) {
|
|
343
|
+
await this.command(`DROP TABLE ${tableName}`);
|
|
344
|
+
}
|
|
309
345
|
getExportBucket(dataSource) {
|
|
310
346
|
const supportedBucketTypes = ['s3'];
|
|
311
347
|
const requiredExportBucket = {
|
|
@@ -333,7 +369,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
333
369
|
}
|
|
334
370
|
return exportBucket;
|
|
335
371
|
}
|
|
336
|
-
return
|
|
372
|
+
return null;
|
|
337
373
|
}
|
|
338
374
|
async isUnloadSupported() {
|
|
339
375
|
if (this.config.exportBucket) {
|
|
@@ -354,6 +390,20 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
354
390
|
type: this.toGenericType(column.type),
|
|
355
391
|
}));
|
|
356
392
|
}
|
|
393
|
+
// This is only for use in tests
|
|
394
|
+
async createTableRaw(query) {
|
|
395
|
+
await this.command(query);
|
|
396
|
+
}
|
|
397
|
+
async createTable(quotedTableName, columns) {
|
|
398
|
+
const createTableSql = this.createTableSql(quotedTableName, columns);
|
|
399
|
+
try {
|
|
400
|
+
await this.command(createTableSql);
|
|
401
|
+
}
|
|
402
|
+
catch (e) {
|
|
403
|
+
// TODO replace string formatting with proper cause
|
|
404
|
+
throw new Error(`Create table failed: ${e}`);
|
|
405
|
+
}
|
|
406
|
+
}
|
|
357
407
|
/**
|
|
358
408
|
* We use unloadWithoutTempTable strategy
|
|
359
409
|
*/
|
|
@@ -369,7 +419,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
369
419
|
}
|
|
370
420
|
const types = await this.queryColumnTypes(`(${sql})`, params);
|
|
371
421
|
const exportPrefix = (0, uuid_1.v4)();
|
|
372
|
-
|
|
422
|
+
const formattedQuery = sqlstring_1.default.format(`
|
|
373
423
|
INSERT INTO FUNCTION
|
|
374
424
|
s3(
|
|
375
425
|
'https://${this.config.exportBucket.bucketName}.s3.${this.config.exportBucket.region}.amazonaws.com/${exportPrefix}/export.csv.gz',
|
|
@@ -379,6 +429,7 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
379
429
|
)
|
|
380
430
|
${sql}
|
|
381
431
|
`, params);
|
|
432
|
+
await this.command(formattedQuery);
|
|
382
433
|
const csvFile = await this.extractUnloadedFilesFromS3({
|
|
383
434
|
credentials: {
|
|
384
435
|
accessKeyId: this.config.exportBucket.keyId,
|
|
@@ -400,6 +451,28 @@ class ClickHouseDriver extends base_driver_1.BaseDriver {
|
|
|
400
451
|
incrementalSchemaLoading: true,
|
|
401
452
|
};
|
|
402
453
|
}
|
|
454
|
+
// This is not part of a driver interface, and marked public only for testing
|
|
455
|
+
async command(query) {
|
|
456
|
+
await this.withCancel(async (connection, queryId, signal) => {
|
|
457
|
+
await connection.command({
|
|
458
|
+
query,
|
|
459
|
+
query_id: queryId,
|
|
460
|
+
abort_signal: signal,
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
// This is not part of a driver interface, and marked public only for testing
|
|
465
|
+
async insert(table, values) {
|
|
466
|
+
await this.withCancel(async (connection, queryId, signal) => {
|
|
467
|
+
await connection.insert({
|
|
468
|
+
table,
|
|
469
|
+
values,
|
|
470
|
+
format: 'JSONCompactEachRow',
|
|
471
|
+
query_id: queryId,
|
|
472
|
+
abort_signal: signal,
|
|
473
|
+
});
|
|
474
|
+
});
|
|
475
|
+
}
|
|
403
476
|
}
|
|
404
477
|
exports.ClickHouseDriver = ClickHouseDriver;
|
|
405
478
|
//# sourceMappingURL=ClickHouseDriver.js.map
|
|
@@ -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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"}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export declare function transformRow(row: Record<string, any>, meta: any): void;
|
|
4
|
-
export declare class HydrationStream extends stream.Transform {
|
|
5
|
-
constructor(meta: any);
|
|
6
|
-
}
|
|
1
|
+
export declare function transformRow(row: Record<string, unknown>, meta: any): void;
|
|
2
|
+
export declare function transformStreamRow(row: Array<unknown>, names: Array<string>, types: Array<string>): Record<string, unknown>;
|
|
7
3
|
//# sourceMappingURL=HydrationStream.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HydrationStream.d.ts","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":"
|
|
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"}
|
|
@@ -22,51 +22,53 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
|
-
exports.
|
|
30
|
-
const stream_1 = __importDefault(require("stream"));
|
|
26
|
+
exports.transformStreamRow = exports.transformRow = void 0;
|
|
31
27
|
const moment = __importStar(require("moment"));
|
|
32
28
|
// ClickHouse returns DateTime as strings in format "YYYY-DD-MM HH:MM:SS"
|
|
33
29
|
// cube.js expects them in format "YYYY-DD-MMTHH:MM:SS.000", so translate them based on the metadata returned
|
|
34
30
|
//
|
|
35
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
|
+
}
|
|
36
54
|
function transformRow(row, meta) {
|
|
37
55
|
for (const [fieldName, value] of Object.entries(row)) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (metaForField.type.includes('DateTime64')) {
|
|
41
|
-
row[fieldName] = moment.utc(value).format(moment.HTML5_FMT.DATETIME_LOCAL_MS);
|
|
42
|
-
}
|
|
43
|
-
else if (metaForField.type.includes('DateTime') /** Can be DateTime or DateTime('timezone') */) {
|
|
44
|
-
row[fieldName] = `${value.substring(0, 10)}T${value.substring(11, 22)}.000`;
|
|
45
|
-
}
|
|
46
|
-
else if (metaForField.type.includes('Date')) {
|
|
47
|
-
row[fieldName] = `${value}T00:00:00.000`;
|
|
48
|
-
}
|
|
49
|
-
else if (metaForField.type.includes('Int')
|
|
50
|
-
|| metaForField.type.includes('Float')
|
|
51
|
-
|| metaForField.type.includes('Decimal')) {
|
|
52
|
-
// convert all numbers into strings
|
|
53
|
-
row[fieldName] = `${value}`;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
+
const metaForField = meta[fieldName];
|
|
57
|
+
row[fieldName] = transformValue(metaForField.type, value);
|
|
56
58
|
}
|
|
57
59
|
}
|
|
58
60
|
exports.transformRow = transformRow;
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
objectMode: true,
|
|
63
|
-
transform(row, encoding, callback) {
|
|
64
|
-
transformRow(row, meta);
|
|
65
|
-
this.push(row);
|
|
66
|
-
callback();
|
|
67
|
-
}
|
|
68
|
-
});
|
|
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}`);
|
|
69
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));
|
|
70
72
|
}
|
|
71
|
-
exports.
|
|
73
|
+
exports.transformStreamRow = transformStreamRow;
|
|
72
74
|
//# sourceMappingURL=HydrationStream.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HydrationStream.js","sourceRoot":"","sources":["../../src/HydrationStream.ts"],"names":[],"mappings":"
|
|
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"}
|
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.1.
|
|
5
|
+
"version": "1.1.8",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
8
|
"url": "https://github.com/cube-js/cube.git",
|
|
@@ -27,10 +27,9 @@
|
|
|
27
27
|
"integration:clickhouse": "jest dist/test"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@
|
|
31
|
-
"@cubejs-backend/base-driver": "1.1.
|
|
32
|
-
"@cubejs-backend/shared": "1.1.
|
|
33
|
-
"generic-pool": "^3.6.0",
|
|
30
|
+
"@clickhouse/client": "^1.7.0",
|
|
31
|
+
"@cubejs-backend/base-driver": "1.1.8",
|
|
32
|
+
"@cubejs-backend/shared": "1.1.8",
|
|
34
33
|
"moment": "^2.24.0",
|
|
35
34
|
"sqlstring": "^2.3.1",
|
|
36
35
|
"uuid": "^8.3.2"
|
|
@@ -38,7 +37,7 @@
|
|
|
38
37
|
"license": "Apache-2.0",
|
|
39
38
|
"devDependencies": {
|
|
40
39
|
"@cubejs-backend/linter": "^1.0.0",
|
|
41
|
-
"@cubejs-backend/testing-shared": "1.1.
|
|
40
|
+
"@cubejs-backend/testing-shared": "1.1.8",
|
|
42
41
|
"@types/jest": "^27",
|
|
43
42
|
"jest": "27",
|
|
44
43
|
"typescript": "~5.2.2"
|
|
@@ -52,5 +51,5 @@
|
|
|
52
51
|
"eslintConfig": {
|
|
53
52
|
"extends": "../cubejs-linter"
|
|
54
53
|
},
|
|
55
|
-
"gitHead": "
|
|
54
|
+
"gitHead": "2b4bc9efeee2dc43515822738f23c6c5e85e4461"
|
|
56
55
|
}
|