@chkit/clickhouse 0.1.0-beta.9 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ddl-propagation.d.ts +11 -0
- package/dist/ddl-propagation.d.ts.map +1 -0
- package/dist/ddl-propagation.js +80 -0
- package/dist/ddl-propagation.js.map +1 -0
- package/dist/e2e-testkit.d.ts +34 -0
- package/dist/e2e-testkit.d.ts.map +1 -0
- package/dist/e2e-testkit.js +74 -0
- package/dist/e2e-testkit.js.map +1 -0
- package/dist/index.d.ts +136 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +515 -89
- package/dist/index.js.map +1 -1
- package/package.json +21 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ClickHouseExecutor } from './index.js';
|
|
2
|
+
export declare function waitForTable(executor: ClickHouseExecutor, database: string, tableName: string): Promise<void>;
|
|
3
|
+
export declare function waitForView(executor: ClickHouseExecutor, database: string, viewName: string): Promise<void>;
|
|
4
|
+
export declare function waitForColumn(executor: ClickHouseExecutor, database: string, tableName: string, columnName: string): Promise<void>;
|
|
5
|
+
export declare function waitForTableAbsent(executor: ClickHouseExecutor, database: string, tableName: string): Promise<void>;
|
|
6
|
+
/**
|
|
7
|
+
* Waits for DDL propagation based on the operation type and key.
|
|
8
|
+
* Called after each DDL statement in the migration execution loop.
|
|
9
|
+
*/
|
|
10
|
+
export declare function waitForDDLPropagation(executor: ClickHouseExecutor, operationType: string, operationKey: string): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=ddl-propagation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl-propagation.d.ts","sourceRoot":"","sources":["../src/ddl-propagation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAIpD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,aAAa,CACjC,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,kBAAkB,EAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAWf;AAwBD;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,QAAQ,EAAE,kBAAkB,EAC5B,aAAa,EAAE,MAAM,EACrB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import pRetry from 'p-retry';
|
|
2
|
+
const RETRY_OPTIONS = { retries: 20, minTimeout: 500, factor: 1 };
|
|
3
|
+
export async function waitForTable(executor, database, tableName) {
|
|
4
|
+
await pRetry(async () => {
|
|
5
|
+
const rows = await executor.query(`SELECT 1 AS x FROM system.tables WHERE database = '${database}' AND name = '${tableName}'`);
|
|
6
|
+
if (rows.length === 0) {
|
|
7
|
+
throw new Error(`waitForTable: ${database}.${tableName} not yet visible`);
|
|
8
|
+
}
|
|
9
|
+
}, RETRY_OPTIONS);
|
|
10
|
+
}
|
|
11
|
+
export async function waitForView(executor, database, viewName) {
|
|
12
|
+
await pRetry(async () => {
|
|
13
|
+
const rows = await executor.query(`SELECT 1 AS x FROM system.tables WHERE database = '${database}' AND name = '${viewName}' AND engine LIKE '%View%'`);
|
|
14
|
+
if (rows.length === 0) {
|
|
15
|
+
throw new Error(`waitForView: ${database}.${viewName} not yet visible`);
|
|
16
|
+
}
|
|
17
|
+
}, RETRY_OPTIONS);
|
|
18
|
+
}
|
|
19
|
+
export async function waitForColumn(executor, database, tableName, columnName) {
|
|
20
|
+
await pRetry(async () => {
|
|
21
|
+
const rows = await executor.query(`SELECT 1 AS x FROM system.columns WHERE database = '${database}' AND table = '${tableName}' AND name = '${columnName}'`);
|
|
22
|
+
if (rows.length === 0) {
|
|
23
|
+
throw new Error(`waitForColumn: ${database}.${tableName}.${columnName} not yet visible`);
|
|
24
|
+
}
|
|
25
|
+
}, RETRY_OPTIONS);
|
|
26
|
+
}
|
|
27
|
+
export async function waitForTableAbsent(executor, database, tableName) {
|
|
28
|
+
await pRetry(async () => {
|
|
29
|
+
const rows = await executor.query(`SELECT 1 AS x FROM system.tables WHERE database = '${database}' AND name = '${tableName}'`);
|
|
30
|
+
if (rows.length > 0) {
|
|
31
|
+
throw new Error(`waitForTableAbsent: ${database}.${tableName} still present`);
|
|
32
|
+
}
|
|
33
|
+
}, RETRY_OPTIONS);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Parses an operation key like "table:app.users" or "table:app.users:column:name"
|
|
37
|
+
* into its components.
|
|
38
|
+
*/
|
|
39
|
+
function parseOperationKey(key) {
|
|
40
|
+
const tableMatch = key.match(/^table:([^.]+)\.([^:]+)/);
|
|
41
|
+
if (!tableMatch)
|
|
42
|
+
return undefined;
|
|
43
|
+
// biome-ignore lint/style/noNonNullAssertion: capture groups guaranteed by regex match
|
|
44
|
+
const database = tableMatch[1];
|
|
45
|
+
// biome-ignore lint/style/noNonNullAssertion: capture groups guaranteed by regex match
|
|
46
|
+
const table = tableMatch[2];
|
|
47
|
+
const columnMatch = key.match(/:column:([^:]+)/);
|
|
48
|
+
return { database, table, column: columnMatch?.[1] };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Waits for DDL propagation based on the operation type and key.
|
|
52
|
+
* Called after each DDL statement in the migration execution loop.
|
|
53
|
+
*/
|
|
54
|
+
export async function waitForDDLPropagation(executor, operationType, operationKey) {
|
|
55
|
+
const parsed = parseOperationKey(operationKey);
|
|
56
|
+
if (!parsed)
|
|
57
|
+
return; // database-level ops or unrecognized keys — no wait needed
|
|
58
|
+
switch (operationType) {
|
|
59
|
+
case 'create_table':
|
|
60
|
+
return waitForTable(executor, parsed.database, parsed.table);
|
|
61
|
+
case 'create_view':
|
|
62
|
+
case 'create_materialized_view':
|
|
63
|
+
return waitForView(executor, parsed.database, parsed.table);
|
|
64
|
+
case 'alter_table_add_column':
|
|
65
|
+
case 'alter_table_modify_column':
|
|
66
|
+
if (parsed.column) {
|
|
67
|
+
return waitForColumn(executor, parsed.database, parsed.table, parsed.column);
|
|
68
|
+
}
|
|
69
|
+
return;
|
|
70
|
+
case 'drop_table':
|
|
71
|
+
case 'drop_view':
|
|
72
|
+
case 'drop_materialized_view':
|
|
73
|
+
return waitForTableAbsent(executor, parsed.database, parsed.table);
|
|
74
|
+
default:
|
|
75
|
+
// alter_table_add_index, alter_table_modify_setting, etc.
|
|
76
|
+
// Wait for the table to exist as a basic sanity check.
|
|
77
|
+
return waitForTable(executor, parsed.database, parsed.table);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=ddl-propagation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ddl-propagation.js","sourceRoot":"","sources":["../src/ddl-propagation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared E2E test utilities for live ClickHouse tests.
|
|
3
|
+
*
|
|
4
|
+
* Hard-fails on missing env — never skips.
|
|
5
|
+
* Uses ClickHouseExecutor so any package that depends on @chkit/clickhouse can import this.
|
|
6
|
+
*/
|
|
7
|
+
import { type ClickHouseExecutor } from './index.js';
|
|
8
|
+
export interface LiveEnv {
|
|
9
|
+
clickhouseUrl: string;
|
|
10
|
+
clickhouseUser: string;
|
|
11
|
+
clickhousePassword: string;
|
|
12
|
+
clickhouseDatabase: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Reads and validates required ClickHouse env vars.
|
|
16
|
+
* Throws immediately if anything is missing — tests must not silently skip.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getRequiredEnv(): LiveEnv;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a ClickHouseExecutor configured for E2E tests from env vars.
|
|
21
|
+
*/
|
|
22
|
+
export declare function createLiveExecutor(env: LiveEnv): ClickHouseExecutor;
|
|
23
|
+
/**
|
|
24
|
+
* Use only for live tests that intentionally issue parallel queries through one
|
|
25
|
+
* executor. The default live executor is session-bound and should be used for
|
|
26
|
+
* normal sequential DDL workflows.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createStatelessLiveExecutor(env: LiveEnv): ClickHouseExecutor;
|
|
29
|
+
export declare function quoteIdent(value: string): string;
|
|
30
|
+
export declare function createRunTag(): string;
|
|
31
|
+
export declare function createPrefix(label: string): string;
|
|
32
|
+
export declare function createJournalTableName(label: string): string;
|
|
33
|
+
export { waitForTable, waitForView, waitForColumn } from './ddl-propagation.js';
|
|
34
|
+
//# sourceMappingURL=e2e-testkit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e-testkit.d.ts","sourceRoot":"","sources":["../src/e2e-testkit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,YAAY,CAAA;AAMnB,MAAM,WAAW,OAAO;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAiBxC;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAOnE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,CAO5E;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAMD,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK5D;AAMD,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared E2E test utilities for live ClickHouse tests.
|
|
3
|
+
*
|
|
4
|
+
* Hard-fails on missing env — never skips.
|
|
5
|
+
* Uses ClickHouseExecutor so any package that depends on @chkit/clickhouse can import this.
|
|
6
|
+
*/
|
|
7
|
+
import { createClickHouseExecutor, createStatelessClickHouseExecutor, } from './index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Reads and validates required ClickHouse env vars.
|
|
10
|
+
* Throws immediately if anything is missing — tests must not silently skip.
|
|
11
|
+
*/
|
|
12
|
+
export function getRequiredEnv() {
|
|
13
|
+
const clickhouseHost = process.env.CLICKHOUSE_HOST?.trim();
|
|
14
|
+
const clickhouseUrl = process.env.CLICKHOUSE_URL?.trim() || (clickhouseHost ? `https://${clickhouseHost}` : '');
|
|
15
|
+
const clickhouseUser = process.env.CLICKHOUSE_USER?.trim() || 'default';
|
|
16
|
+
const clickhousePassword = process.env.CLICKHOUSE_PASSWORD?.trim() || '';
|
|
17
|
+
const clickhouseDatabase = process.env.CLICKHOUSE_DB?.trim() || 'default';
|
|
18
|
+
if (!clickhouseUrl) {
|
|
19
|
+
throw new Error('Missing CLICKHOUSE_URL or CLICKHOUSE_HOST');
|
|
20
|
+
}
|
|
21
|
+
if (!clickhousePassword) {
|
|
22
|
+
throw new Error('Missing CLICKHOUSE_PASSWORD');
|
|
23
|
+
}
|
|
24
|
+
return { clickhouseUrl, clickhouseUser, clickhousePassword, clickhouseDatabase };
|
|
25
|
+
}
|
|
26
|
+
// ---------------------------------------------------------------------------
|
|
27
|
+
// ClickHouse executor helpers
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
/**
|
|
30
|
+
* Creates a ClickHouseExecutor configured for E2E tests from env vars.
|
|
31
|
+
*/
|
|
32
|
+
export function createLiveExecutor(env) {
|
|
33
|
+
return createClickHouseExecutor({
|
|
34
|
+
url: env.clickhouseUrl,
|
|
35
|
+
username: env.clickhouseUser,
|
|
36
|
+
password: env.clickhousePassword,
|
|
37
|
+
database: env.clickhouseDatabase,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Use only for live tests that intentionally issue parallel queries through one
|
|
42
|
+
* executor. The default live executor is session-bound and should be used for
|
|
43
|
+
* normal sequential DDL workflows.
|
|
44
|
+
*/
|
|
45
|
+
export function createStatelessLiveExecutor(env) {
|
|
46
|
+
return createStatelessClickHouseExecutor({
|
|
47
|
+
url: env.clickhouseUrl,
|
|
48
|
+
username: env.clickhouseUser,
|
|
49
|
+
password: env.clickhousePassword,
|
|
50
|
+
database: env.clickhouseDatabase,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
export function quoteIdent(value) {
|
|
54
|
+
return `\`${value.replace(/`/g, '``')}\``;
|
|
55
|
+
}
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Run tags & naming
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
export function createRunTag() {
|
|
60
|
+
return `${process.pid}_${Date.now()}_${Math.floor(Math.random() * 100000)}`;
|
|
61
|
+
}
|
|
62
|
+
export function createPrefix(label) {
|
|
63
|
+
return `chkit_e2e_${label}_${Date.now()}_${Math.floor(Math.random() * 100000)}_`;
|
|
64
|
+
}
|
|
65
|
+
export function createJournalTableName(label) {
|
|
66
|
+
const runTag = process.env.GITHUB_RUN_ID?.trim() ||
|
|
67
|
+
`${Date.now()}_${Math.floor(Math.random() * 100000)}`;
|
|
68
|
+
return `_chkit_migrations_${label}_${runTag}`;
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// State-based polling (re-exported from ddl-propagation for test convenience)
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
export { waitForTable, waitForView, waitForColumn } from './ddl-propagation.js';
|
|
74
|
+
//# sourceMappingURL=e2e-testkit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"e2e-testkit.js","sourceRoot":"","sources":["../src/e2e-testkit.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,56 @@
|
|
|
1
1
|
import { type ChxConfig, type ColumnDefinition, type ProjectionDefinition, type SkipIndexDefinition } from '@chkit/core';
|
|
2
|
+
import { type ClickHouseSettings, createClient } from '@clickhouse/client';
|
|
3
|
+
export interface QueryStatus {
|
|
4
|
+
status: 'running' | 'finished' | 'failed' | 'unknown';
|
|
5
|
+
readRows?: number;
|
|
6
|
+
readBytes?: number;
|
|
7
|
+
writtenRows?: number;
|
|
8
|
+
writtenBytes?: number;
|
|
9
|
+
elapsedMs?: number;
|
|
10
|
+
durationMs?: number;
|
|
11
|
+
error?: string;
|
|
12
|
+
}
|
|
13
|
+
export type { ClickHouseSettings };
|
|
14
|
+
export interface ClickHouseInsertParams<T extends Record<string, unknown>> {
|
|
15
|
+
table: string;
|
|
16
|
+
values: T[];
|
|
17
|
+
compressed?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface ClickHouseJsonQueryResult<T extends Record<string, unknown> = Record<string, unknown>> {
|
|
20
|
+
data: T[];
|
|
21
|
+
meta: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
type: string;
|
|
24
|
+
}>;
|
|
25
|
+
rows: number;
|
|
26
|
+
statistics?: {
|
|
27
|
+
elapsed?: number;
|
|
28
|
+
rows_read?: number;
|
|
29
|
+
bytes_read?: number;
|
|
30
|
+
};
|
|
31
|
+
query_id?: string;
|
|
32
|
+
}
|
|
2
33
|
export interface ClickHouseExecutor {
|
|
3
|
-
|
|
4
|
-
query<T>(sql: string): Promise<T[]>;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
values: T[];
|
|
8
|
-
}): Promise<void>;
|
|
34
|
+
command(sql: string): Promise<void>;
|
|
35
|
+
query<T>(sql: string, settings?: ClickHouseSettings): Promise<T[]>;
|
|
36
|
+
queryJson?<T extends Record<string, unknown>>(sql: string, settings?: ClickHouseSettings): Promise<ClickHouseJsonQueryResult<T>>;
|
|
37
|
+
insert<T extends Record<string, unknown>>(params: ClickHouseInsertParams<T>): Promise<void>;
|
|
9
38
|
listSchemaObjects(): Promise<SchemaObjectRef[]>;
|
|
10
39
|
listTableDetails(databases: string[]): Promise<IntrospectedTable[]>;
|
|
40
|
+
/** Submit a query asynchronously. ClickHouse accepts the query and processes it server-side.
|
|
41
|
+
* Returns immediately without waiting for completion.
|
|
42
|
+
* @param sql - The SQL to execute
|
|
43
|
+
* @param queryId - Optional deterministic query_id (useful for resumability). Auto-generated if omitted.
|
|
44
|
+
* @returns The query_id assigned to this query. */
|
|
45
|
+
submit(sql: string, queryId?: string): Promise<string>;
|
|
46
|
+
/** Check the status of a previously submitted query.
|
|
47
|
+
* Checks system.processes first (running?), then system.query_log (finished/failed?).
|
|
48
|
+
* @param queryId - The query_id returned by submit()
|
|
49
|
+
* @param options.afterTime - Only consider query_log entries for queries started at or after this ISO timestamp.
|
|
50
|
+
* Useful when resubmitting with the same query_id to ignore stale entries from previous attempts. */
|
|
51
|
+
queryStatus(queryId: string, options?: {
|
|
52
|
+
afterTime?: string;
|
|
53
|
+
}): Promise<QueryStatus>;
|
|
11
54
|
close(): Promise<void>;
|
|
12
55
|
}
|
|
13
56
|
export interface SchemaObjectRef {
|
|
@@ -15,6 +58,31 @@ export interface SchemaObjectRef {
|
|
|
15
58
|
database: string;
|
|
16
59
|
name: string;
|
|
17
60
|
}
|
|
61
|
+
export interface SystemTableRow {
|
|
62
|
+
database: string;
|
|
63
|
+
name: string;
|
|
64
|
+
engine: string;
|
|
65
|
+
create_table_query?: string;
|
|
66
|
+
}
|
|
67
|
+
export interface SystemColumnRow {
|
|
68
|
+
database: string;
|
|
69
|
+
table: string;
|
|
70
|
+
name: string;
|
|
71
|
+
type: string;
|
|
72
|
+
default_kind?: string;
|
|
73
|
+
default_expression?: string;
|
|
74
|
+
comment?: string;
|
|
75
|
+
position: number;
|
|
76
|
+
compression_codec?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface SystemSkippingIndexRow {
|
|
79
|
+
database: string;
|
|
80
|
+
table: string;
|
|
81
|
+
name: string;
|
|
82
|
+
expr: string;
|
|
83
|
+
type: string;
|
|
84
|
+
granularity: number;
|
|
85
|
+
}
|
|
18
86
|
export interface IntrospectedTable {
|
|
19
87
|
database: string;
|
|
20
88
|
name: string;
|
|
@@ -29,7 +97,68 @@ export interface IntrospectedTable {
|
|
|
29
97
|
projections: ProjectionDefinition[];
|
|
30
98
|
ttl?: string;
|
|
31
99
|
}
|
|
100
|
+
type ClickHouseClient = ReturnType<typeof createClient>;
|
|
101
|
+
type ClickHouseConfig = NonNullable<ChxConfig['clickhouse']>;
|
|
102
|
+
type ClickHouseClientOptions = {
|
|
103
|
+
compression?: {
|
|
104
|
+
request?: boolean;
|
|
105
|
+
response?: boolean;
|
|
106
|
+
};
|
|
107
|
+
};
|
|
32
108
|
export { parseEngineFromCreateTableQuery, parseOrderByFromCreateTableQuery, parsePartitionByFromCreateTableQuery, parsePrimaryKeyFromCreateTableQuery, parseProjectionsFromCreateTableQuery, parseSettingsFromCreateTableQuery, parseTTLFromCreateTableQuery, parseUniqueKeyFromCreateTableQuery, } from './create-table-parser.js';
|
|
33
109
|
export declare function inferSchemaKindFromEngine(engine: string): SchemaObjectRef['kind'] | null;
|
|
34
|
-
export declare function
|
|
110
|
+
export declare function normalizeColumnFromSystemRow(row: SystemColumnRow): ColumnDefinition;
|
|
111
|
+
export declare function normalizeIndexFromSystemRow(row: SystemSkippingIndexRow): SkipIndexDefinition;
|
|
112
|
+
export declare function buildIntrospectedTables(tables: SystemTableRow[], columns: SystemColumnRow[], indexes: SystemSkippingIndexRow[]): IntrospectedTable[];
|
|
113
|
+
/**
|
|
114
|
+
* Builds a clean, user-facing message for a connection-time error, or returns
|
|
115
|
+
* `undefined` when the error is not one we recognize (caller rethrows as-is).
|
|
116
|
+
* Pure so it can be unit-tested without catching thrown errors.
|
|
117
|
+
*/
|
|
118
|
+
export declare function formatConnectionError(error: unknown, url: string, username?: string): string | undefined;
|
|
119
|
+
export declare function wrapConnectionError(error: unknown, url: string, username?: string): never;
|
|
120
|
+
export declare function isUnknownDatabaseError(error: unknown): boolean;
|
|
121
|
+
/**
|
|
122
|
+
* Thrown when a ClickHouse query failed mid-flight after the server already
|
|
123
|
+
* committed an HTTP 200 response by emitting progress headers. In that
|
|
124
|
+
* scenario the error is reported via the `x-clickhouse-exception-code`
|
|
125
|
+
* response header rather than as an HTTP error — @clickhouse/client does not
|
|
126
|
+
* surface it as a thrown error, so we must detect it ourselves and throw.
|
|
127
|
+
*/
|
|
128
|
+
export declare class ClickHouseStreamedException extends Error {
|
|
129
|
+
readonly code: string;
|
|
130
|
+
readonly exceptionTag: string | undefined;
|
|
131
|
+
readonly query_id: string | undefined;
|
|
132
|
+
constructor(input: {
|
|
133
|
+
code: string;
|
|
134
|
+
exceptionTag: string | undefined;
|
|
135
|
+
query_id: string | undefined;
|
|
136
|
+
sql: string | undefined;
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Throws if the response carries a non-zero `x-clickhouse-exception-code`
|
|
141
|
+
* header. This happens when ClickHouse sends progress headers (committing
|
|
142
|
+
* HTTP 200) and then the query errors out — the error is reported in
|
|
143
|
+
* headers, not by HTTP status, and @clickhouse/client does not raise it.
|
|
144
|
+
*/
|
|
145
|
+
export declare function assertStreamedQuerySucceeded(input: {
|
|
146
|
+
response_headers: Record<string, string | string[] | undefined> | undefined;
|
|
147
|
+
query_id: string;
|
|
148
|
+
sql: string | undefined;
|
|
149
|
+
}): void;
|
|
150
|
+
export { waitForColumn, waitForDDLPropagation, waitForTable, waitForTableAbsent, waitForView, } from './ddl-propagation.js';
|
|
151
|
+
export declare function createStatelessClickHouseClient(config: ClickHouseConfig, clickhouseSettings?: ClickHouseSettings, options?: ClickHouseClientOptions): ClickHouseClient;
|
|
152
|
+
/**
|
|
153
|
+
* Creates a ClickHouse client that sends one session_id with every request.
|
|
154
|
+
* Use only for workflows that need session state, such as temporary tables or
|
|
155
|
+
* session-level settings. ClickHouse allows only one in-flight query per HTTP
|
|
156
|
+
* session, so callers must serialize all requests made through this client.
|
|
157
|
+
*/
|
|
158
|
+
export declare function createSessionClickHouseClient(config: ClickHouseConfig, clickhouseSettings?: ClickHouseSettings, sessionId?: `${string}-${string}-${string}-${string}-${string}`, options?: ClickHouseClientOptions): ClickHouseClient;
|
|
159
|
+
export declare function createExecutorWithClient(config: ClickHouseConfig, client: ClickHouseClient, options?: {
|
|
160
|
+
createCompressedClient?: () => ClickHouseClient;
|
|
161
|
+
}): ClickHouseExecutor;
|
|
162
|
+
export declare function createClickHouseExecutor(config: ClickHouseConfig): ClickHouseExecutor;
|
|
163
|
+
export declare function createStatelessClickHouseExecutor(config: ClickHouseConfig): ClickHouseExecutor;
|
|
35
164
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { normalizeSQLFragment, } from '@chkit/core';
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { normalizeSQLFragment, parseCodec, } from '@chkit/core';
|
|
3
|
+
import { ClickHouseLogLevel, createClient } from '@clickhouse/client';
|
|
4
|
+
import { getLogger } from '@logtape/logtape';
|
|
3
5
|
import { parseEngineFromCreateTableQuery, parseOrderByFromCreateTableQuery, parsePartitionByFromCreateTableQuery, parsePrimaryKeyFromCreateTableQuery, parseProjectionsFromCreateTableQuery, parseSettingsFromCreateTableQuery, parseTTLFromCreateTableQuery, parseUniqueKeyFromCreateTableQuery, } from './create-table-parser.js';
|
|
6
|
+
const pkg = createRequire(import.meta.url)('../package.json');
|
|
7
|
+
const CHKIT_APPLICATION_ID = `chkit/${pkg.version}`;
|
|
4
8
|
export { parseEngineFromCreateTableQuery, parseOrderByFromCreateTableQuery, parsePartitionByFromCreateTableQuery, parsePrimaryKeyFromCreateTableQuery, parseProjectionsFromCreateTableQuery, parseSettingsFromCreateTableQuery, parseTTLFromCreateTableQuery, parseUniqueKeyFromCreateTableQuery, } from './create-table-parser.js';
|
|
5
9
|
export function inferSchemaKindFromEngine(engine) {
|
|
6
10
|
if (engine === 'View')
|
|
@@ -11,7 +15,7 @@ export function inferSchemaKindFromEngine(engine) {
|
|
|
11
15
|
return null;
|
|
12
16
|
return 'table';
|
|
13
17
|
}
|
|
14
|
-
function normalizeColumnFromSystemRow(row) {
|
|
18
|
+
export function normalizeColumnFromSystemRow(row) {
|
|
15
19
|
const nullableMatch = row.type.match(/^Nullable\((.+)\)$/);
|
|
16
20
|
const type = nullableMatch?.[1] ? nullableMatch[1] : row.type;
|
|
17
21
|
const nullable = Boolean(nullableMatch?.[1]);
|
|
@@ -19,64 +23,519 @@ function normalizeColumnFromSystemRow(row) {
|
|
|
19
23
|
if (row.default_expression && row.default_kind === 'DEFAULT') {
|
|
20
24
|
defaultValue = normalizeSQLFragment(row.default_expression);
|
|
21
25
|
}
|
|
26
|
+
const codecSteps = parseCodec(row.compression_codec);
|
|
22
27
|
return {
|
|
23
28
|
name: row.name,
|
|
24
29
|
type,
|
|
25
30
|
nullable: nullable || undefined,
|
|
26
31
|
default: defaultValue,
|
|
27
32
|
comment: row.comment?.trim() || undefined,
|
|
33
|
+
codec: codecSteps,
|
|
28
34
|
};
|
|
29
35
|
}
|
|
30
|
-
function
|
|
31
|
-
if (
|
|
32
|
-
return
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
function splitArgs(args) {
|
|
37
|
+
if (args === undefined)
|
|
38
|
+
return [];
|
|
39
|
+
return args
|
|
40
|
+
.split(',')
|
|
41
|
+
.map((part) => Number(part.trim()))
|
|
42
|
+
.filter((value) => !Number.isNaN(value));
|
|
43
|
+
}
|
|
44
|
+
function parseIndexType(value) {
|
|
45
|
+
const match = value.match(/^(\w+)\((.+)\)$/);
|
|
46
|
+
const baseName = match?.[1] ?? value;
|
|
47
|
+
const args = splitArgs(match?.[2]);
|
|
48
|
+
switch (baseName) {
|
|
49
|
+
case 'minmax':
|
|
50
|
+
return { type: 'minmax' };
|
|
51
|
+
case 'bloom_filter':
|
|
52
|
+
return args[0] !== undefined
|
|
53
|
+
? { type: 'bloom_filter', falsePositiveRate: args[0] }
|
|
54
|
+
: { type: 'bloom_filter' };
|
|
55
|
+
case 'tokenbf_v1':
|
|
56
|
+
return {
|
|
57
|
+
type: 'tokenbf_v1',
|
|
58
|
+
sizeBytes: args[0] ?? 0,
|
|
59
|
+
hashFunctions: args[1] ?? 0,
|
|
60
|
+
randomSeed: args[2] ?? 0,
|
|
61
|
+
};
|
|
62
|
+
case 'ngrambf_v1':
|
|
63
|
+
return {
|
|
64
|
+
type: 'ngrambf_v1',
|
|
65
|
+
ngramSize: args[0] ?? 0,
|
|
66
|
+
sizeBytes: args[1] ?? 0,
|
|
67
|
+
hashFunctions: args[2] ?? 0,
|
|
68
|
+
randomSeed: args[3] ?? 0,
|
|
69
|
+
};
|
|
70
|
+
default:
|
|
71
|
+
return { type: 'set', maxRows: args[0] ?? 0 };
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export function normalizeIndexFromSystemRow(row) {
|
|
75
|
+
const parsed = parseIndexType(row.type);
|
|
44
76
|
return {
|
|
45
77
|
name: row.name,
|
|
46
78
|
expression: normalizeSQLFragment(row.expr),
|
|
47
|
-
type: normalizeIndexType(row.type),
|
|
48
79
|
granularity: row.granularity,
|
|
80
|
+
...parsed,
|
|
49
81
|
};
|
|
50
82
|
}
|
|
51
|
-
export function
|
|
52
|
-
const
|
|
83
|
+
export function buildIntrospectedTables(tables, columns, indexes) {
|
|
84
|
+
const tableRows = tables.filter((row) => inferSchemaKindFromEngine(row.engine) === 'table');
|
|
85
|
+
if (tableRows.length === 0)
|
|
86
|
+
return [];
|
|
87
|
+
const columnsByTable = new Map();
|
|
88
|
+
for (const row of columns) {
|
|
89
|
+
const key = `${row.database}.${row.table}`;
|
|
90
|
+
const rows = columnsByTable.get(key);
|
|
91
|
+
if (rows)
|
|
92
|
+
rows.push(row);
|
|
93
|
+
else
|
|
94
|
+
columnsByTable.set(key, [row]);
|
|
95
|
+
}
|
|
96
|
+
const indexesByTable = new Map();
|
|
97
|
+
for (const row of indexes) {
|
|
98
|
+
const key = `${row.database}.${row.table}`;
|
|
99
|
+
const rows = indexesByTable.get(key);
|
|
100
|
+
if (rows)
|
|
101
|
+
rows.push(row);
|
|
102
|
+
else
|
|
103
|
+
indexesByTable.set(key, [row]);
|
|
104
|
+
}
|
|
105
|
+
return tableRows
|
|
106
|
+
.map((row) => {
|
|
107
|
+
const key = `${row.database}.${row.name}`;
|
|
108
|
+
const columnRows = (columnsByTable.get(key) ?? []).sort((a, b) => a.position - b.position);
|
|
109
|
+
const indexRows = indexesByTable.get(key) ?? [];
|
|
110
|
+
return {
|
|
111
|
+
database: row.database,
|
|
112
|
+
name: row.name,
|
|
113
|
+
engine: parseEngineFromCreateTableQuery(row.create_table_query),
|
|
114
|
+
primaryKey: parsePrimaryKeyFromCreateTableQuery(row.create_table_query),
|
|
115
|
+
orderBy: parseOrderByFromCreateTableQuery(row.create_table_query),
|
|
116
|
+
uniqueKey: parseUniqueKeyFromCreateTableQuery(row.create_table_query),
|
|
117
|
+
partitionBy: parsePartitionByFromCreateTableQuery(row.create_table_query),
|
|
118
|
+
columns: columnRows.map(normalizeColumnFromSystemRow),
|
|
119
|
+
settings: parseSettingsFromCreateTableQuery(row.create_table_query),
|
|
120
|
+
indexes: indexRows.map(normalizeIndexFromSystemRow),
|
|
121
|
+
projections: parseProjectionsFromCreateTableQuery(row.create_table_query),
|
|
122
|
+
ttl: parseTTLFromCreateTableQuery(row.create_table_query),
|
|
123
|
+
};
|
|
124
|
+
})
|
|
125
|
+
.sort((a, b) => {
|
|
126
|
+
const dbOrder = a.database.localeCompare(b.database);
|
|
127
|
+
if (dbOrder !== 0)
|
|
128
|
+
return dbOrder;
|
|
129
|
+
return a.name.localeCompare(b.name);
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
const NETWORK_ERROR_LABELS = {
|
|
133
|
+
ECONNREFUSED: 'connection refused',
|
|
134
|
+
ENOTFOUND: 'host not found',
|
|
135
|
+
ETIMEDOUT: 'connection timed out',
|
|
136
|
+
ECONNRESET: 'connection reset',
|
|
137
|
+
EHOSTUNREACH: 'host unreachable',
|
|
138
|
+
};
|
|
139
|
+
/**
|
|
140
|
+
* Some @clickhouse/client and Node versions surface a network failure with the
|
|
141
|
+
* reason only in the message (the `.code` is stripped), so a bare match on
|
|
142
|
+
* `.code` misses them and the raw library string leaks. Recover the label from
|
|
143
|
+
* the message as a fallback — e.g. a typo'd host that yields a `getaddrinfo
|
|
144
|
+
* ENOTFOUND` / "Was there a typo" string.
|
|
145
|
+
*/
|
|
146
|
+
const NETWORK_MESSAGE_PATTERNS = [
|
|
147
|
+
[/ENOTFOUND|getaddrinfo|EAI_AGAIN|Was there a typo/i, 'host not found'],
|
|
148
|
+
[/ECONNREFUSED/i, 'connection refused'],
|
|
149
|
+
[/ETIMEDOUT|timed out/i, 'connection timed out'],
|
|
150
|
+
[/ECONNRESET/i, 'connection reset'],
|
|
151
|
+
[/EHOSTUNREACH/i, 'host unreachable'],
|
|
152
|
+
];
|
|
153
|
+
function networkLabelFromError(error) {
|
|
154
|
+
const code = 'code' in error ? String(error.code ?? '') : '';
|
|
155
|
+
if (code && NETWORK_ERROR_LABELS[code])
|
|
156
|
+
return NETWORK_ERROR_LABELS[code];
|
|
157
|
+
for (const [pattern, label] of NETWORK_MESSAGE_PATTERNS) {
|
|
158
|
+
if (pattern.test(error.message))
|
|
159
|
+
return label;
|
|
160
|
+
}
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* ClickHouse reports a wrong/missing password with server-side error codes 194
|
|
165
|
+
* (REQUIRED_PASSWORD) or 516 (AUTHENTICATION_FAILED) and a multi-line message
|
|
166
|
+
* that includes Cloud reset URLs and on-disk users.d/ paths — noise that reads
|
|
167
|
+
* as a leaked internal error to someone who just fat-fingered a password.
|
|
168
|
+
*/
|
|
169
|
+
function isAuthError(error) {
|
|
170
|
+
const code = String(error.code ?? '');
|
|
171
|
+
const type = String(error.type ?? '');
|
|
172
|
+
if (code === '194' || code === '516')
|
|
173
|
+
return true;
|
|
174
|
+
if (type === 'REQUIRED_PASSWORD' || type === 'AUTHENTICATION_FAILED')
|
|
175
|
+
return true;
|
|
176
|
+
return /authentication failed/i.test(error.message);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Builds a clean, user-facing message for a connection-time error, or returns
|
|
180
|
+
* `undefined` when the error is not one we recognize (caller rethrows as-is).
|
|
181
|
+
* Pure so it can be unit-tested without catching thrown errors.
|
|
182
|
+
*/
|
|
183
|
+
export function formatConnectionError(error, url, username) {
|
|
184
|
+
if (!(error instanceof Error))
|
|
185
|
+
return undefined;
|
|
186
|
+
if (isAuthError(error)) {
|
|
187
|
+
const who = username ? `user "${username}"` : 'the configured user';
|
|
188
|
+
return `Authentication failed for ${who} at ${url}. Check CLICKHOUSE_USER / CLICKHOUSE_PASSWORD.`;
|
|
189
|
+
}
|
|
190
|
+
const label = networkLabelFromError(error);
|
|
191
|
+
if (label) {
|
|
192
|
+
const isLocalhostDefault = /^https?:\/\/(localhost|127\.0\.0\.1):8123\/?$/.test(url);
|
|
193
|
+
const envUnset = !process.env.CLICKHOUSE_URL;
|
|
194
|
+
const hint = isLocalhostDefault && envUnset
|
|
195
|
+
? '\n Hint: CLICKHOUSE_URL is not set — chkit fell back to the default localhost endpoint. Set CLICKHOUSE_URL to point at your ClickHouse instance.'
|
|
196
|
+
: '';
|
|
197
|
+
return `Could not connect to ClickHouse at ${url} (${label})${hint}`;
|
|
198
|
+
}
|
|
199
|
+
return undefined;
|
|
200
|
+
}
|
|
201
|
+
export function wrapConnectionError(error, url, username) {
|
|
202
|
+
const message = formatConnectionError(error, url, username);
|
|
203
|
+
if (message !== undefined)
|
|
204
|
+
throw new Error(message);
|
|
205
|
+
throw error;
|
|
206
|
+
}
|
|
207
|
+
export function isUnknownDatabaseError(error) {
|
|
208
|
+
if (!(error instanceof Error))
|
|
209
|
+
return false;
|
|
210
|
+
if (!('code' in error))
|
|
211
|
+
return false;
|
|
212
|
+
return String(error.code) === '81';
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Thrown when a ClickHouse query failed mid-flight after the server already
|
|
216
|
+
* committed an HTTP 200 response by emitting progress headers. In that
|
|
217
|
+
* scenario the error is reported via the `x-clickhouse-exception-code`
|
|
218
|
+
* response header rather than as an HTTP error — @clickhouse/client does not
|
|
219
|
+
* surface it as a thrown error, so we must detect it ourselves and throw.
|
|
220
|
+
*/
|
|
221
|
+
export class ClickHouseStreamedException extends Error {
|
|
222
|
+
code;
|
|
223
|
+
exceptionTag;
|
|
224
|
+
query_id;
|
|
225
|
+
constructor(input) {
|
|
226
|
+
const idPart = input.query_id ? ` (query_id ${input.query_id})` : '';
|
|
227
|
+
const tagPart = input.exceptionTag ? `, exception_tag ${input.exceptionTag}` : '';
|
|
228
|
+
const sqlPreview = input.sql
|
|
229
|
+
? `\n SQL: ${input.sql.length > 200 ? `${input.sql.slice(0, 200)}…` : input.sql}`
|
|
230
|
+
: '';
|
|
231
|
+
super(`ClickHouse query failed with exception code ${input.code}${tagPart}${idPart}.${sqlPreview}`);
|
|
232
|
+
this.name = 'ClickHouseStreamedException';
|
|
233
|
+
this.code = input.code;
|
|
234
|
+
this.exceptionTag = input.exceptionTag;
|
|
235
|
+
this.query_id = input.query_id;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Throws if the response carries a non-zero `x-clickhouse-exception-code`
|
|
240
|
+
* header. This happens when ClickHouse sends progress headers (committing
|
|
241
|
+
* HTTP 200) and then the query errors out — the error is reported in
|
|
242
|
+
* headers, not by HTTP status, and @clickhouse/client does not raise it.
|
|
243
|
+
*/
|
|
244
|
+
export function assertStreamedQuerySucceeded(input) {
|
|
245
|
+
const headers = input.response_headers;
|
|
246
|
+
if (!headers)
|
|
247
|
+
return;
|
|
248
|
+
const rawCode = headers['x-clickhouse-exception-code'];
|
|
249
|
+
const code = Array.isArray(rawCode) ? rawCode[0] : rawCode;
|
|
250
|
+
if (!code || code === '0')
|
|
251
|
+
return;
|
|
252
|
+
const rawTag = headers['x-clickhouse-exception-tag'];
|
|
253
|
+
const tag = Array.isArray(rawTag) ? rawTag[0] : rawTag;
|
|
254
|
+
throw new ClickHouseStreamedException({
|
|
255
|
+
code,
|
|
256
|
+
exceptionTag: tag,
|
|
257
|
+
query_id: input.query_id,
|
|
258
|
+
sql: input.sql,
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
export { waitForColumn, waitForDDLPropagation, waitForTable, waitForTableAbsent, waitForView, } from './ddl-propagation.js';
|
|
262
|
+
function parseSummaryFromHeaders(headers) {
|
|
263
|
+
const raw = headers['x-clickhouse-summary'];
|
|
264
|
+
if (!raw || typeof raw !== 'string')
|
|
265
|
+
return undefined;
|
|
266
|
+
try {
|
|
267
|
+
return JSON.parse(raw);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return undefined;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
function logProfiling(logger, query, queryId, summary) {
|
|
274
|
+
logger.trace('Query completed: {query}', {
|
|
275
|
+
query,
|
|
276
|
+
queryId,
|
|
277
|
+
readRows: Number(summary?.read_rows ?? 0),
|
|
278
|
+
readBytes: Number(summary?.read_bytes ?? 0),
|
|
279
|
+
writtenRows: Number(summary?.written_rows ?? 0),
|
|
280
|
+
writtenBytes: Number(summary?.written_bytes ?? 0),
|
|
281
|
+
elapsedMs: Number(summary?.elapsed_ns ?? 0) / 1_000_000,
|
|
282
|
+
resultRows: Number(summary?.result_rows ?? 0),
|
|
283
|
+
resultBytes: Number(summary?.result_bytes ?? 0),
|
|
284
|
+
});
|
|
285
|
+
}
|
|
286
|
+
const DEFAULT_CLICKHOUSE_SETTINGS = {
|
|
287
|
+
wait_end_of_query: 1,
|
|
288
|
+
async_insert: 0,
|
|
289
|
+
send_progress_in_http_headers: 1,
|
|
290
|
+
};
|
|
291
|
+
// chkit emits its own clean, one-line connection errors (see wrapConnectionError).
|
|
292
|
+
// The built-in @clickhouse/client DefaultLogger defaults to WARN since v1.18, which
|
|
293
|
+
// logs the full raw server remediation blurb to stderr on any connection ERROR and
|
|
294
|
+
// would otherwise leak it past our clean message. Owning the level (OFF) silences it
|
|
295
|
+
// independent of the resolved client version, since the client does `level ?? DEFAULT`.
|
|
296
|
+
const SILENT_CLIENT_LOG = { level: ClickHouseLogLevel.OFF };
|
|
297
|
+
// @clickhouse/client uses socket.setTimeout under the hood, which is an
|
|
298
|
+
// inactivity timeout. For long-running INSERTs (e.g. INSERT ... SELECT FROM
|
|
299
|
+
// url() in the ClickBench load) ClickHouse stays silent until the operation
|
|
300
|
+
// completes, so any finite timeout eventually trips. 0 disables the idle
|
|
301
|
+
// timeout entirely — TCP keepalive still detects dead connections.
|
|
302
|
+
const NO_REQUEST_TIMEOUT = 0;
|
|
303
|
+
export function createStatelessClickHouseClient(config, clickhouseSettings = DEFAULT_CLICKHOUSE_SETTINGS, options = {}) {
|
|
304
|
+
return createClient({
|
|
53
305
|
url: config.url,
|
|
54
306
|
username: config.username,
|
|
55
307
|
password: config.password,
|
|
56
308
|
database: config.database,
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
},
|
|
309
|
+
application: CHKIT_APPLICATION_ID,
|
|
310
|
+
request_timeout: NO_REQUEST_TIMEOUT,
|
|
311
|
+
clickhouse_settings: clickhouseSettings,
|
|
312
|
+
log: SILENT_CLIENT_LOG,
|
|
313
|
+
...(options.compression ? { compression: options.compression } : {}),
|
|
62
314
|
});
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Creates a ClickHouse client that sends one session_id with every request.
|
|
318
|
+
* Use only for workflows that need session state, such as temporary tables or
|
|
319
|
+
* session-level settings. ClickHouse allows only one in-flight query per HTTP
|
|
320
|
+
* session, so callers must serialize all requests made through this client.
|
|
321
|
+
*/
|
|
322
|
+
export function createSessionClickHouseClient(config, clickhouseSettings = DEFAULT_CLICKHOUSE_SETTINGS, sessionId = crypto.randomUUID(), options = {}) {
|
|
323
|
+
return createClient({
|
|
324
|
+
url: config.url,
|
|
325
|
+
username: config.username,
|
|
326
|
+
password: config.password,
|
|
327
|
+
database: config.database,
|
|
328
|
+
session_id: sessionId,
|
|
329
|
+
application: CHKIT_APPLICATION_ID,
|
|
330
|
+
request_timeout: NO_REQUEST_TIMEOUT,
|
|
331
|
+
clickhouse_settings: clickhouseSettings,
|
|
332
|
+
log: SILENT_CLIENT_LOG,
|
|
333
|
+
...(options.compression ? { compression: options.compression } : {}),
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
export function createExecutorWithClient(config, client, options = {}) {
|
|
337
|
+
const profiler = getLogger(['chkit', 'profiling']);
|
|
338
|
+
const fireAndForgetClient = createStatelessClickHouseClient(config, {
|
|
339
|
+
wait_end_of_query: 0,
|
|
340
|
+
});
|
|
341
|
+
let compressedClient;
|
|
63
342
|
return {
|
|
64
|
-
async
|
|
65
|
-
|
|
343
|
+
async command(sql) {
|
|
344
|
+
try {
|
|
345
|
+
const result = await client.command({
|
|
346
|
+
query: sql,
|
|
347
|
+
http_headers: { 'X-DDL': '1' },
|
|
348
|
+
});
|
|
349
|
+
assertStreamedQuerySucceeded({
|
|
350
|
+
response_headers: result.response_headers,
|
|
351
|
+
query_id: result.query_id,
|
|
352
|
+
sql,
|
|
353
|
+
});
|
|
354
|
+
logProfiling(profiler, sql, result.query_id, result.summary);
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
if (isUnknownDatabaseError(error)) {
|
|
358
|
+
const fallback = createClient({
|
|
359
|
+
url: config.url,
|
|
360
|
+
username: config.username,
|
|
361
|
+
password: config.password,
|
|
362
|
+
application: CHKIT_APPLICATION_ID,
|
|
363
|
+
request_timeout: NO_REQUEST_TIMEOUT,
|
|
364
|
+
clickhouse_settings: { wait_end_of_query: 1, async_insert: 0 },
|
|
365
|
+
log: SILENT_CLIENT_LOG,
|
|
366
|
+
});
|
|
367
|
+
try {
|
|
368
|
+
const fallbackResult = await fallback.command({
|
|
369
|
+
query: sql,
|
|
370
|
+
http_headers: { 'X-DDL': '1' },
|
|
371
|
+
});
|
|
372
|
+
assertStreamedQuerySucceeded({
|
|
373
|
+
response_headers: fallbackResult.response_headers,
|
|
374
|
+
query_id: fallbackResult.query_id,
|
|
375
|
+
sql,
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
finally {
|
|
379
|
+
await fallback.close();
|
|
380
|
+
}
|
|
381
|
+
return;
|
|
382
|
+
}
|
|
383
|
+
wrapConnectionError(error, config.url, config.username);
|
|
384
|
+
}
|
|
66
385
|
},
|
|
67
|
-
async query(sql) {
|
|
68
|
-
|
|
69
|
-
|
|
386
|
+
async query(sql, settings) {
|
|
387
|
+
try {
|
|
388
|
+
const result = await client.query({
|
|
389
|
+
query: sql,
|
|
390
|
+
format: 'JSONEachRow',
|
|
391
|
+
http_headers: { 'X-DDL': '1' },
|
|
392
|
+
...(settings ? { clickhouse_settings: settings } : {}),
|
|
393
|
+
});
|
|
394
|
+
// Check headers before decoding the body. With
|
|
395
|
+
// send_progress_in_http_headers=1, ClickHouse can return HTTP 200
|
|
396
|
+
// then append a plain-text exception block after partial JSON
|
|
397
|
+
// rows — JSON parsing would throw before we ever read the
|
|
398
|
+
// exception-code header.
|
|
399
|
+
assertStreamedQuerySucceeded({
|
|
400
|
+
response_headers: result.response_headers,
|
|
401
|
+
query_id: result.query_id,
|
|
402
|
+
sql,
|
|
403
|
+
});
|
|
404
|
+
const rows = await result.json();
|
|
405
|
+
logProfiling(profiler, sql, result.query_id, parseSummaryFromHeaders(result.response_headers));
|
|
406
|
+
return rows;
|
|
407
|
+
}
|
|
408
|
+
catch (error) {
|
|
409
|
+
wrapConnectionError(error, config.url, config.username);
|
|
410
|
+
}
|
|
411
|
+
},
|
|
412
|
+
async queryJson(sql, settings) {
|
|
413
|
+
try {
|
|
414
|
+
const result = await client.query({
|
|
415
|
+
query: sql,
|
|
416
|
+
format: 'JSON',
|
|
417
|
+
http_headers: { 'X-DDL': '1' },
|
|
418
|
+
...(settings ? { clickhouse_settings: settings } : {}),
|
|
419
|
+
});
|
|
420
|
+
assertStreamedQuerySucceeded({
|
|
421
|
+
response_headers: result.response_headers,
|
|
422
|
+
query_id: result.query_id,
|
|
423
|
+
sql,
|
|
424
|
+
});
|
|
425
|
+
const payload = (await result.json());
|
|
426
|
+
logProfiling(profiler, sql, result.query_id, parseSummaryFromHeaders(result.response_headers));
|
|
427
|
+
return {
|
|
428
|
+
...payload,
|
|
429
|
+
query_id: result.query_id,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
catch (error) {
|
|
433
|
+
wrapConnectionError(error, config.url, config.username);
|
|
434
|
+
}
|
|
70
435
|
},
|
|
71
436
|
async insert(params) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
437
|
+
try {
|
|
438
|
+
let insertClient = client;
|
|
439
|
+
if (params.compressed === true) {
|
|
440
|
+
if (!compressedClient) {
|
|
441
|
+
compressedClient =
|
|
442
|
+
options.createCompressedClient?.() ??
|
|
443
|
+
createStatelessClickHouseClient(config, DEFAULT_CLICKHOUSE_SETTINGS, { compression: { request: true } });
|
|
444
|
+
}
|
|
445
|
+
insertClient = compressedClient;
|
|
446
|
+
}
|
|
447
|
+
const result = await insertClient.insert({
|
|
448
|
+
table: params.table,
|
|
449
|
+
values: params.values,
|
|
450
|
+
format: 'JSONEachRow',
|
|
451
|
+
});
|
|
452
|
+
assertStreamedQuerySucceeded({
|
|
453
|
+
response_headers: result.response_headers,
|
|
454
|
+
query_id: result.query_id,
|
|
455
|
+
sql: `INSERT INTO ${params.table}`,
|
|
456
|
+
});
|
|
457
|
+
logProfiling(profiler, `INSERT INTO ${params.table}`, result.query_id, result.summary);
|
|
458
|
+
}
|
|
459
|
+
catch (error) {
|
|
460
|
+
wrapConnectionError(error, config.url, config.username);
|
|
461
|
+
}
|
|
462
|
+
},
|
|
463
|
+
async submit(sql, queryId) {
|
|
464
|
+
const id = queryId ?? crypto.randomUUID();
|
|
465
|
+
try {
|
|
466
|
+
await fireAndForgetClient.command({ query: sql, query_id: id });
|
|
467
|
+
}
|
|
468
|
+
catch (error) {
|
|
469
|
+
wrapConnectionError(error, config.url, config.username);
|
|
470
|
+
}
|
|
471
|
+
return id;
|
|
472
|
+
},
|
|
473
|
+
async queryStatus(queryId, options) {
|
|
474
|
+
try {
|
|
475
|
+
const running = await client.query({
|
|
476
|
+
query: `SELECT read_rows, read_bytes, written_rows, written_bytes, elapsed FROM clusterAllReplicas('cluster', system.processes) WHERE user = currentUser() AND query_id = {qid:String} SETTINGS skip_unavailable_shards = 1`,
|
|
477
|
+
query_params: { qid: queryId },
|
|
478
|
+
format: 'JSONEachRow',
|
|
479
|
+
});
|
|
480
|
+
const runningRows = await running.json();
|
|
481
|
+
const [proc] = runningRows;
|
|
482
|
+
if (proc) {
|
|
483
|
+
return {
|
|
484
|
+
status: 'running',
|
|
485
|
+
readRows: Number(proc.read_rows),
|
|
486
|
+
readBytes: Number(proc.read_bytes),
|
|
487
|
+
writtenRows: Number(proc.written_rows),
|
|
488
|
+
writtenBytes: Number(proc.written_bytes),
|
|
489
|
+
elapsedMs: Math.round(Number(proc.elapsed) * 1000),
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
const afterTime = options?.afterTime ?? '1970-01-01T00:00:00Z';
|
|
493
|
+
const log = await client.query({
|
|
494
|
+
query: `SELECT type, written_rows, written_bytes, query_duration_ms, exception
|
|
495
|
+
FROM clusterAllReplicas('cluster', system.query_log)
|
|
496
|
+
WHERE user = currentUser()
|
|
497
|
+
AND query_id = {qid:String}
|
|
498
|
+
AND type IN ('QueryFinish', 'ExceptionWhileProcessing')
|
|
499
|
+
AND is_initial_query = 1
|
|
500
|
+
AND query_start_time >= parseDateTimeBestEffort({after:String})
|
|
501
|
+
ORDER BY event_time DESC
|
|
502
|
+
LIMIT 1
|
|
503
|
+
SETTINGS skip_unavailable_shards = 1`,
|
|
504
|
+
query_params: { qid: queryId, after: afterTime },
|
|
505
|
+
format: 'JSONEachRow',
|
|
506
|
+
});
|
|
507
|
+
const logRows = await log.json();
|
|
508
|
+
if (logRows.length === 0) {
|
|
509
|
+
return { status: 'unknown' };
|
|
510
|
+
}
|
|
511
|
+
const [row] = logRows;
|
|
512
|
+
if (!row) {
|
|
513
|
+
return { status: 'unknown' };
|
|
514
|
+
}
|
|
515
|
+
if (row.type === 'QueryFinish') {
|
|
516
|
+
return {
|
|
517
|
+
status: 'finished',
|
|
518
|
+
writtenRows: Number(row.written_rows),
|
|
519
|
+
writtenBytes: Number(row.written_bytes),
|
|
520
|
+
durationMs: Number(row.query_duration_ms),
|
|
521
|
+
};
|
|
522
|
+
}
|
|
523
|
+
return {
|
|
524
|
+
status: 'failed',
|
|
525
|
+
durationMs: Number(row.query_duration_ms),
|
|
526
|
+
error: row.exception,
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
catch (error) {
|
|
530
|
+
wrapConnectionError(error, config.url, config.username);
|
|
531
|
+
}
|
|
77
532
|
},
|
|
78
533
|
async close() {
|
|
79
|
-
await
|
|
534
|
+
await Promise.all([
|
|
535
|
+
client.close(),
|
|
536
|
+
fireAndForgetClient.close(),
|
|
537
|
+
compressedClient?.close(),
|
|
538
|
+
]);
|
|
80
539
|
},
|
|
81
540
|
async listSchemaObjects() {
|
|
82
541
|
const rows = await this.query(`SELECT database, name, engine
|
|
@@ -100,69 +559,36 @@ WHERE is_temporary = 0
|
|
|
100
559
|
async listTableDetails(databases) {
|
|
101
560
|
if (databases.length === 0)
|
|
102
561
|
return [];
|
|
103
|
-
const quotedDatabases = databases
|
|
562
|
+
const quotedDatabases = databases
|
|
563
|
+
.map((dbName) => `'${dbName.replace(/'/g, "''")}'`)
|
|
564
|
+
.join(', ');
|
|
104
565
|
const tables = await this.query(`SELECT database, name, engine, create_table_query
|
|
105
566
|
FROM system.tables
|
|
106
567
|
WHERE is_temporary = 0
|
|
107
568
|
AND database IN (${quotedDatabases})`);
|
|
108
|
-
const
|
|
109
|
-
if (tableRows.length === 0)
|
|
110
|
-
return [];
|
|
111
|
-
const columns = await this.query(`SELECT database, table, name, type, default_kind, default_expression, comment, position
|
|
569
|
+
const columns = await this.query(`SELECT database, table, name, type, default_kind, default_expression, comment, position, compression_codec
|
|
112
570
|
FROM system.columns
|
|
113
571
|
WHERE database IN (${quotedDatabases})`);
|
|
114
572
|
const indexes = await this.query(`SELECT database, table, name, expr, type, granularity
|
|
115
573
|
FROM system.data_skipping_indices
|
|
116
574
|
WHERE database IN (${quotedDatabases})`);
|
|
117
|
-
|
|
118
|
-
for (const row of columns) {
|
|
119
|
-
const key = `${row.database}.${row.table}`;
|
|
120
|
-
const rows = columnsByTable.get(key);
|
|
121
|
-
if (rows) {
|
|
122
|
-
rows.push(row);
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
columnsByTable.set(key, [row]);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
const indexesByTable = new Map();
|
|
129
|
-
for (const row of indexes) {
|
|
130
|
-
const key = `${row.database}.${row.table}`;
|
|
131
|
-
const rows = indexesByTable.get(key);
|
|
132
|
-
if (rows) {
|
|
133
|
-
rows.push(row);
|
|
134
|
-
}
|
|
135
|
-
else {
|
|
136
|
-
indexesByTable.set(key, [row]);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
return tableRows
|
|
140
|
-
.map((row) => {
|
|
141
|
-
const key = `${row.database}.${row.name}`;
|
|
142
|
-
const columnRows = (columnsByTable.get(key) ?? []).sort((a, b) => a.position - b.position);
|
|
143
|
-
const indexRows = indexesByTable.get(key) ?? [];
|
|
144
|
-
return {
|
|
145
|
-
database: row.database,
|
|
146
|
-
name: row.name,
|
|
147
|
-
engine: parseEngineFromCreateTableQuery(row.create_table_query),
|
|
148
|
-
primaryKey: parsePrimaryKeyFromCreateTableQuery(row.create_table_query),
|
|
149
|
-
orderBy: parseOrderByFromCreateTableQuery(row.create_table_query),
|
|
150
|
-
uniqueKey: parseUniqueKeyFromCreateTableQuery(row.create_table_query),
|
|
151
|
-
partitionBy: parsePartitionByFromCreateTableQuery(row.create_table_query),
|
|
152
|
-
columns: columnRows.map(normalizeColumnFromSystemRow),
|
|
153
|
-
settings: parseSettingsFromCreateTableQuery(row.create_table_query),
|
|
154
|
-
indexes: indexRows.map(normalizeIndexFromSystemRow),
|
|
155
|
-
projections: parseProjectionsFromCreateTableQuery(row.create_table_query),
|
|
156
|
-
ttl: parseTTLFromCreateTableQuery(row.create_table_query),
|
|
157
|
-
};
|
|
158
|
-
})
|
|
159
|
-
.sort((a, b) => {
|
|
160
|
-
const dbOrder = a.database.localeCompare(b.database);
|
|
161
|
-
if (dbOrder !== 0)
|
|
162
|
-
return dbOrder;
|
|
163
|
-
return a.name.localeCompare(b.name);
|
|
164
|
-
});
|
|
575
|
+
return buildIntrospectedTables(tables, columns, indexes);
|
|
165
576
|
},
|
|
166
577
|
};
|
|
167
578
|
}
|
|
579
|
+
export function createClickHouseExecutor(config) {
|
|
580
|
+
// Default executor is session-bound so DDL-heavy workflows run through a
|
|
581
|
+
// single ClickHouse HTTP session. Do not issue concurrent queries through it.
|
|
582
|
+
const sessionId = crypto.randomUUID();
|
|
583
|
+
return createExecutorWithClient(config, createSessionClickHouseClient(config, DEFAULT_CLICKHOUSE_SETTINGS, sessionId), {
|
|
584
|
+
createCompressedClient: () => createSessionClickHouseClient(config, DEFAULT_CLICKHOUSE_SETTINGS, sessionId, { compression: { request: true } }),
|
|
585
|
+
});
|
|
586
|
+
}
|
|
587
|
+
export function createStatelessClickHouseExecutor(config) {
|
|
588
|
+
return createExecutorWithClient(config, createStatelessClickHouseClient(config), {
|
|
589
|
+
createCompressedClient: () => createStatelessClickHouseClient(config, DEFAULT_CLICKHOUSE_SETTINGS, {
|
|
590
|
+
compression: { request: true },
|
|
591
|
+
}),
|
|
592
|
+
});
|
|
593
|
+
}
|
|
168
594
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@chkit/clickhouse",
|
|
3
|
-
"version": "0.1.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "ClickHouse client wrapper for chkit",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "ObsessionDB",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"clickhouse",
|
|
9
|
+
"database",
|
|
10
|
+
"client"
|
|
11
|
+
],
|
|
4
12
|
"homepage": "https://chkit.obsessiondb.com",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/obsessiondb/chkit/issues"
|
|
15
|
+
},
|
|
5
16
|
"repository": {
|
|
6
17
|
"type": "git",
|
|
7
18
|
"url": "https://github.com/obsessiondb/chkit.git",
|
|
@@ -15,6 +26,11 @@
|
|
|
15
26
|
"source": "./src/index.ts",
|
|
16
27
|
"types": "./dist/index.d.ts",
|
|
17
28
|
"default": "./dist/index.js"
|
|
29
|
+
},
|
|
30
|
+
"./e2e-testkit": {
|
|
31
|
+
"source": "./src/e2e-testkit.ts",
|
|
32
|
+
"types": "./dist/e2e-testkit.d.ts",
|
|
33
|
+
"default": "./dist/e2e-testkit.js"
|
|
18
34
|
}
|
|
19
35
|
},
|
|
20
36
|
"files": [
|
|
@@ -29,7 +45,9 @@
|
|
|
29
45
|
"clean": "rm -rf dist"
|
|
30
46
|
},
|
|
31
47
|
"dependencies": {
|
|
32
|
-
"@chkit/core": "0.1.0
|
|
33
|
-
"@clickhouse/client": "^1.
|
|
48
|
+
"@chkit/core": "0.1.0",
|
|
49
|
+
"@clickhouse/client": "^1.18.0",
|
|
50
|
+
"@logtape/logtape": "^2.0.5",
|
|
51
|
+
"p-retry": "^7.1.1"
|
|
34
52
|
}
|
|
35
53
|
}
|