@effect/sql-clickhouse 4.0.0-beta.8 → 4.0.0-beta.81
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/ClickhouseClient.d.ts +80 -26
- package/dist/ClickhouseClient.d.ts.map +1 -1
- package/dist/ClickhouseClient.js +114 -38
- package/dist/ClickhouseClient.js.map +1 -1
- package/dist/ClickhouseMigrator.d.ts +19 -5
- package/dist/ClickhouseMigrator.d.ts.map +1 -1
- package/dist/ClickhouseMigrator.js +10 -4
- package/dist/ClickhouseMigrator.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/package.json +6 -6
- package/src/ClickhouseClient.ts +168 -48
- package/src/ClickhouseMigrator.ts +19 -5
- package/src/index.ts +3 -3
|
@@ -1,30 +1,48 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse driver for Effect SQL, backed by `@clickhouse/client`.
|
|
3
|
+
*
|
|
4
|
+
* This module provides both the ClickHouse-specific {@link ClickhouseClient}
|
|
5
|
+
* service and the generic {@link Client.SqlClient} service. `make` creates a
|
|
6
|
+
* scoped client, checks the connection with `SELECT 1`, maps ClickHouse errors
|
|
7
|
+
* to `SqlError`, and aborts in-flight queries when interrupted. The
|
|
8
|
+
* ClickHouse-specific service adds typed parameters, command execution, insert
|
|
9
|
+
* queries, query id and settings helpers, a statement compiler, and direct or
|
|
10
|
+
* config-backed layers.
|
|
11
|
+
*
|
|
12
|
+
* @since 4.0.0
|
|
3
13
|
*/
|
|
4
14
|
import * as Clickhouse from "@clickhouse/client";
|
|
5
15
|
import * as Config from "effect/Config";
|
|
16
|
+
import * as Context from "effect/Context";
|
|
6
17
|
import * as Effect from "effect/Effect";
|
|
7
18
|
import * as Layer from "effect/Layer";
|
|
8
19
|
import type * as Scope from "effect/Scope";
|
|
9
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
10
20
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
11
21
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
12
22
|
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
13
23
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
14
24
|
import type { Readable } from "node:stream";
|
|
15
25
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
26
|
+
* Unique runtime identifier used to tag `ClickhouseClient` values.
|
|
27
|
+
*
|
|
28
|
+
* @category type IDs
|
|
29
|
+
* @since 4.0.0
|
|
18
30
|
*/
|
|
19
31
|
export declare const TypeId: TypeId;
|
|
20
32
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
33
|
+
* Type-level literal for the `ClickhouseClient` runtime identifier.
|
|
34
|
+
*
|
|
35
|
+
* @category type IDs
|
|
36
|
+
* @since 4.0.0
|
|
23
37
|
*/
|
|
24
38
|
export type TypeId = "~@effect/sql-clickhouse/ClickhouseClient";
|
|
25
39
|
/**
|
|
40
|
+
* ClickHouse-specific `SqlClient` extension with access to its configuration,
|
|
41
|
+
* typed parameter fragments, command-mode execution, insert queries, and
|
|
42
|
+
* per-effect query ID and ClickHouse settings.
|
|
43
|
+
*
|
|
26
44
|
* @category models
|
|
27
|
-
* @since
|
|
45
|
+
* @since 4.0.0
|
|
28
46
|
*/
|
|
29
47
|
export interface ClickhouseClient extends Client.SqlClient {
|
|
30
48
|
readonly [TypeId]: TypeId;
|
|
@@ -46,13 +64,23 @@ export interface ClickhouseClient extends Client.SqlClient {
|
|
|
46
64
|
};
|
|
47
65
|
}
|
|
48
66
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
67
|
+
* Service tag for the active ClickHouse SQL client.
|
|
68
|
+
*
|
|
69
|
+
* **When to use**
|
|
70
|
+
*
|
|
71
|
+
* Use to access or provide a ClickHouse SQL client through the Effect context.
|
|
72
|
+
*
|
|
73
|
+
* @category services
|
|
74
|
+
* @since 4.0.0
|
|
51
75
|
*/
|
|
52
|
-
export declare const ClickhouseClient:
|
|
76
|
+
export declare const ClickhouseClient: Context.Service<ClickhouseClient, ClickhouseClient>;
|
|
53
77
|
/**
|
|
78
|
+
* Configuration for creating a ClickHouse client, combining
|
|
79
|
+
* `@clickhouse/client` options with optional span attributes and query/result
|
|
80
|
+
* name transforms.
|
|
81
|
+
*
|
|
54
82
|
* @category constructors
|
|
55
|
-
* @since
|
|
83
|
+
* @since 4.0.0
|
|
56
84
|
*/
|
|
57
85
|
export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfigOptions {
|
|
58
86
|
readonly spanAttributes?: Record<string, unknown> | undefined;
|
|
@@ -60,48 +88,74 @@ export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfi
|
|
|
60
88
|
readonly transformQueryNames?: ((str: string) => string) | undefined;
|
|
61
89
|
}
|
|
62
90
|
/**
|
|
91
|
+
* Creates a scoped `ClickhouseClient`, verifies connectivity with `SELECT 1`,
|
|
92
|
+
* closes the underlying client when the scope ends, maps ClickHouse failures
|
|
93
|
+
* to `SqlError`, and aborts plus kills in-flight queries when interrupted.
|
|
94
|
+
*
|
|
63
95
|
* @category constructors
|
|
64
|
-
* @since
|
|
96
|
+
* @since 4.0.0
|
|
65
97
|
*/
|
|
66
98
|
export declare const make: (options: ClickhouseClientConfig) => Effect.Effect<ClickhouseClient, SqlError, Scope.Scope | Reactivity.Reactivity>;
|
|
67
99
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
100
|
+
* Fiber reference read by the low-level ClickHouse connection to choose query
|
|
101
|
+
* or command execution for statements; defaults to `query`.
|
|
102
|
+
*
|
|
103
|
+
* @category references
|
|
104
|
+
* @since 4.0.0
|
|
70
105
|
*/
|
|
71
|
-
export declare const ClientMethod:
|
|
106
|
+
export declare const ClientMethod: Context.Reference<"query" | "command" | "insert">;
|
|
72
107
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
108
|
+
* Fiber reference for the ClickHouse `query_id` applied to queries and
|
|
109
|
+
* inserts; a random UUID is generated when no query ID is set.
|
|
110
|
+
*
|
|
111
|
+
* @category references
|
|
112
|
+
* @since 4.0.0
|
|
75
113
|
*/
|
|
76
|
-
export declare const QueryId:
|
|
114
|
+
export declare const QueryId: Context.Reference<string | undefined>;
|
|
77
115
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
116
|
+
* Fiber reference containing ClickHouse settings to attach to queries,
|
|
117
|
+
* commands, and inserts.
|
|
118
|
+
*
|
|
119
|
+
* @category references
|
|
120
|
+
* @since 4.0.0
|
|
80
121
|
*/
|
|
81
|
-
export declare const ClickhouseSettings:
|
|
122
|
+
export declare const ClickhouseSettings: Context.Reference<NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>>;
|
|
82
123
|
/**
|
|
124
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
125
|
+
* `Config`-backed ClickHouse client configuration.
|
|
126
|
+
*
|
|
83
127
|
* @category layers
|
|
84
|
-
* @since
|
|
128
|
+
* @since 4.0.0
|
|
85
129
|
*/
|
|
86
130
|
export declare const layerConfig: (config: Config.Wrap<ClickhouseClientConfig>) => Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError>;
|
|
87
131
|
/**
|
|
132
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
133
|
+
* ClickHouse client configuration.
|
|
134
|
+
*
|
|
88
135
|
* @category layers
|
|
89
|
-
* @since
|
|
136
|
+
* @since 4.0.0
|
|
90
137
|
*/
|
|
91
138
|
export declare const layer: (config: ClickhouseClientConfig) => Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError>;
|
|
92
139
|
/**
|
|
140
|
+
* Creates the SQL statement compiler for ClickHouse, emitting typed
|
|
141
|
+
* `{pN: Type}` placeholders and escaping identifiers with an optional query
|
|
142
|
+
* name transform.
|
|
143
|
+
*
|
|
93
144
|
* @category compiler
|
|
94
|
-
* @since
|
|
145
|
+
* @since 4.0.0
|
|
95
146
|
*/
|
|
96
147
|
export declare const makeCompiler: (transform?: (_: string) => string) => Statement.Compiler;
|
|
97
148
|
/**
|
|
149
|
+
* Custom SQL fragment type used for ClickHouse typed parameters created by
|
|
150
|
+
* `ClickhouseClient.param`.
|
|
151
|
+
*
|
|
98
152
|
* @category custom types
|
|
99
|
-
* @since
|
|
153
|
+
* @since 4.0.0
|
|
100
154
|
*/
|
|
101
155
|
export type ClickhouseCustom = ClickhouseParam;
|
|
102
156
|
/**
|
|
103
157
|
* @category custom types
|
|
104
|
-
* @since
|
|
158
|
+
* @since 4.0.0
|
|
105
159
|
*/
|
|
106
160
|
interface ClickhouseParam extends Statement.Custom<"ClickhouseParam", string, unknown> {
|
|
107
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickhouseClient.d.ts","sourceRoot":"","sources":["../src/ClickhouseClient.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ClickhouseClient.d.ts","sourceRoot":"","sources":["../src/ClickhouseClient.ts"],"names":[],"mappings":"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"}
|
package/dist/ClickhouseClient.js
CHANGED
|
@@ -1,36 +1,96 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse driver for Effect SQL, backed by `@clickhouse/client`.
|
|
3
|
+
*
|
|
4
|
+
* This module provides both the ClickHouse-specific {@link ClickhouseClient}
|
|
5
|
+
* service and the generic {@link Client.SqlClient} service. `make` creates a
|
|
6
|
+
* scoped client, checks the connection with `SELECT 1`, maps ClickHouse errors
|
|
7
|
+
* to `SqlError`, and aborts in-flight queries when interrupted. The
|
|
8
|
+
* ClickHouse-specific service adds typed parameters, command execution, insert
|
|
9
|
+
* queries, query id and settings helpers, a statement compiler, and direct or
|
|
10
|
+
* config-backed layers.
|
|
11
|
+
*
|
|
12
|
+
* @since 4.0.0
|
|
3
13
|
*/
|
|
4
14
|
import * as Clickhouse from "@clickhouse/client";
|
|
5
15
|
import * as NodeStream from "@effect/platform-node/NodeStream";
|
|
6
16
|
import * as Config from "effect/Config";
|
|
17
|
+
import * as Context from "effect/Context";
|
|
7
18
|
import * as Duration from "effect/Duration";
|
|
8
19
|
import * as Effect from "effect/Effect";
|
|
9
20
|
import * as Fiber from "effect/Fiber";
|
|
10
21
|
import { dual } from "effect/Function";
|
|
11
22
|
import * as Layer from "effect/Layer";
|
|
12
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
13
23
|
import * as Stream from "effect/Stream";
|
|
14
24
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
15
25
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
16
|
-
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
26
|
+
import { AuthenticationError, AuthorizationError, ConnectionError, SqlError, SqlSyntaxError, StatementTimeoutError, UnknownError } from "effect/unstable/sql/SqlError";
|
|
17
27
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
18
28
|
import * as Crypto from "node:crypto";
|
|
19
29
|
const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
20
30
|
const ATTR_DB_NAMESPACE = "db.namespace";
|
|
31
|
+
const clickhouseCodeFromCause = cause => {
|
|
32
|
+
if (typeof cause !== "object" || cause === null || !("code" in cause)) {
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
const code = cause.code;
|
|
36
|
+
if (typeof code === "number") {
|
|
37
|
+
return code;
|
|
38
|
+
}
|
|
39
|
+
if (typeof code === "string") {
|
|
40
|
+
const parsed = Number(code);
|
|
41
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
42
|
+
}
|
|
43
|
+
return undefined;
|
|
44
|
+
};
|
|
45
|
+
const clickhouseSyntaxErrorCodes = /*#__PURE__*/new Set([36, 60, 62, 242]);
|
|
46
|
+
const classifyError = (cause, message, operation, fallback = "unknown") => {
|
|
47
|
+
const props = {
|
|
48
|
+
cause,
|
|
49
|
+
message,
|
|
50
|
+
operation
|
|
51
|
+
};
|
|
52
|
+
const code = clickhouseCodeFromCause(cause);
|
|
53
|
+
if (code !== undefined) {
|
|
54
|
+
if (code === 516) {
|
|
55
|
+
return new AuthenticationError(props);
|
|
56
|
+
}
|
|
57
|
+
if (code === 497) {
|
|
58
|
+
return new AuthorizationError(props);
|
|
59
|
+
}
|
|
60
|
+
if (clickhouseSyntaxErrorCodes.has(code)) {
|
|
61
|
+
return new SqlSyntaxError(props);
|
|
62
|
+
}
|
|
63
|
+
if (code === 159 || code === 469) {
|
|
64
|
+
return new StatementTimeoutError(props);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return fallback === "connection" ? new ConnectionError(props) : new UnknownError(props);
|
|
68
|
+
};
|
|
21
69
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
70
|
+
* Unique runtime identifier used to tag `ClickhouseClient` values.
|
|
71
|
+
*
|
|
72
|
+
* @category type IDs
|
|
73
|
+
* @since 4.0.0
|
|
24
74
|
*/
|
|
25
75
|
export const TypeId = "~@effect/sql-clickhouse/ClickhouseClient";
|
|
26
76
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
77
|
+
* Service tag for the active ClickHouse SQL client.
|
|
78
|
+
*
|
|
79
|
+
* **When to use**
|
|
80
|
+
*
|
|
81
|
+
* Use to access or provide a ClickHouse SQL client through the Effect context.
|
|
82
|
+
*
|
|
83
|
+
* @category services
|
|
84
|
+
* @since 4.0.0
|
|
29
85
|
*/
|
|
30
|
-
export const ClickhouseClient = /*#__PURE__*/
|
|
86
|
+
export const ClickhouseClient = /*#__PURE__*/Context.Service("@effect/sql-clickhouse/ClickhouseClient");
|
|
31
87
|
/**
|
|
88
|
+
* Creates a scoped `ClickhouseClient`, verifies connectivity with `SELECT 1`,
|
|
89
|
+
* closes the underlying client when the scope ends, maps ClickHouse failures
|
|
90
|
+
* to `SqlError`, and aborts plus kills in-flight queries when interrupted.
|
|
91
|
+
*
|
|
32
92
|
* @category constructors
|
|
33
|
-
* @since
|
|
93
|
+
* @since 4.0.0
|
|
34
94
|
*/
|
|
35
95
|
export const make = options => Effect.gen(function* () {
|
|
36
96
|
const compiler = makeCompiler(options.transformQueryNames);
|
|
@@ -41,14 +101,16 @@ export const make = options => Effect.gen(function* () {
|
|
|
41
101
|
query: "SELECT 1"
|
|
42
102
|
}),
|
|
43
103
|
catch: cause => new SqlError({
|
|
44
|
-
cause,
|
|
45
|
-
message: "ClickhouseClient: Failed to connect"
|
|
104
|
+
reason: classifyError(cause, "ClickhouseClient: Failed to connect", "connect", "connection")
|
|
46
105
|
})
|
|
47
106
|
}), () => Effect.promise(() => client.close())).pipe(Effect.timeoutOrElse({
|
|
48
107
|
duration: Duration.seconds(5),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
108
|
+
orElse: () => Effect.fail(new SqlError({
|
|
109
|
+
reason: new ConnectionError({
|
|
110
|
+
message: "ClickhouseClient: Connection timeout",
|
|
111
|
+
cause: new Error("connection timeout"),
|
|
112
|
+
operation: "connect"
|
|
113
|
+
})
|
|
52
114
|
}))
|
|
53
115
|
}));
|
|
54
116
|
class ConnectionImpl {
|
|
@@ -75,8 +137,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
75
137
|
query_id: queryId,
|
|
76
138
|
clickhouse_settings: settings
|
|
77
139
|
}).then(result => resume(Effect.succeed(result)), cause => resume(Effect.fail(new SqlError({
|
|
78
|
-
cause,
|
|
79
|
-
message: "Failed to execute statement"
|
|
140
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
80
141
|
}))));
|
|
81
142
|
} else {
|
|
82
143
|
this.conn.query({
|
|
@@ -87,8 +148,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
87
148
|
clickhouse_settings: settings,
|
|
88
149
|
format
|
|
89
150
|
}).then(result => resume(Effect.succeed(result)), cause => resume(Effect.fail(new SqlError({
|
|
90
|
-
cause,
|
|
91
|
-
message: "Failed to execute statement"
|
|
151
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
92
152
|
}))));
|
|
93
153
|
}
|
|
94
154
|
return Effect.suspend(() => {
|
|
@@ -128,8 +188,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
128
188
|
return NodeStream.fromReadable({
|
|
129
189
|
evaluate: () => result.stream(),
|
|
130
190
|
onError: cause => new SqlError({
|
|
131
|
-
cause,
|
|
132
|
-
message: "Failed to execute stream"
|
|
191
|
+
reason: classifyError(cause, "Failed to execute stream", "stream")
|
|
133
192
|
})
|
|
134
193
|
});
|
|
135
194
|
}), Stream.unwrap, Stream.chunks, Stream.mapEffect(chunk => {
|
|
@@ -142,8 +201,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
142
201
|
return Effect.tryPromise({
|
|
143
202
|
try: () => Promise.all(promises).then(rows => transformRows ? transformRows(rows) : rows),
|
|
144
203
|
catch: cause => new SqlError({
|
|
145
|
-
cause,
|
|
146
|
-
message: "Failed to parse row"
|
|
204
|
+
reason: classifyError(cause, "Failed to parse row", "parseRow")
|
|
147
205
|
})
|
|
148
206
|
});
|
|
149
207
|
}), Stream.flattenIterable);
|
|
@@ -178,8 +236,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
178
236
|
query_id: queryId,
|
|
179
237
|
clickhouse_settings: settings
|
|
180
238
|
}).then(result => resume(Effect.succeed(result)), cause => resume(Effect.fail(new SqlError({
|
|
181
|
-
cause,
|
|
182
|
-
message: "Failed to insert data"
|
|
239
|
+
reason: classifyError(cause, "Failed to insert data", "insert")
|
|
183
240
|
}))));
|
|
184
241
|
return Effect.suspend(() => {
|
|
185
242
|
controller.abort();
|
|
@@ -194,36 +251,51 @@ export const make = options => Effect.gen(function* () {
|
|
|
194
251
|
});
|
|
195
252
|
});
|
|
196
253
|
/**
|
|
197
|
-
*
|
|
198
|
-
*
|
|
254
|
+
* Fiber reference read by the low-level ClickHouse connection to choose query
|
|
255
|
+
* or command execution for statements; defaults to `query`.
|
|
256
|
+
*
|
|
257
|
+
* @category references
|
|
258
|
+
* @since 4.0.0
|
|
199
259
|
*/
|
|
200
|
-
export const ClientMethod = /*#__PURE__*/
|
|
260
|
+
export const ClientMethod = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/ClientMethod", {
|
|
201
261
|
defaultValue: () => "query"
|
|
202
262
|
});
|
|
203
263
|
/**
|
|
204
|
-
*
|
|
205
|
-
*
|
|
264
|
+
* Fiber reference for the ClickHouse `query_id` applied to queries and
|
|
265
|
+
* inserts; a random UUID is generated when no query ID is set.
|
|
266
|
+
*
|
|
267
|
+
* @category references
|
|
268
|
+
* @since 4.0.0
|
|
206
269
|
*/
|
|
207
|
-
export const QueryId = /*#__PURE__*/
|
|
270
|
+
export const QueryId = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/QueryId", {
|
|
208
271
|
defaultValue: () => undefined
|
|
209
272
|
});
|
|
210
273
|
/**
|
|
211
|
-
*
|
|
212
|
-
*
|
|
274
|
+
* Fiber reference containing ClickHouse settings to attach to queries,
|
|
275
|
+
* commands, and inserts.
|
|
276
|
+
*
|
|
277
|
+
* @category references
|
|
278
|
+
* @since 4.0.0
|
|
213
279
|
*/
|
|
214
|
-
export const ClickhouseSettings = /*#__PURE__*/
|
|
280
|
+
export const ClickhouseSettings = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/ClickhouseSettings", {
|
|
215
281
|
defaultValue: () => ({})
|
|
216
282
|
});
|
|
217
283
|
/**
|
|
284
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
285
|
+
* `Config`-backed ClickHouse client configuration.
|
|
286
|
+
*
|
|
218
287
|
* @category layers
|
|
219
|
-
* @since
|
|
288
|
+
* @since 4.0.0
|
|
220
289
|
*/
|
|
221
|
-
export const layerConfig = config => Layer.
|
|
290
|
+
export const layerConfig = config => Layer.effectContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(ClickhouseClient, client).pipe(Context.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
|
|
222
291
|
/**
|
|
292
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
293
|
+
* ClickHouse client configuration.
|
|
294
|
+
*
|
|
223
295
|
* @category layers
|
|
224
|
-
* @since
|
|
296
|
+
* @since 4.0.0
|
|
225
297
|
*/
|
|
226
|
-
export const layer = config => Layer.
|
|
298
|
+
export const layer = config => Layer.effectContext(Effect.map(make(config), client => Context.make(ClickhouseClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
|
|
227
299
|
const typeFromUnknown = value => {
|
|
228
300
|
if (Statement.isFragment(value)) {
|
|
229
301
|
return typeFromUnknown(value.segments[0]);
|
|
@@ -249,8 +321,12 @@ const typeFromUnknown = value => {
|
|
|
249
321
|
}
|
|
250
322
|
};
|
|
251
323
|
/**
|
|
324
|
+
* Creates the SQL statement compiler for ClickHouse, emitting typed
|
|
325
|
+
* `{pN: Type}` placeholders and escaping identifiers with an optional query
|
|
326
|
+
* name transform.
|
|
327
|
+
*
|
|
252
328
|
* @category compiler
|
|
253
|
-
* @since
|
|
329
|
+
* @since 4.0.0
|
|
254
330
|
*/
|
|
255
331
|
export const makeCompiler = transform => Statement.makeCompiler({
|
|
256
332
|
dialect: "sqlite",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickhouseClient.js","names":["Clickhouse","NodeStream","Config","Duration","Effect","Fiber","dual","Layer","ServiceMap","Stream","Reactivity","Client","SqlError","Statement","Crypto","ATTR_DB_SYSTEM_NAME","ATTR_DB_NAMESPACE","TypeId","ClickhouseClient","Service","make","options","gen","compiler","makeCompiler","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","client","createClient","acquireRelease","tryPromise","try","exec","query","catch","cause","message","promise","close","pipe","timeoutOrElse","duration","seconds","onTimeout","fail","Error","ConnectionImpl","conn","constructor","runRaw","sql","params","format","paramsObj","i","length","withFiber","fiber","method","getRef","ClientMethod","callback","resume","queryId","QueryId","randomUUID","settings","ClickhouseSettings","controller","AbortController","command","query_params","abort_signal","signal","query_id","clickhouse_settings","then","result","succeed","suspend","abort","run","flatMap","json","data","execute","map","executeRaw","executeValues","executeUnprepared","executeStream","empty","fromReadable","evaluate","stream","onError","unwrap","chunks","mapEffect","chunk","promises","rows","row","push","Promise","all","flattenIterable","connection","Object","assign","acquirer","spanAttributes","entries","database","beginTransaction","config","param","dataType","value","fragment","clickhouseParam","asCommand","effect","provideService","insertQuery","getCurrent","insert","withQueryId","withClickhouseSettings","Reference","defaultValue","layerConfig","effectServices","asEffect","add","SqlClient","provide","layer","typeFromUnknown","isFragment","segments","isClickhouseParam","paramA","Array","isArray","Date","transform","dialect","placeholder","u","onIdentifier","withoutTransform","escape","onRecordUpdate","onCustom","type","paramB","defaultEscape","custom","isCustom"],"sources":["../src/ClickhouseClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ClickhouseClient.js","names":["Clickhouse","NodeStream","Config","Context","Duration","Effect","Fiber","dual","Layer","Stream","Reactivity","Client","AuthenticationError","AuthorizationError","ConnectionError","SqlError","SqlSyntaxError","StatementTimeoutError","UnknownError","Statement","Crypto","ATTR_DB_SYSTEM_NAME","ATTR_DB_NAMESPACE","clickhouseCodeFromCause","cause","undefined","code","parsed","Number","isNaN","clickhouseSyntaxErrorCodes","Set","classifyError","message","operation","fallback","props","has","TypeId","ClickhouseClient","Service","make","options","gen","compiler","makeCompiler","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","client","createClient","acquireRelease","tryPromise","try","exec","query","catch","reason","promise","close","pipe","timeoutOrElse","duration","seconds","orElse","fail","Error","ConnectionImpl","conn","constructor","runRaw","sql","params","format","paramsObj","i","length","withFiber","fiber","method","getRef","ClientMethod","callback","resume","queryId","QueryId","randomUUID","settings","ClickhouseSettings","controller","AbortController","command","query_params","abort_signal","signal","query_id","clickhouse_settings","then","result","succeed","suspend","abort","run","flatMap","json","data","execute","map","executeRaw","executeValues","executeUnprepared","executeStream","empty","fromReadable","evaluate","stream","onError","unwrap","chunks","mapEffect","chunk","promises","rows","row","push","Promise","all","flattenIterable","connection","Object","assign","acquirer","spanAttributes","entries","database","beginTransaction","config","param","dataType","value","fragment","clickhouseParam","asCommand","effect","provideService","insertQuery","getCurrent","insert","withQueryId","withClickhouseSettings","Reference","defaultValue","layerConfig","effectContext","add","SqlClient","provide","layer","typeFromUnknown","isFragment","segments","isClickhouseParam","paramA","Array","isArray","Date","transform","dialect","placeholder","u","onIdentifier","withoutTransform","escape","onRecordUpdate","onCustom","type","paramB","defaultEscape","custom","isCustom"],"sources":["../src/ClickhouseClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse adapter for the shared Effect SQL migration runner.
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports the common `Migrator` loaders and error types, then
|
|
5
|
+
* provides `run` and `layer` helpers that apply ordered migrations through the
|
|
6
|
+
* current ClickHouse `SqlClient`. `run` returns the applied migration IDs and
|
|
7
|
+
* names, while `layer` runs the migrations during layer construction and
|
|
8
|
+
* provides no services.
|
|
9
|
+
*
|
|
10
|
+
* @since 4.0.0
|
|
3
11
|
*/
|
|
4
12
|
import type * as Effect from "effect/Effect";
|
|
5
13
|
import * as Layer from "effect/Layer";
|
|
@@ -7,17 +15,23 @@ import * as Migrator from "effect/unstable/sql/Migrator";
|
|
|
7
15
|
import type * as Client from "effect/unstable/sql/SqlClient";
|
|
8
16
|
import type { SqlError } from "effect/unstable/sql/SqlError";
|
|
9
17
|
/**
|
|
10
|
-
* @since
|
|
18
|
+
* @since 4.0.0
|
|
11
19
|
*/
|
|
12
20
|
export * from "effect/unstable/sql/Migrator";
|
|
13
21
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
22
|
+
* Runs SQL migrations for ClickHouse using the supplied migrator options and
|
|
23
|
+
* returns the applied migration IDs and names.
|
|
24
|
+
*
|
|
25
|
+
* @category constructors
|
|
26
|
+
* @since 4.0.0
|
|
16
27
|
*/
|
|
17
28
|
export declare const run: <R2 = never>({ loader, schemaDirectory, table }: Migrator.MigratorOptions<R2>) => Effect.Effect<ReadonlyArray<readonly [id: number, name: string]>, Migrator.MigrationError | SqlError, Client.SqlClient | R2>;
|
|
18
29
|
/**
|
|
30
|
+
* Creates a layer that runs the configured ClickHouse migrations during layer
|
|
31
|
+
* construction and provides no services.
|
|
32
|
+
*
|
|
19
33
|
* @category layers
|
|
20
|
-
* @since
|
|
34
|
+
* @since 4.0.0
|
|
21
35
|
*/
|
|
22
36
|
export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, Client.SqlClient | R>;
|
|
23
37
|
//# sourceMappingURL=ClickhouseMigrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickhouseMigrator.d.ts","sourceRoot":"","sources":["../src/ClickhouseMigrator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"ClickhouseMigrator.d.ts","sourceRoot":"","sources":["../src/ClickhouseMigrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D;;GAEG;AACH,cAAc,8BAA8B,CAAA;AAE5C;;;;;;GAMG;AACH,eAAO,MAAM,GAAG,EAAE,CAAC,EAAE,GAAG,KAAK,EAC3B,EAAE,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC,KAC7D,MAAM,CAAC,MAAM,CAChB,aAAa,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAClD,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,EAAE,CACF,CAAA;AAErB;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,SAAS,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,KACnC,KAAK,CAAC,KAAK,CACZ,KAAK,EACL,QAAQ,CAAC,cAAc,GAAG,QAAQ,EAClC,MAAM,CAAC,SAAS,GAAG,CAAC,CACgB,CAAA"}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import * as Layer from "effect/Layer";
|
|
2
2
|
import * as Migrator from "effect/unstable/sql/Migrator";
|
|
3
3
|
/**
|
|
4
|
-
* @since
|
|
4
|
+
* @since 4.0.0
|
|
5
5
|
*/
|
|
6
6
|
export * from "effect/unstable/sql/Migrator";
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Runs SQL migrations for ClickHouse using the supplied migrator options and
|
|
9
|
+
* returns the applied migration IDs and names.
|
|
10
|
+
*
|
|
11
|
+
* @category constructors
|
|
12
|
+
* @since 4.0.0
|
|
10
13
|
*/
|
|
11
14
|
export const run = /*#__PURE__*/Migrator.make({});
|
|
12
15
|
/**
|
|
16
|
+
* Creates a layer that runs the configured ClickHouse migrations during layer
|
|
17
|
+
* construction and provides no services.
|
|
18
|
+
*
|
|
13
19
|
* @category layers
|
|
14
|
-
* @since
|
|
20
|
+
* @since 4.0.0
|
|
15
21
|
*/
|
|
16
22
|
export const layer = options => Layer.effectDiscard(run(options));
|
|
17
23
|
//# sourceMappingURL=ClickhouseMigrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClickhouseMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/ClickhouseMigrator.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClickhouseMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/ClickhouseMigrator.ts"],"sourcesContent":[null],"mappings":"AAYA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,8BAA8B;AAIxD;;;AAGA,cAAc,8BAA8B;AAE5C;;;;;;;AAOA,OAAO,MAAMC,GAAG,gBAMZD,QAAQ,CAACE,IAAI,CAAC,EAAE,CAAC;AAErB;;;;;;;AAOA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAKjCL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @since
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* @since
|
|
5
|
+
* @since 4.0.0
|
|
6
6
|
*/
|
|
7
7
|
export * as ClickhouseClient from "./ClickhouseClient.ts";
|
|
8
8
|
/**
|
|
9
|
-
* @since
|
|
9
|
+
* @since 4.0.0
|
|
10
10
|
*/
|
|
11
11
|
export * as ClickhouseMigrator from "./ClickhouseMigrator.ts";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @since
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
// @barrel: Auto-generated exports. Do not edit manually.
|
|
5
5
|
/**
|
|
6
|
-
* @since
|
|
6
|
+
* @since 4.0.0
|
|
7
7
|
*/
|
|
8
8
|
export * as ClickhouseClient from "./ClickhouseClient.js";
|
|
9
9
|
/**
|
|
10
|
-
* @since
|
|
10
|
+
* @since 4.0.0
|
|
11
11
|
*/
|
|
12
12
|
export * as ClickhouseMigrator from "./ClickhouseMigrator.js";
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/sql-clickhouse",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.81",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "A Clickhouse toolkit for Effect",
|
|
@@ -43,15 +43,15 @@
|
|
|
43
43
|
"provenance": true
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@effect/platform-node": "^4.0.0-beta.
|
|
47
|
-
"effect": "^4.0.0-beta.
|
|
46
|
+
"@effect/platform-node": "^4.0.0-beta.81",
|
|
47
|
+
"effect": "^4.0.0-beta.81"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"@effect/platform-node": "^4.0.0-beta.
|
|
51
|
-
"effect": "^4.0.0-beta.
|
|
50
|
+
"@effect/platform-node": "^4.0.0-beta.81",
|
|
51
|
+
"effect": "^4.0.0-beta.81"
|
|
52
52
|
},
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@clickhouse/client": "^1.
|
|
54
|
+
"@clickhouse/client": "^1.18.4"
|
|
55
55
|
},
|
|
56
56
|
"scripts": {
|
|
57
57
|
"codegen": "effect-utils codegen",
|
package/src/ClickhouseClient.ts
CHANGED
|
@@ -1,21 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse driver for Effect SQL, backed by `@clickhouse/client`.
|
|
3
|
+
*
|
|
4
|
+
* This module provides both the ClickHouse-specific {@link ClickhouseClient}
|
|
5
|
+
* service and the generic {@link Client.SqlClient} service. `make` creates a
|
|
6
|
+
* scoped client, checks the connection with `SELECT 1`, maps ClickHouse errors
|
|
7
|
+
* to `SqlError`, and aborts in-flight queries when interrupted. The
|
|
8
|
+
* ClickHouse-specific service adds typed parameters, command execution, insert
|
|
9
|
+
* queries, query id and settings helpers, a statement compiler, and direct or
|
|
10
|
+
* config-backed layers.
|
|
11
|
+
*
|
|
12
|
+
* @since 4.0.0
|
|
3
13
|
*/
|
|
4
14
|
import * as Clickhouse from "@clickhouse/client"
|
|
5
15
|
import * as NodeStream from "@effect/platform-node/NodeStream"
|
|
6
16
|
import * as Config from "effect/Config"
|
|
17
|
+
import * as Context from "effect/Context"
|
|
7
18
|
import * as Duration from "effect/Duration"
|
|
8
19
|
import * as Effect from "effect/Effect"
|
|
9
20
|
import * as Fiber from "effect/Fiber"
|
|
10
21
|
import { dual } from "effect/Function"
|
|
11
22
|
import * as Layer from "effect/Layer"
|
|
12
23
|
import type * as Scope from "effect/Scope"
|
|
13
|
-
import * as ServiceMap from "effect/ServiceMap"
|
|
14
24
|
import * as Stream from "effect/Stream"
|
|
15
25
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity"
|
|
16
26
|
import * as Client from "effect/unstable/sql/SqlClient"
|
|
17
27
|
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
18
|
-
import {
|
|
28
|
+
import {
|
|
29
|
+
AuthenticationError,
|
|
30
|
+
AuthorizationError,
|
|
31
|
+
ConnectionError,
|
|
32
|
+
SqlError,
|
|
33
|
+
SqlSyntaxError,
|
|
34
|
+
StatementTimeoutError,
|
|
35
|
+
UnknownError
|
|
36
|
+
} from "effect/unstable/sql/SqlError"
|
|
19
37
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
20
38
|
import * as Crypto from "node:crypto"
|
|
21
39
|
import type { Readable } from "node:stream"
|
|
@@ -23,21 +41,71 @@ import type { Readable } from "node:stream"
|
|
|
23
41
|
const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
24
42
|
const ATTR_DB_NAMESPACE = "db.namespace"
|
|
25
43
|
|
|
44
|
+
const clickhouseCodeFromCause = (cause: unknown): number | undefined => {
|
|
45
|
+
if (typeof cause !== "object" || cause === null || !("code" in cause)) {
|
|
46
|
+
return undefined
|
|
47
|
+
}
|
|
48
|
+
const code = cause.code
|
|
49
|
+
if (typeof code === "number") {
|
|
50
|
+
return code
|
|
51
|
+
}
|
|
52
|
+
if (typeof code === "string") {
|
|
53
|
+
const parsed = Number(code)
|
|
54
|
+
return Number.isNaN(parsed) ? undefined : parsed
|
|
55
|
+
}
|
|
56
|
+
return undefined
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const clickhouseSyntaxErrorCodes = new Set([36, 60, 62, 242])
|
|
60
|
+
|
|
61
|
+
const classifyError = (
|
|
62
|
+
cause: unknown,
|
|
63
|
+
message: string,
|
|
64
|
+
operation: string,
|
|
65
|
+
fallback: "connection" | "unknown" = "unknown"
|
|
66
|
+
) => {
|
|
67
|
+
const props = { cause, message, operation }
|
|
68
|
+
const code = clickhouseCodeFromCause(cause)
|
|
69
|
+
if (code !== undefined) {
|
|
70
|
+
if (code === 516) {
|
|
71
|
+
return new AuthenticationError(props)
|
|
72
|
+
}
|
|
73
|
+
if (code === 497) {
|
|
74
|
+
return new AuthorizationError(props)
|
|
75
|
+
}
|
|
76
|
+
if (clickhouseSyntaxErrorCodes.has(code)) {
|
|
77
|
+
return new SqlSyntaxError(props)
|
|
78
|
+
}
|
|
79
|
+
if (code === 159 || code === 469) {
|
|
80
|
+
return new StatementTimeoutError(props)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return fallback === "connection" ? new ConnectionError(props) : new UnknownError(props)
|
|
84
|
+
}
|
|
85
|
+
|
|
26
86
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
87
|
+
* Unique runtime identifier used to tag `ClickhouseClient` values.
|
|
88
|
+
*
|
|
89
|
+
* @category type IDs
|
|
90
|
+
* @since 4.0.0
|
|
29
91
|
*/
|
|
30
92
|
export const TypeId: TypeId = "~@effect/sql-clickhouse/ClickhouseClient"
|
|
31
93
|
|
|
32
94
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
95
|
+
* Type-level literal for the `ClickhouseClient` runtime identifier.
|
|
96
|
+
*
|
|
97
|
+
* @category type IDs
|
|
98
|
+
* @since 4.0.0
|
|
35
99
|
*/
|
|
36
100
|
export type TypeId = "~@effect/sql-clickhouse/ClickhouseClient"
|
|
37
101
|
|
|
38
102
|
/**
|
|
103
|
+
* ClickHouse-specific `SqlClient` extension with access to its configuration,
|
|
104
|
+
* typed parameter fragments, command-mode execution, insert queries, and
|
|
105
|
+
* per-effect query ID and ClickHouse settings.
|
|
106
|
+
*
|
|
39
107
|
* @category models
|
|
40
|
-
* @since
|
|
108
|
+
* @since 4.0.0
|
|
41
109
|
*/
|
|
42
110
|
export interface ClickhouseClient extends Client.SqlClient {
|
|
43
111
|
readonly [TypeId]: TypeId
|
|
@@ -65,14 +133,24 @@ export interface ClickhouseClient extends Client.SqlClient {
|
|
|
65
133
|
}
|
|
66
134
|
|
|
67
135
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
136
|
+
* Service tag for the active ClickHouse SQL client.
|
|
137
|
+
*
|
|
138
|
+
* **When to use**
|
|
139
|
+
*
|
|
140
|
+
* Use to access or provide a ClickHouse SQL client through the Effect context.
|
|
141
|
+
*
|
|
142
|
+
* @category services
|
|
143
|
+
* @since 4.0.0
|
|
70
144
|
*/
|
|
71
|
-
export const ClickhouseClient =
|
|
145
|
+
export const ClickhouseClient = Context.Service<ClickhouseClient>("@effect/sql-clickhouse/ClickhouseClient")
|
|
72
146
|
|
|
73
147
|
/**
|
|
148
|
+
* Configuration for creating a ClickHouse client, combining
|
|
149
|
+
* `@clickhouse/client` options with optional span attributes and query/result
|
|
150
|
+
* name transforms.
|
|
151
|
+
*
|
|
74
152
|
* @category constructors
|
|
75
|
-
* @since
|
|
153
|
+
* @since 4.0.0
|
|
76
154
|
*/
|
|
77
155
|
export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfigOptions {
|
|
78
156
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
@@ -81,8 +159,12 @@ export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfi
|
|
|
81
159
|
}
|
|
82
160
|
|
|
83
161
|
/**
|
|
162
|
+
* Creates a scoped `ClickhouseClient`, verifies connectivity with `SELECT 1`,
|
|
163
|
+
* closes the underlying client when the scope ends, maps ClickHouse failures
|
|
164
|
+
* to `SqlError`, and aborts plus kills in-flight queries when interrupted.
|
|
165
|
+
*
|
|
84
166
|
* @category constructors
|
|
85
|
-
* @since
|
|
167
|
+
* @since 4.0.0
|
|
86
168
|
*/
|
|
87
169
|
export const make = (
|
|
88
170
|
options: ClickhouseClientConfig
|
|
@@ -98,17 +180,21 @@ export const make = (
|
|
|
98
180
|
yield* Effect.acquireRelease(
|
|
99
181
|
Effect.tryPromise({
|
|
100
182
|
try: () => client.exec({ query: "SELECT 1" }),
|
|
101
|
-
catch: (cause) =>
|
|
183
|
+
catch: (cause) =>
|
|
184
|
+
new SqlError({ reason: classifyError(cause, "ClickhouseClient: Failed to connect", "connect", "connection") })
|
|
102
185
|
}),
|
|
103
186
|
() => Effect.promise(() => client.close())
|
|
104
187
|
).pipe(
|
|
105
188
|
Effect.timeoutOrElse({
|
|
106
189
|
duration: Duration.seconds(5),
|
|
107
|
-
|
|
190
|
+
orElse: () =>
|
|
108
191
|
Effect.fail(
|
|
109
192
|
new SqlError({
|
|
110
|
-
|
|
111
|
-
|
|
193
|
+
reason: new ConnectionError({
|
|
194
|
+
message: "ClickhouseClient: Connection timeout",
|
|
195
|
+
cause: new Error("connection timeout"),
|
|
196
|
+
operation: "connect"
|
|
197
|
+
})
|
|
112
198
|
})
|
|
113
199
|
)
|
|
114
200
|
})
|
|
@@ -140,7 +226,12 @@ export const make = (
|
|
|
140
226
|
clickhouse_settings: settings
|
|
141
227
|
}).then(
|
|
142
228
|
(result) => resume(Effect.succeed(result)),
|
|
143
|
-
(cause) =>
|
|
229
|
+
(cause) =>
|
|
230
|
+
resume(
|
|
231
|
+
Effect.fail(
|
|
232
|
+
new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
233
|
+
)
|
|
234
|
+
)
|
|
144
235
|
)
|
|
145
236
|
} else {
|
|
146
237
|
this.conn.query({
|
|
@@ -152,7 +243,12 @@ export const make = (
|
|
|
152
243
|
format
|
|
153
244
|
}).then(
|
|
154
245
|
(result) => resume(Effect.succeed(result)),
|
|
155
|
-
(cause) =>
|
|
246
|
+
(cause) =>
|
|
247
|
+
resume(
|
|
248
|
+
Effect.fail(
|
|
249
|
+
new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
250
|
+
)
|
|
251
|
+
)
|
|
156
252
|
)
|
|
157
253
|
}
|
|
158
254
|
return Effect.suspend(() => {
|
|
@@ -209,7 +305,7 @@ export const make = (
|
|
|
209
305
|
}
|
|
210
306
|
return NodeStream.fromReadable<ReadonlyArray<Clickhouse.Row<any, "JSONEachRow">>, SqlError>({
|
|
211
307
|
evaluate: () => result.stream() as any,
|
|
212
|
-
onError: (cause) => new SqlError({ cause,
|
|
308
|
+
onError: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute stream", "stream") })
|
|
213
309
|
})
|
|
214
310
|
}),
|
|
215
311
|
Stream.unwrap,
|
|
@@ -223,7 +319,7 @@ export const make = (
|
|
|
223
319
|
}
|
|
224
320
|
return Effect.tryPromise({
|
|
225
321
|
try: () => Promise.all(promises).then((rows) => transformRows ? transformRows(rows) : rows),
|
|
226
|
-
catch: (cause) => new SqlError({ cause,
|
|
322
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to parse row", "parseRow") })
|
|
227
323
|
})
|
|
228
324
|
}),
|
|
229
325
|
Stream.flattenIterable
|
|
@@ -272,7 +368,8 @@ export const make = (
|
|
|
272
368
|
clickhouse_settings: settings
|
|
273
369
|
}).then(
|
|
274
370
|
(result) => resume(Effect.succeed(result)),
|
|
275
|
-
(cause) =>
|
|
371
|
+
(cause) =>
|
|
372
|
+
resume(Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to insert data", "insert") })))
|
|
276
373
|
)
|
|
277
374
|
return Effect.suspend(() => {
|
|
278
375
|
controller.abort()
|
|
@@ -280,25 +377,29 @@ export const make = (
|
|
|
280
377
|
})
|
|
281
378
|
})
|
|
282
379
|
},
|
|
283
|
-
withQueryId: dual(
|
|
284
|
-
|
|
380
|
+
withQueryId: dual(
|
|
381
|
+
2,
|
|
382
|
+
<A, E, R>(effect: Effect.Effect<A, E, R>, queryId: string) => Effect.provideService(effect, QueryId, queryId)
|
|
383
|
+
),
|
|
285
384
|
withClickhouseSettings: dual(
|
|
286
385
|
2,
|
|
287
386
|
<A, E, R>(
|
|
288
387
|
effect: Effect.Effect<A, E, R>,
|
|
289
388
|
settings: NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>
|
|
290
|
-
) =>
|
|
291
|
-
Effect.provideService(effect, ClickhouseSettings, settings)
|
|
389
|
+
) => Effect.provideService(effect, ClickhouseSettings, settings)
|
|
292
390
|
)
|
|
293
391
|
}
|
|
294
392
|
)
|
|
295
393
|
})
|
|
296
394
|
|
|
297
395
|
/**
|
|
298
|
-
*
|
|
299
|
-
*
|
|
396
|
+
* Fiber reference read by the low-level ClickHouse connection to choose query
|
|
397
|
+
* or command execution for statements; defaults to `query`.
|
|
398
|
+
*
|
|
399
|
+
* @category references
|
|
400
|
+
* @since 4.0.0
|
|
300
401
|
*/
|
|
301
|
-
export const ClientMethod =
|
|
402
|
+
export const ClientMethod = Context.Reference<"query" | "command" | "insert">(
|
|
302
403
|
"@effect/sql-clickhouse/ClickhouseClient/ClientMethod",
|
|
303
404
|
{
|
|
304
405
|
defaultValue: () => "query"
|
|
@@ -306,55 +407,67 @@ export const ClientMethod = ServiceMap.Reference<"query" | "command" | "insert">
|
|
|
306
407
|
)
|
|
307
408
|
|
|
308
409
|
/**
|
|
309
|
-
*
|
|
310
|
-
*
|
|
410
|
+
* Fiber reference for the ClickHouse `query_id` applied to queries and
|
|
411
|
+
* inserts; a random UUID is generated when no query ID is set.
|
|
412
|
+
*
|
|
413
|
+
* @category references
|
|
414
|
+
* @since 4.0.0
|
|
311
415
|
*/
|
|
312
|
-
export const QueryId =
|
|
416
|
+
export const QueryId = Context.Reference<string | undefined>(
|
|
313
417
|
"@effect/sql-clickhouse/ClickhouseClient/QueryId",
|
|
314
418
|
{ defaultValue: () => undefined }
|
|
315
419
|
)
|
|
316
420
|
|
|
317
421
|
/**
|
|
318
|
-
*
|
|
319
|
-
*
|
|
422
|
+
* Fiber reference containing ClickHouse settings to attach to queries,
|
|
423
|
+
* commands, and inserts.
|
|
424
|
+
*
|
|
425
|
+
* @category references
|
|
426
|
+
* @since 4.0.0
|
|
320
427
|
*/
|
|
321
|
-
export const ClickhouseSettings:
|
|
428
|
+
export const ClickhouseSettings: Context.Reference<
|
|
322
429
|
NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>
|
|
323
|
-
> =
|
|
430
|
+
> = Context.Reference("@effect/sql-clickhouse/ClickhouseClient/ClickhouseSettings", {
|
|
324
431
|
defaultValue: () => ({})
|
|
325
432
|
})
|
|
326
433
|
|
|
327
434
|
/**
|
|
435
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
436
|
+
* `Config`-backed ClickHouse client configuration.
|
|
437
|
+
*
|
|
328
438
|
* @category layers
|
|
329
|
-
* @since
|
|
439
|
+
* @since 4.0.0
|
|
330
440
|
*/
|
|
331
441
|
export const layerConfig: (
|
|
332
442
|
config: Config.Wrap<ClickhouseClientConfig>
|
|
333
443
|
) => Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError> = (
|
|
334
444
|
config: Config.Wrap<ClickhouseClientConfig>
|
|
335
445
|
): Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError> =>
|
|
336
|
-
Layer.
|
|
337
|
-
Config.unwrap(config).
|
|
446
|
+
Layer.effectContext(
|
|
447
|
+
Config.unwrap(config).pipe(
|
|
338
448
|
Effect.flatMap(make),
|
|
339
449
|
Effect.map((client) =>
|
|
340
|
-
|
|
341
|
-
|
|
450
|
+
Context.make(ClickhouseClient, client).pipe(
|
|
451
|
+
Context.add(Client.SqlClient, client)
|
|
342
452
|
)
|
|
343
453
|
)
|
|
344
454
|
)
|
|
345
455
|
).pipe(Layer.provide(Reactivity.layer))
|
|
346
456
|
|
|
347
457
|
/**
|
|
458
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
459
|
+
* ClickHouse client configuration.
|
|
460
|
+
*
|
|
348
461
|
* @category layers
|
|
349
|
-
* @since
|
|
462
|
+
* @since 4.0.0
|
|
350
463
|
*/
|
|
351
464
|
export const layer = (
|
|
352
465
|
config: ClickhouseClientConfig
|
|
353
466
|
): Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError> =>
|
|
354
|
-
Layer.
|
|
467
|
+
Layer.effectContext(
|
|
355
468
|
Effect.map(make(config), (client) =>
|
|
356
|
-
|
|
357
|
-
|
|
469
|
+
Context.make(ClickhouseClient, client).pipe(
|
|
470
|
+
Context.add(Client.SqlClient, client)
|
|
358
471
|
))
|
|
359
472
|
).pipe(Layer.provide(Reactivity.layer))
|
|
360
473
|
|
|
@@ -384,8 +497,12 @@ const typeFromUnknown = (value: unknown): string => {
|
|
|
384
497
|
}
|
|
385
498
|
|
|
386
499
|
/**
|
|
500
|
+
* Creates the SQL statement compiler for ClickHouse, emitting typed
|
|
501
|
+
* `{pN: Type}` placeholders and escaping identifiers with an optional query
|
|
502
|
+
* name transform.
|
|
503
|
+
*
|
|
387
504
|
* @category compiler
|
|
388
|
-
* @since
|
|
505
|
+
* @since 4.0.0
|
|
389
506
|
*/
|
|
390
507
|
export const makeCompiler = (transform?: (_: string) => string) =>
|
|
391
508
|
Statement.makeCompiler<ClickhouseCustom>({
|
|
@@ -411,14 +528,17 @@ export const makeCompiler = (transform?: (_: string) => string) =>
|
|
|
411
528
|
const escape = Statement.defaultEscape("\"")
|
|
412
529
|
|
|
413
530
|
/**
|
|
531
|
+
* Custom SQL fragment type used for ClickHouse typed parameters created by
|
|
532
|
+
* `ClickhouseClient.param`.
|
|
533
|
+
*
|
|
414
534
|
* @category custom types
|
|
415
|
-
* @since
|
|
535
|
+
* @since 4.0.0
|
|
416
536
|
*/
|
|
417
537
|
export type ClickhouseCustom = ClickhouseParam
|
|
418
538
|
|
|
419
539
|
/**
|
|
420
540
|
* @category custom types
|
|
421
|
-
* @since
|
|
541
|
+
* @since 4.0.0
|
|
422
542
|
*/
|
|
423
543
|
interface ClickhouseParam extends Statement.Custom<"ClickhouseParam", string, unknown> {}
|
|
424
544
|
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse adapter for the shared Effect SQL migration runner.
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports the common `Migrator` loaders and error types, then
|
|
5
|
+
* provides `run` and `layer` helpers that apply ordered migrations through the
|
|
6
|
+
* current ClickHouse `SqlClient`. `run` returns the applied migration IDs and
|
|
7
|
+
* names, while `layer` runs the migrations during layer construction and
|
|
8
|
+
* provides no services.
|
|
9
|
+
*
|
|
10
|
+
* @since 4.0.0
|
|
3
11
|
*/
|
|
4
12
|
import type * as Effect from "effect/Effect"
|
|
5
13
|
import * as Layer from "effect/Layer"
|
|
@@ -8,13 +16,16 @@ import type * as Client from "effect/unstable/sql/SqlClient"
|
|
|
8
16
|
import type { SqlError } from "effect/unstable/sql/SqlError"
|
|
9
17
|
|
|
10
18
|
/**
|
|
11
|
-
* @since
|
|
19
|
+
* @since 4.0.0
|
|
12
20
|
*/
|
|
13
21
|
export * from "effect/unstable/sql/Migrator"
|
|
14
22
|
|
|
15
23
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
24
|
+
* Runs SQL migrations for ClickHouse using the supplied migrator options and
|
|
25
|
+
* returns the applied migration IDs and names.
|
|
26
|
+
*
|
|
27
|
+
* @category constructors
|
|
28
|
+
* @since 4.0.0
|
|
18
29
|
*/
|
|
19
30
|
export const run: <R2 = never>(
|
|
20
31
|
{ loader, schemaDirectory, table }: Migrator.MigratorOptions<R2>
|
|
@@ -25,8 +36,11 @@ export const run: <R2 = never>(
|
|
|
25
36
|
> = Migrator.make({})
|
|
26
37
|
|
|
27
38
|
/**
|
|
39
|
+
* Creates a layer that runs the configured ClickHouse migrations during layer
|
|
40
|
+
* construction and provides no services.
|
|
41
|
+
*
|
|
28
42
|
* @category layers
|
|
29
|
-
* @since
|
|
43
|
+
* @since 4.0.0
|
|
30
44
|
*/
|
|
31
45
|
export const layer = <R>(
|
|
32
46
|
options: Migrator.MigratorOptions<R>
|
package/src/index.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @since
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
// @barrel: Auto-generated exports. Do not edit manually.
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* @since
|
|
8
|
+
* @since 4.0.0
|
|
9
9
|
*/
|
|
10
10
|
export * as ClickhouseClient from "./ClickhouseClient.ts"
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* @since
|
|
13
|
+
* @since 4.0.0
|
|
14
14
|
*/
|
|
15
15
|
export * as ClickhouseMigrator from "./ClickhouseMigrator.ts"
|