@chkit/clickhouse 0.2.0-beta.11 → 0.2.0-beta.12
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/alter-column-statement.d.ts +32 -0
- package/dist/alter-column-statement.d.ts.map +1 -0
- package/dist/alter-column-statement.js +137 -0
- package/dist/alter-column-statement.js.map +1 -0
- package/dist/async-insert-guard.d.ts +31 -0
- package/dist/async-insert-guard.d.ts.map +1 -0
- package/dist/async-insert-guard.js +55 -0
- package/dist/async-insert-guard.js.map +1 -0
- package/dist/create-table-parser.d.ts +3 -0
- package/dist/create-table-parser.d.ts.map +1 -1
- package/dist/create-table-parser.js +18 -0
- package/dist/create-table-parser.js.map +1 -1
- package/dist/ddl-propagation.d.ts +62 -6
- package/dist/ddl-propagation.d.ts.map +1 -1
- package/dist/ddl-propagation.js +420 -46
- package/dist/ddl-propagation.js.map +1 -1
- package/dist/e2e-testkit.d.ts +4 -1
- package/dist/e2e-testkit.d.ts.map +1 -1
- package/dist/e2e-testkit.js +9 -5
- package/dist/e2e-testkit.js.map +1 -1
- package/dist/exact-json.d.ts +27 -0
- package/dist/exact-json.d.ts.map +1 -0
- package/dist/exact-json.js +128 -0
- package/dist/exact-json.js.map +1 -0
- package/dist/index.d.ts +32 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +177 -60
- package/dist/index.js.map +1 -1
- package/dist/insert-barrier.d.ts +32 -0
- package/dist/insert-barrier.d.ts.map +1 -0
- package/dist/insert-barrier.js +57 -0
- package/dist/insert-barrier.js.map +1 -0
- package/dist/replicas.d.ts +21 -0
- package/dist/replicas.d.ts.map +1 -0
- package/dist/replicas.js +39 -0
- package/dist/replicas.js.map +1 -0
- package/dist/view-details.d.ts +30 -0
- package/dist/view-details.d.ts.map +1 -0
- package/dist/view-details.js +73 -0
- package/dist/view-details.js.map +1 -0
- package/package.json +5 -2
package/dist/e2e-testkit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2e-testkit.js","sourceRoot":"","sources":["../src/e2e-testkit.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE7C,OAAO,EACL,wBAAwB,EACxB,iCAAiC,GAElC,MAAM,YAAY,CAAA;AAanB
|
|
1
|
+
{"version":3,"file":"e2e-testkit.js","sourceRoot":"","sources":["../src/e2e-testkit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ClickHouseJsonQueryResult } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Parses a ClickHouse `FORMAT JSON` body without losing digits (#381).
|
|
4
|
+
* ClickHouse writes 64-bit and wider integers and Decimals as bare JSON
|
|
5
|
+
* numbers, and `JSON.parse` rounds them to a double. In a column whose type
|
|
6
|
+
* is or contains one of them, every number becomes a string of the digits
|
|
7
|
+
* ClickHouse sent, as `output_format_json_quote_64bit_integers = 1` and
|
|
8
|
+
* `output_format_json_quote_decimals = 1` would do. Sending those settings
|
|
9
|
+
* instead would fail for a `readonly = 1` user (#402). In a column whose type
|
|
10
|
+
* is or contains `JSON`, `Object` or `Dynamic`, only a number a double would
|
|
11
|
+
* change becomes a string, as in `parseJsonEachRowLine` (#438). Other numbers
|
|
12
|
+
* stay numbers. A statement without a result set (DDL, `OPTIMIZE`) has an empty
|
|
13
|
+
* body, read as no rows.
|
|
14
|
+
*/
|
|
15
|
+
export declare function parseJsonResult<T extends Record<string, unknown>>(body: string): ClickHouseJsonQueryResult<T>;
|
|
16
|
+
/** Parses a `JSONEachRow` body, every nonempty line as `parseJsonEachRowLine`. */
|
|
17
|
+
export declare function parseJsonEachRow<T>(body: string): T[];
|
|
18
|
+
/**
|
|
19
|
+
* Parses one `JSONEachRow` line without rounding (#415). A number whose
|
|
20
|
+
* double does not print back to the digits ClickHouse wrote (a 64-bit or
|
|
21
|
+
* wider integer beyond 2^53, a Decimal with more than 15 significant digits)
|
|
22
|
+
* becomes a string of those digits. Every other number, Float64 included, stays a
|
|
23
|
+
* number. Unlike `parseJsonResult`, this needs no column types: values that
|
|
24
|
+
* read correctly today keep their type.
|
|
25
|
+
*/
|
|
26
|
+
export declare function parseJsonEachRowLine<T>(line: string): T;
|
|
27
|
+
//# sourceMappingURL=exact-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exact-json.d.ts","sourceRoot":"","sources":["../src/exact-json.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AAqC3D;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,IAAI,EAAE,MAAM,GACV,yBAAyB,CAAC,CAAC,CAAC,CA4B9B;AAED,kFAAkF;AAClF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,CAKrD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAQvD"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Column types whose JSON numbers a double cannot hold exactly: 64-bit and
|
|
3
|
+
* wider integers and Decimals. The Python port uses the same patterns.
|
|
4
|
+
*/
|
|
5
|
+
const EXACT_TYPE_RE = /\b(?:U?Int(?:64|128|256)|Decimal(?:32|64|128|256)?)\b/;
|
|
6
|
+
/**
|
|
7
|
+
* Column types whose values can hold any number, from a Float64 to a UInt64
|
|
8
|
+
* (#438). Their numbers follow the rule of `parseJsonEachRowLine`.
|
|
9
|
+
*/
|
|
10
|
+
const DYNAMIC_TYPE_RE = /\b(?:JSON|Object|Dynamic)\b/;
|
|
11
|
+
const SIXTEEN_DIGITS_RE = /[\d.]{16}/;
|
|
12
|
+
const JSON_NUMBER = Symbol('JsonNumber');
|
|
13
|
+
/**
|
|
14
|
+
* Parses a ClickHouse `FORMAT JSON` body without losing digits (#381).
|
|
15
|
+
* ClickHouse writes 64-bit and wider integers and Decimals as bare JSON
|
|
16
|
+
* numbers, and `JSON.parse` rounds them to a double. In a column whose type
|
|
17
|
+
* is or contains one of them, every number becomes a string of the digits
|
|
18
|
+
* ClickHouse sent, as `output_format_json_quote_64bit_integers = 1` and
|
|
19
|
+
* `output_format_json_quote_decimals = 1` would do. Sending those settings
|
|
20
|
+
* instead would fail for a `readonly = 1` user (#402). In a column whose type
|
|
21
|
+
* is or contains `JSON`, `Object` or `Dynamic`, only a number a double would
|
|
22
|
+
* change becomes a string, as in `parseJsonEachRowLine` (#438). Other numbers
|
|
23
|
+
* stay numbers. A statement without a result set (DDL, `OPTIMIZE`) has an empty
|
|
24
|
+
* body, read as no rows.
|
|
25
|
+
*/
|
|
26
|
+
export function parseJsonResult(body) {
|
|
27
|
+
if (body.trim() === '')
|
|
28
|
+
return { data: [], meta: [], rows: 0 };
|
|
29
|
+
// context.source is the number's JSON text (Node 21+, Bun).
|
|
30
|
+
const { data, meta, ...rest } = JSON.parse(body, (_key, value, context) => typeof value === 'number' ? jsonNumber(context?.source, value) : value);
|
|
31
|
+
const modes = new Map(meta.map((column) => [column.name, numberMode(column.type)]));
|
|
32
|
+
// Rows keyed by column name: data, totals (WITH TOTALS) and extremes.min/max.
|
|
33
|
+
const restoreRow = (row) => isRecord(row)
|
|
34
|
+
? Object.fromEntries(Object.entries(row).map(([name, cell]) => [name, restore(cell, modes.get(name) ?? 'double')]))
|
|
35
|
+
: restore(row, 'double');
|
|
36
|
+
// data first, as the ObsessionDB executor and the Python port print it.
|
|
37
|
+
return {
|
|
38
|
+
data: data.map(restoreRow),
|
|
39
|
+
meta,
|
|
40
|
+
...Object.fromEntries(Object.entries(rest).map(([key, value]) => {
|
|
41
|
+
if (key === 'totals')
|
|
42
|
+
return [key, restoreRow(value)];
|
|
43
|
+
if (key === 'extremes' && isRecord(value)) {
|
|
44
|
+
return [key, Object.fromEntries(Object.entries(value).map(([bound, row]) => [bound, restoreRow(row)]))];
|
|
45
|
+
}
|
|
46
|
+
return [key, restore(value, 'double')];
|
|
47
|
+
})),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/** Parses a `JSONEachRow` body, every nonempty line as `parseJsonEachRowLine`. */
|
|
51
|
+
export function parseJsonEachRow(body) {
|
|
52
|
+
return body
|
|
53
|
+
.split('\n')
|
|
54
|
+
.filter((line) => line.trim().length > 0)
|
|
55
|
+
.map((line) => parseJsonEachRowLine(line));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parses one `JSONEachRow` line without rounding (#415). A number whose
|
|
59
|
+
* double does not print back to the digits ClickHouse wrote (a 64-bit or
|
|
60
|
+
* wider integer beyond 2^53, a Decimal with more than 15 significant digits)
|
|
61
|
+
* becomes a string of those digits. Every other number, Float64 included, stays a
|
|
62
|
+
* number. Unlike `parseJsonResult`, this needs no column types: values that
|
|
63
|
+
* read correctly today keep their type.
|
|
64
|
+
*/
|
|
65
|
+
export function parseJsonEachRowLine(line) {
|
|
66
|
+
// The reviver makes JSON.parse several times slower. A number with more
|
|
67
|
+
// than 15 digits needs a run of 16 digits and points, so a line without
|
|
68
|
+
// one has nothing to restore.
|
|
69
|
+
if (!SIXTEEN_DIGITS_RE.test(line))
|
|
70
|
+
return JSON.parse(line);
|
|
71
|
+
return JSON.parse(line, (_key, value, context) => typeof value === 'number' ? roundTripNumber(context?.source, value) : value);
|
|
72
|
+
}
|
|
73
|
+
function numberMode(type) {
|
|
74
|
+
if (DYNAMIC_TYPE_RE.test(type))
|
|
75
|
+
return 'roundTrip';
|
|
76
|
+
return EXACT_TYPE_RE.test(type) ? 'digits' : 'double';
|
|
77
|
+
}
|
|
78
|
+
/** The number, or the digits ClickHouse wrote when its double prints other digits. */
|
|
79
|
+
function roundTripNumber(source, value) {
|
|
80
|
+
// Up to 15 significant digits always survive a double (DBL_DIG), and
|
|
81
|
+
// Node 20 gives the reviver no source text: both keep the number.
|
|
82
|
+
if (source === undefined || source.length <= 15)
|
|
83
|
+
return value;
|
|
84
|
+
return canonicalDecimal(source) === canonicalDecimal(String(value)) ? value : source;
|
|
85
|
+
}
|
|
86
|
+
function jsonNumber(source, value) {
|
|
87
|
+
return { [JSON_NUMBER]: true, source, value };
|
|
88
|
+
}
|
|
89
|
+
function isJsonNumber(value) {
|
|
90
|
+
return value !== null && typeof value === 'object' && JSON_NUMBER in value;
|
|
91
|
+
}
|
|
92
|
+
function isRecord(value) {
|
|
93
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value) && !isJsonNumber(value);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* A JSON number's value as `<sign><significant digits>e<exponent>`, so that
|
|
97
|
+
* `100000000000000000000` and `1e+20`, or `0.10` and `0.1`, compare equal.
|
|
98
|
+
*/
|
|
99
|
+
function canonicalDecimal(text) {
|
|
100
|
+
const match = /^(-?)(\d*)(?:\.(\d*))?(?:[eE]([+-]?\d+))?$/.exec(text);
|
|
101
|
+
if (!match)
|
|
102
|
+
return text;
|
|
103
|
+
const [, sign = '', integer = '', fraction = '', exponent = '0'] = match;
|
|
104
|
+
const digits = integer + fraction;
|
|
105
|
+
const first = digits.search(/[1-9]/);
|
|
106
|
+
if (first === -1)
|
|
107
|
+
return '0';
|
|
108
|
+
return `${sign}${digits.slice(first).replace(/0+$/, '')}e${integer.length - first + Number(exponent)}`;
|
|
109
|
+
}
|
|
110
|
+
function restore(value, mode) {
|
|
111
|
+
if (isJsonNumber(value)) {
|
|
112
|
+
if (mode === 'double')
|
|
113
|
+
return value.value;
|
|
114
|
+
// Node 20 gives the reviver no source text: the double would be printed
|
|
115
|
+
// as if it were exact.
|
|
116
|
+
if (value.source === undefined) {
|
|
117
|
+
throw new Error('Reading 64-bit and wider integers and Decimals exactly needs Node.js 22 or later, or Bun. Upgrade Node.js or run chkit with Bun.');
|
|
118
|
+
}
|
|
119
|
+
return mode === 'digits' ? value.source : roundTripNumber(value.source, value.value);
|
|
120
|
+
}
|
|
121
|
+
if (Array.isArray(value))
|
|
122
|
+
return value.map((item) => restore(item, mode));
|
|
123
|
+
if (isRecord(value)) {
|
|
124
|
+
return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, restore(item, mode)]));
|
|
125
|
+
}
|
|
126
|
+
return value;
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=exact-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exact-json.js","sourceRoot":"","sources":["../src/exact-json.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ChxConfig, type ColumnDefinition, type ProjectionDefinition, type SkipIndexDefinition } from '@chkit/core';
|
|
1
|
+
import { type ChxConfig, type ColumnDefinition, type ProjectionDefinition, type SkipIndexDefinition, type TableConstraintDefinition } from '@chkit/core';
|
|
2
2
|
import { type ClickHouseSettings, createClient } from '@clickhouse/client';
|
|
3
3
|
export interface QueryStatus {
|
|
4
4
|
status: 'running' | 'finished' | 'failed' | 'unknown';
|
|
@@ -10,10 +10,16 @@ export interface QueryStatus {
|
|
|
10
10
|
durationMs?: number;
|
|
11
11
|
error?: string;
|
|
12
12
|
}
|
|
13
|
+
export interface QueryStatusOptions {
|
|
14
|
+
afterTime?: string;
|
|
15
|
+
everyReplica?: boolean;
|
|
16
|
+
}
|
|
13
17
|
export type { ClickHouseSettings };
|
|
14
18
|
export interface ClickHouseInsertParams<T extends Record<string, unknown>> {
|
|
15
19
|
table: string;
|
|
16
20
|
values: T[];
|
|
21
|
+
/** Encode rows through a stream instead of joining an entire INSERT into one string. */
|
|
22
|
+
stream?: boolean;
|
|
17
23
|
compressed?: boolean;
|
|
18
24
|
/** Per-insert settings, e.g. a stable `insert_deduplication_token`. */
|
|
19
25
|
settings?: ClickHouseSettings;
|
|
@@ -40,7 +46,10 @@ export interface ClickHouseJsonQueryResult<T extends Record<string, unknown> = R
|
|
|
40
46
|
}
|
|
41
47
|
export type ObservableSystemTable = 'processes' | 'query_log';
|
|
42
48
|
export interface ClickHouseExecutor {
|
|
43
|
-
command(sql: string): Promise<void>;
|
|
49
|
+
command(sql: string, settings?: ClickHouseSettings): Promise<void>;
|
|
50
|
+
/** Rows as JSON objects. A number a double cannot hold exactly (an integer
|
|
51
|
+
* beyond 2^53, a Decimal with more than 15 digits) arrives as a string of
|
|
52
|
+
* its digits; the ObsessionDB console API returns every value as a string. */
|
|
44
53
|
query<T>(sql: string, settings?: ClickHouseSettings): Promise<T[]>;
|
|
45
54
|
queryJson?<T extends Record<string, unknown>>(sql: string, settings?: ClickHouseSettings): Promise<ClickHouseJsonQueryResult<T>>;
|
|
46
55
|
insert<T extends Record<string, unknown>>(params: ClickHouseInsertParams<T>): Promise<void>;
|
|
@@ -50,20 +59,27 @@ export interface ClickHouseExecutor {
|
|
|
50
59
|
* Returns immediately without waiting for completion.
|
|
51
60
|
* @param sql - The SQL to execute
|
|
52
61
|
* @param queryId - Optional deterministic query_id (useful for resumability). Auto-generated if omitted.
|
|
62
|
+
* @param settings - Optional ClickHouse settings sent with the query.
|
|
53
63
|
* @returns The query_id assigned to this query. */
|
|
54
|
-
submit(sql: string, queryId?: string): Promise<string>;
|
|
64
|
+
submit(sql: string, queryId?: string, settings?: ClickHouseSettings): Promise<string>;
|
|
55
65
|
/** Check the status of a previously submitted query.
|
|
56
66
|
* Checks system.processes first (running?), then system.query_log (finished/failed?).
|
|
67
|
+
* On a multi-replica target (see `resolveReplicaFanout`) both are read on every replica,
|
|
68
|
+
* because the query runs on whichever replica received it.
|
|
57
69
|
* @param queryId - The query_id returned by submit()
|
|
58
70
|
* @param options.afterTime - Only consider query_log entries for queries started at or after this ISO timestamp.
|
|
59
|
-
* Useful when resubmitting with the same query_id to ignore stale entries from previous attempts.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
71
|
+
* Useful when resubmitting with the same query_id to ignore stale entries from previous attempts.
|
|
72
|
+
* @param options.everyReplica - Fail when a replica cannot be read instead of skipping it, so a
|
|
73
|
+
* status other than 'running' means that no replica runs the query. Polls leave it unset and
|
|
74
|
+
* keep going while a replica is unavailable. */
|
|
75
|
+
queryStatus(queryId: string, options?: QueryStatusOptions): Promise<QueryStatus>;
|
|
63
76
|
/** Optional capability: FROM-clause source for cluster-aware system table polling.
|
|
64
77
|
* Native executors return `clusterAllReplicas(...)` when `clickhouse.cluster` is set.
|
|
65
78
|
* Remote / ObsessionDB executors may omit this and keep local `system.*` tables. */
|
|
66
79
|
systemTableSource?(table: ObservableSystemTable): string;
|
|
80
|
+
/** Optional capability: whether the user may change settings, which a readonly = 1
|
|
81
|
+
* user may not. Native executors look it up once, with their first read. */
|
|
82
|
+
canChangeSettings?(): Promise<boolean>;
|
|
67
83
|
close(): Promise<void>;
|
|
68
84
|
}
|
|
69
85
|
/**
|
|
@@ -114,6 +130,7 @@ export interface IntrospectedTable {
|
|
|
114
130
|
settings: Record<string, string>;
|
|
115
131
|
indexes: SkipIndexDefinition[];
|
|
116
132
|
projections: ProjectionDefinition[];
|
|
133
|
+
constraints?: TableConstraintDefinition[];
|
|
117
134
|
ttl?: string;
|
|
118
135
|
}
|
|
119
136
|
type ClickHouseClient = ReturnType<typeof createClient>;
|
|
@@ -124,8 +141,9 @@ type ClickHouseClientOptions = {
|
|
|
124
141
|
response?: boolean;
|
|
125
142
|
};
|
|
126
143
|
};
|
|
127
|
-
export { parseEngineFromCreateTableQuery, parseOrderByFromCreateTableQuery, parsePartitionByFromCreateTableQuery, parsePrimaryKeyFromCreateTableQuery, parseProjectionsFromCreateTableQuery, parseSettingsFromCreateTableQuery, parseTTLFromCreateTableQuery, parseUniqueKeyFromCreateTableQuery, } from './create-table-parser.js';
|
|
144
|
+
export { parseConstraintsFromCreateTableQuery, parseEngineFromCreateTableQuery, parseOrderByFromCreateTableQuery, parsePartitionByFromCreateTableQuery, parsePrimaryKeyFromCreateTableQuery, parseProjectionsFromCreateTableQuery, parseSettingsFromCreateTableQuery, parseTTLFromCreateTableQuery, parseUniqueKeyFromCreateTableQuery, } from './create-table-parser.js';
|
|
128
145
|
export { canonicalizeSqlFragments } from './canonicalize.js';
|
|
146
|
+
export { listViewDetails, parseMaterializedViewTarget, type IntrospectedView } from './view-details.js';
|
|
129
147
|
export { parseCommentFromCreateDictionaryQuery, parseDictionaryAttributesFromCreateDictionaryQuery, parseDictionaryPrimaryKeyFromCreateDictionaryQuery, parseDictionaryRangeFromCreateDictionaryQuery, parseDictionarySettingsFromCreateDictionaryQuery, parseLayoutFromCreateDictionaryQuery, parseLifetimeFromCreateDictionaryQuery, parseSourceFromCreateDictionaryQuery, type ParsedDictionaryAttribute, } from './create-dictionary-parser.js';
|
|
130
148
|
export declare function inferSchemaKindFromEngine(engine: string): SchemaObjectRef['kind'] | null;
|
|
131
149
|
export declare function normalizeColumnFromSystemRow(row: SystemColumnRow): ColumnDefinition;
|
|
@@ -137,6 +155,8 @@ export declare function buildIntrospectedTables(tables: SystemTableRow[], column
|
|
|
137
155
|
* Pure so it can be unit-tested without catching thrown errors.
|
|
138
156
|
*/
|
|
139
157
|
export declare function formatConnectionError(error: unknown, url: string, username?: string): string | undefined;
|
|
158
|
+
/** The URL without its `user:password@` part, for messages and logs. */
|
|
159
|
+
export declare function urlWithoutCredentials(url: string): string;
|
|
140
160
|
export declare function wrapConnectionError(error: unknown, url: string, username?: string): never;
|
|
141
161
|
export declare function isUnknownDatabaseError(error: unknown): boolean;
|
|
142
162
|
/**
|
|
@@ -168,7 +188,10 @@ export declare function assertStreamedQuerySucceeded(input: {
|
|
|
168
188
|
query_id: string;
|
|
169
189
|
sql: string | undefined;
|
|
170
190
|
}): void;
|
|
171
|
-
export { waitForColumn, waitForDDLPropagation, waitForDictionary, waitForTable, waitForTableAbsent, waitForView, } from './ddl-propagation.js';
|
|
191
|
+
export { type PropagationOptions, waitForColumn, waitForColumnAbsent, parseExchangeTables, waitForDDLPropagation, waitForDictionary, waitForExchange, waitForTable, waitForTableAbsent, waitForView, } from './ddl-propagation.js';
|
|
192
|
+
export { allReplicas, resolveReplicaFanout, type ReplicaFanout } from './replicas.js';
|
|
193
|
+
export { type AsyncInsertGuardOptions, type QualifiedTable, assertNoFireAndForgetAsyncInserts } from './async-insert-guard.js';
|
|
194
|
+
export { type InsertBarrierOptions, waitForInsertBarrier } from './insert-barrier.js';
|
|
172
195
|
export declare function createStatelessClickHouseClient(config: ClickHouseConfig, clickhouseSettings?: ClickHouseSettings, options?: ClickHouseClientOptions): ClickHouseClient;
|
|
173
196
|
/**
|
|
174
197
|
* Creates a ClickHouse client that sends one session_id with every request.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|