@effect/sql-clickhouse 4.0.0-beta.7 → 4.0.0-beta.71
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 +101 -25
- package/dist/ClickhouseClient.d.ts.map +1 -1
- package/dist/ClickhouseClient.js +135 -37
- package/dist/ClickhouseClient.js.map +1 -1
- package/dist/ClickhouseMigrator.d.ts +40 -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 +189 -47
- package/src/ClickhouseMigrator.ts +40 -5
- package/src/index.ts +3 -3
|
@@ -1,30 +1,74 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse driver for Effect SQL, backed by `@clickhouse/client`.
|
|
3
|
+
*
|
|
4
|
+
* Use this module to provide both the ClickHouse-specific
|
|
5
|
+
* {@link ClickhouseClient} service and the generic {@link Client.SqlClient}
|
|
6
|
+
* service. The client is intended for analytical application queries,
|
|
7
|
+
* migrations, background jobs, bulk inserts, and streaming reads that need
|
|
8
|
+
* Effect SQL query compilation, scoped lifecycle management, interruption, and
|
|
9
|
+
* consistent `SqlError` classification for ClickHouse failures.
|
|
10
|
+
*
|
|
11
|
+
* **Mental model**
|
|
12
|
+
*
|
|
13
|
+
* A client owns one scoped `@clickhouse/client` instance and verifies startup
|
|
14
|
+
* with `SELECT 1`. Regular queries use the ClickHouse HTTP `query` API,
|
|
15
|
+
* command-mode effects use `command`, and inserts use `insert`. Interrupting an
|
|
16
|
+
* operation aborts the HTTP request and attempts to kill the generated or
|
|
17
|
+
* supplied `query_id`.
|
|
18
|
+
*
|
|
19
|
+
* **Common tasks**
|
|
20
|
+
*
|
|
21
|
+
* Use {@link layer} with a concrete `ClickhouseClientConfig`,
|
|
22
|
+
* {@link layerConfig} when settings should come from Effect `Config`, and
|
|
23
|
+
* {@link make} when a scoped client value is needed directly. Use
|
|
24
|
+
* `client.param` when a placeholder needs an explicit ClickHouse type,
|
|
25
|
+
* `client.asCommand` for statements that should run through `command`,
|
|
26
|
+
* `client.insertQuery` for bulk inserts, and `client.withClickhouseSettings`
|
|
27
|
+
* or `client.withQueryId` for per-effect request options.
|
|
28
|
+
*
|
|
29
|
+
* **Gotchas**
|
|
30
|
+
*
|
|
31
|
+
* Regular queries read JSON result sets, `executeValues` requests
|
|
32
|
+
* `JSONCompact`, streams request `JSONEachRow`, and `insertQuery` defaults
|
|
33
|
+
* inserts to `JSONEachRow`. The statement compiler emits typed ClickHouse
|
|
34
|
+
* placeholders such as `{p1: Type}`; use `param` when the inferred type is too
|
|
35
|
+
* broad. ClickHouse-specific clauses such as engines, `SETTINGS`, `FORMAT`, or
|
|
36
|
+
* cluster directives must be written explicitly in SQL.
|
|
37
|
+
*
|
|
38
|
+
* @since 4.0.0
|
|
3
39
|
*/
|
|
4
40
|
import * as Clickhouse from "@clickhouse/client";
|
|
5
41
|
import * as Config from "effect/Config";
|
|
42
|
+
import * as Context from "effect/Context";
|
|
6
43
|
import * as Effect from "effect/Effect";
|
|
7
44
|
import * as Layer from "effect/Layer";
|
|
8
45
|
import type * as Scope from "effect/Scope";
|
|
9
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
10
46
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
11
47
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
12
48
|
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
13
49
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
14
50
|
import type { Readable } from "node:stream";
|
|
15
51
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
52
|
+
* Unique runtime identifier used to tag `ClickhouseClient` values.
|
|
53
|
+
*
|
|
54
|
+
* @category type IDs
|
|
55
|
+
* @since 4.0.0
|
|
18
56
|
*/
|
|
19
57
|
export declare const TypeId: TypeId;
|
|
20
58
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
59
|
+
* Type-level literal for the `ClickhouseClient` runtime identifier.
|
|
60
|
+
*
|
|
61
|
+
* @category type IDs
|
|
62
|
+
* @since 4.0.0
|
|
23
63
|
*/
|
|
24
64
|
export type TypeId = "~@effect/sql-clickhouse/ClickhouseClient";
|
|
25
65
|
/**
|
|
66
|
+
* ClickHouse-specific `SqlClient` extension with access to its configuration,
|
|
67
|
+
* typed parameter fragments, command-mode execution, insert queries, and
|
|
68
|
+
* per-effect query ID and ClickHouse settings.
|
|
69
|
+
*
|
|
26
70
|
* @category models
|
|
27
|
-
* @since
|
|
71
|
+
* @since 4.0.0
|
|
28
72
|
*/
|
|
29
73
|
export interface ClickhouseClient extends Client.SqlClient {
|
|
30
74
|
readonly [TypeId]: TypeId;
|
|
@@ -46,13 +90,19 @@ export interface ClickhouseClient extends Client.SqlClient {
|
|
|
46
90
|
};
|
|
47
91
|
}
|
|
48
92
|
/**
|
|
93
|
+
* Context service tag for accessing the active `ClickhouseClient`.
|
|
94
|
+
*
|
|
49
95
|
* @category tags
|
|
50
|
-
* @since
|
|
96
|
+
* @since 4.0.0
|
|
51
97
|
*/
|
|
52
|
-
export declare const ClickhouseClient:
|
|
98
|
+
export declare const ClickhouseClient: Context.Service<ClickhouseClient, ClickhouseClient>;
|
|
53
99
|
/**
|
|
100
|
+
* Configuration for creating a ClickHouse client, combining
|
|
101
|
+
* `@clickhouse/client` options with optional span attributes and query/result
|
|
102
|
+
* name transforms.
|
|
103
|
+
*
|
|
54
104
|
* @category constructors
|
|
55
|
-
* @since
|
|
105
|
+
* @since 4.0.0
|
|
56
106
|
*/
|
|
57
107
|
export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfigOptions {
|
|
58
108
|
readonly spanAttributes?: Record<string, unknown> | undefined;
|
|
@@ -60,48 +110,74 @@ export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfi
|
|
|
60
110
|
readonly transformQueryNames?: ((str: string) => string) | undefined;
|
|
61
111
|
}
|
|
62
112
|
/**
|
|
113
|
+
* Creates a scoped `ClickhouseClient`, verifies connectivity with `SELECT 1`,
|
|
114
|
+
* closes the underlying client when the scope ends, maps ClickHouse failures
|
|
115
|
+
* to `SqlError`, and aborts plus kills in-flight queries when interrupted.
|
|
116
|
+
*
|
|
63
117
|
* @category constructors
|
|
64
|
-
* @since
|
|
118
|
+
* @since 4.0.0
|
|
65
119
|
*/
|
|
66
120
|
export declare const make: (options: ClickhouseClientConfig) => Effect.Effect<ClickhouseClient, SqlError, Scope.Scope | Reactivity.Reactivity>;
|
|
67
121
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
122
|
+
* Fiber reference read by the low-level ClickHouse connection to choose query
|
|
123
|
+
* or command execution for statements; defaults to `query`.
|
|
124
|
+
*
|
|
125
|
+
* @category references
|
|
126
|
+
* @since 4.0.0
|
|
70
127
|
*/
|
|
71
|
-
export declare const ClientMethod:
|
|
128
|
+
export declare const ClientMethod: Context.Reference<"query" | "command" | "insert">;
|
|
72
129
|
/**
|
|
73
|
-
*
|
|
74
|
-
*
|
|
130
|
+
* Fiber reference for the ClickHouse `query_id` applied to queries and
|
|
131
|
+
* inserts; a random UUID is generated when no query ID is set.
|
|
132
|
+
*
|
|
133
|
+
* @category references
|
|
134
|
+
* @since 4.0.0
|
|
75
135
|
*/
|
|
76
|
-
export declare const QueryId:
|
|
136
|
+
export declare const QueryId: Context.Reference<string | undefined>;
|
|
77
137
|
/**
|
|
78
|
-
*
|
|
79
|
-
*
|
|
138
|
+
* Fiber reference containing ClickHouse settings to attach to queries,
|
|
139
|
+
* commands, and inserts.
|
|
140
|
+
*
|
|
141
|
+
* @category references
|
|
142
|
+
* @since 4.0.0
|
|
80
143
|
*/
|
|
81
|
-
export declare const ClickhouseSettings:
|
|
144
|
+
export declare const ClickhouseSettings: Context.Reference<NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>>;
|
|
82
145
|
/**
|
|
146
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
147
|
+
* `Config`-backed ClickHouse client configuration.
|
|
148
|
+
*
|
|
83
149
|
* @category layers
|
|
84
|
-
* @since
|
|
150
|
+
* @since 4.0.0
|
|
85
151
|
*/
|
|
86
152
|
export declare const layerConfig: (config: Config.Wrap<ClickhouseClientConfig>) => Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError>;
|
|
87
153
|
/**
|
|
154
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
155
|
+
* ClickHouse client configuration.
|
|
156
|
+
*
|
|
88
157
|
* @category layers
|
|
89
|
-
* @since
|
|
158
|
+
* @since 4.0.0
|
|
90
159
|
*/
|
|
91
160
|
export declare const layer: (config: ClickhouseClientConfig) => Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError>;
|
|
92
161
|
/**
|
|
162
|
+
* Creates the SQL statement compiler for ClickHouse, emitting typed
|
|
163
|
+
* `{pN: Type}` placeholders and escaping identifiers with an optional query
|
|
164
|
+
* name transform.
|
|
165
|
+
*
|
|
93
166
|
* @category compiler
|
|
94
|
-
* @since
|
|
167
|
+
* @since 4.0.0
|
|
95
168
|
*/
|
|
96
169
|
export declare const makeCompiler: (transform?: (_: string) => string) => Statement.Compiler;
|
|
97
170
|
/**
|
|
171
|
+
* Custom SQL fragment type used for ClickHouse typed parameters created by
|
|
172
|
+
* `ClickhouseClient.param`.
|
|
173
|
+
*
|
|
98
174
|
* @category custom types
|
|
99
|
-
* @since
|
|
175
|
+
* @since 4.0.0
|
|
100
176
|
*/
|
|
101
177
|
export type ClickhouseCustom = ClickhouseParam;
|
|
102
178
|
/**
|
|
103
179
|
* @category custom types
|
|
104
|
-
* @since
|
|
180
|
+
* @since 4.0.0
|
|
105
181
|
*/
|
|
106
182
|
interface ClickhouseParam extends Statement.Custom<"ClickhouseParam", string, unknown> {
|
|
107
183
|
}
|
|
@@ -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,118 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse driver for Effect SQL, backed by `@clickhouse/client`.
|
|
3
|
+
*
|
|
4
|
+
* Use this module to provide both the ClickHouse-specific
|
|
5
|
+
* {@link ClickhouseClient} service and the generic {@link Client.SqlClient}
|
|
6
|
+
* service. The client is intended for analytical application queries,
|
|
7
|
+
* migrations, background jobs, bulk inserts, and streaming reads that need
|
|
8
|
+
* Effect SQL query compilation, scoped lifecycle management, interruption, and
|
|
9
|
+
* consistent `SqlError` classification for ClickHouse failures.
|
|
10
|
+
*
|
|
11
|
+
* **Mental model**
|
|
12
|
+
*
|
|
13
|
+
* A client owns one scoped `@clickhouse/client` instance and verifies startup
|
|
14
|
+
* with `SELECT 1`. Regular queries use the ClickHouse HTTP `query` API,
|
|
15
|
+
* command-mode effects use `command`, and inserts use `insert`. Interrupting an
|
|
16
|
+
* operation aborts the HTTP request and attempts to kill the generated or
|
|
17
|
+
* supplied `query_id`.
|
|
18
|
+
*
|
|
19
|
+
* **Common tasks**
|
|
20
|
+
*
|
|
21
|
+
* Use {@link layer} with a concrete `ClickhouseClientConfig`,
|
|
22
|
+
* {@link layerConfig} when settings should come from Effect `Config`, and
|
|
23
|
+
* {@link make} when a scoped client value is needed directly. Use
|
|
24
|
+
* `client.param` when a placeholder needs an explicit ClickHouse type,
|
|
25
|
+
* `client.asCommand` for statements that should run through `command`,
|
|
26
|
+
* `client.insertQuery` for bulk inserts, and `client.withClickhouseSettings`
|
|
27
|
+
* or `client.withQueryId` for per-effect request options.
|
|
28
|
+
*
|
|
29
|
+
* **Gotchas**
|
|
30
|
+
*
|
|
31
|
+
* Regular queries read JSON result sets, `executeValues` requests
|
|
32
|
+
* `JSONCompact`, streams request `JSONEachRow`, and `insertQuery` defaults
|
|
33
|
+
* inserts to `JSONEachRow`. The statement compiler emits typed ClickHouse
|
|
34
|
+
* placeholders such as `{p1: Type}`; use `param` when the inferred type is too
|
|
35
|
+
* broad. ClickHouse-specific clauses such as engines, `SETTINGS`, `FORMAT`, or
|
|
36
|
+
* cluster directives must be written explicitly in SQL.
|
|
37
|
+
*
|
|
38
|
+
* @since 4.0.0
|
|
3
39
|
*/
|
|
4
40
|
import * as Clickhouse from "@clickhouse/client";
|
|
5
41
|
import * as NodeStream from "@effect/platform-node/NodeStream";
|
|
6
42
|
import * as Config from "effect/Config";
|
|
43
|
+
import * as Context from "effect/Context";
|
|
7
44
|
import * as Duration from "effect/Duration";
|
|
8
45
|
import * as Effect from "effect/Effect";
|
|
9
46
|
import * as Fiber from "effect/Fiber";
|
|
10
47
|
import { dual } from "effect/Function";
|
|
11
48
|
import * as Layer from "effect/Layer";
|
|
12
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
13
49
|
import * as Stream from "effect/Stream";
|
|
14
50
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
15
51
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
16
|
-
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
52
|
+
import { AuthenticationError, AuthorizationError, ConnectionError, SqlError, SqlSyntaxError, StatementTimeoutError, UnknownError } from "effect/unstable/sql/SqlError";
|
|
17
53
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
18
54
|
import * as Crypto from "node:crypto";
|
|
19
55
|
const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
20
56
|
const ATTR_DB_NAMESPACE = "db.namespace";
|
|
57
|
+
const clickhouseCodeFromCause = cause => {
|
|
58
|
+
if (typeof cause !== "object" || cause === null || !("code" in cause)) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const code = cause.code;
|
|
62
|
+
if (typeof code === "number") {
|
|
63
|
+
return code;
|
|
64
|
+
}
|
|
65
|
+
if (typeof code === "string") {
|
|
66
|
+
const parsed = Number(code);
|
|
67
|
+
return Number.isNaN(parsed) ? undefined : parsed;
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
};
|
|
71
|
+
const clickhouseSyntaxErrorCodes = /*#__PURE__*/new Set([36, 60, 62, 242]);
|
|
72
|
+
const classifyError = (cause, message, operation, fallback = "unknown") => {
|
|
73
|
+
const props = {
|
|
74
|
+
cause,
|
|
75
|
+
message,
|
|
76
|
+
operation
|
|
77
|
+
};
|
|
78
|
+
const code = clickhouseCodeFromCause(cause);
|
|
79
|
+
if (code !== undefined) {
|
|
80
|
+
if (code === 516) {
|
|
81
|
+
return new AuthenticationError(props);
|
|
82
|
+
}
|
|
83
|
+
if (code === 497) {
|
|
84
|
+
return new AuthorizationError(props);
|
|
85
|
+
}
|
|
86
|
+
if (clickhouseSyntaxErrorCodes.has(code)) {
|
|
87
|
+
return new SqlSyntaxError(props);
|
|
88
|
+
}
|
|
89
|
+
if (code === 159 || code === 469) {
|
|
90
|
+
return new StatementTimeoutError(props);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return fallback === "connection" ? new ConnectionError(props) : new UnknownError(props);
|
|
94
|
+
};
|
|
21
95
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
96
|
+
* Unique runtime identifier used to tag `ClickhouseClient` values.
|
|
97
|
+
*
|
|
98
|
+
* @category type IDs
|
|
99
|
+
* @since 4.0.0
|
|
24
100
|
*/
|
|
25
101
|
export const TypeId = "~@effect/sql-clickhouse/ClickhouseClient";
|
|
26
102
|
/**
|
|
103
|
+
* Context service tag for accessing the active `ClickhouseClient`.
|
|
104
|
+
*
|
|
27
105
|
* @category tags
|
|
28
|
-
* @since
|
|
106
|
+
* @since 4.0.0
|
|
29
107
|
*/
|
|
30
|
-
export const ClickhouseClient = /*#__PURE__*/
|
|
108
|
+
export const ClickhouseClient = /*#__PURE__*/Context.Service("@effect/sql-clickhouse/ClickhouseClient");
|
|
31
109
|
/**
|
|
110
|
+
* Creates a scoped `ClickhouseClient`, verifies connectivity with `SELECT 1`,
|
|
111
|
+
* closes the underlying client when the scope ends, maps ClickHouse failures
|
|
112
|
+
* to `SqlError`, and aborts plus kills in-flight queries when interrupted.
|
|
113
|
+
*
|
|
32
114
|
* @category constructors
|
|
33
|
-
* @since
|
|
115
|
+
* @since 4.0.0
|
|
34
116
|
*/
|
|
35
117
|
export const make = options => Effect.gen(function* () {
|
|
36
118
|
const compiler = makeCompiler(options.transformQueryNames);
|
|
@@ -41,14 +123,16 @@ export const make = options => Effect.gen(function* () {
|
|
|
41
123
|
query: "SELECT 1"
|
|
42
124
|
}),
|
|
43
125
|
catch: cause => new SqlError({
|
|
44
|
-
cause,
|
|
45
|
-
message: "ClickhouseClient: Failed to connect"
|
|
126
|
+
reason: classifyError(cause, "ClickhouseClient: Failed to connect", "connect", "connection")
|
|
46
127
|
})
|
|
47
128
|
}), () => Effect.promise(() => client.close())).pipe(Effect.timeoutOrElse({
|
|
48
129
|
duration: Duration.seconds(5),
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
130
|
+
orElse: () => Effect.fail(new SqlError({
|
|
131
|
+
reason: new ConnectionError({
|
|
132
|
+
message: "ClickhouseClient: Connection timeout",
|
|
133
|
+
cause: new Error("connection timeout"),
|
|
134
|
+
operation: "connect"
|
|
135
|
+
})
|
|
52
136
|
}))
|
|
53
137
|
}));
|
|
54
138
|
class ConnectionImpl {
|
|
@@ -75,8 +159,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
75
159
|
query_id: queryId,
|
|
76
160
|
clickhouse_settings: settings
|
|
77
161
|
}).then(result => resume(Effect.succeed(result)), cause => resume(Effect.fail(new SqlError({
|
|
78
|
-
cause,
|
|
79
|
-
message: "Failed to execute statement"
|
|
162
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
80
163
|
}))));
|
|
81
164
|
} else {
|
|
82
165
|
this.conn.query({
|
|
@@ -87,8 +170,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
87
170
|
clickhouse_settings: settings,
|
|
88
171
|
format
|
|
89
172
|
}).then(result => resume(Effect.succeed(result)), cause => resume(Effect.fail(new SqlError({
|
|
90
|
-
cause,
|
|
91
|
-
message: "Failed to execute statement"
|
|
173
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
92
174
|
}))));
|
|
93
175
|
}
|
|
94
176
|
return Effect.suspend(() => {
|
|
@@ -128,8 +210,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
128
210
|
return NodeStream.fromReadable({
|
|
129
211
|
evaluate: () => result.stream(),
|
|
130
212
|
onError: cause => new SqlError({
|
|
131
|
-
cause,
|
|
132
|
-
message: "Failed to execute stream"
|
|
213
|
+
reason: classifyError(cause, "Failed to execute stream", "stream")
|
|
133
214
|
})
|
|
134
215
|
});
|
|
135
216
|
}), Stream.unwrap, Stream.chunks, Stream.mapEffect(chunk => {
|
|
@@ -142,8 +223,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
142
223
|
return Effect.tryPromise({
|
|
143
224
|
try: () => Promise.all(promises).then(rows => transformRows ? transformRows(rows) : rows),
|
|
144
225
|
catch: cause => new SqlError({
|
|
145
|
-
cause,
|
|
146
|
-
message: "Failed to parse row"
|
|
226
|
+
reason: classifyError(cause, "Failed to parse row", "parseRow")
|
|
147
227
|
})
|
|
148
228
|
});
|
|
149
229
|
}), Stream.flattenIterable);
|
|
@@ -178,8 +258,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
178
258
|
query_id: queryId,
|
|
179
259
|
clickhouse_settings: settings
|
|
180
260
|
}).then(result => resume(Effect.succeed(result)), cause => resume(Effect.fail(new SqlError({
|
|
181
|
-
cause,
|
|
182
|
-
message: "Failed to insert data"
|
|
261
|
+
reason: classifyError(cause, "Failed to insert data", "insert")
|
|
183
262
|
}))));
|
|
184
263
|
return Effect.suspend(() => {
|
|
185
264
|
controller.abort();
|
|
@@ -194,36 +273,51 @@ export const make = options => Effect.gen(function* () {
|
|
|
194
273
|
});
|
|
195
274
|
});
|
|
196
275
|
/**
|
|
197
|
-
*
|
|
198
|
-
*
|
|
276
|
+
* Fiber reference read by the low-level ClickHouse connection to choose query
|
|
277
|
+
* or command execution for statements; defaults to `query`.
|
|
278
|
+
*
|
|
279
|
+
* @category references
|
|
280
|
+
* @since 4.0.0
|
|
199
281
|
*/
|
|
200
|
-
export const ClientMethod = /*#__PURE__*/
|
|
282
|
+
export const ClientMethod = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/ClientMethod", {
|
|
201
283
|
defaultValue: () => "query"
|
|
202
284
|
});
|
|
203
285
|
/**
|
|
204
|
-
*
|
|
205
|
-
*
|
|
286
|
+
* Fiber reference for the ClickHouse `query_id` applied to queries and
|
|
287
|
+
* inserts; a random UUID is generated when no query ID is set.
|
|
288
|
+
*
|
|
289
|
+
* @category references
|
|
290
|
+
* @since 4.0.0
|
|
206
291
|
*/
|
|
207
|
-
export const QueryId = /*#__PURE__*/
|
|
292
|
+
export const QueryId = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/QueryId", {
|
|
208
293
|
defaultValue: () => undefined
|
|
209
294
|
});
|
|
210
295
|
/**
|
|
211
|
-
*
|
|
212
|
-
*
|
|
296
|
+
* Fiber reference containing ClickHouse settings to attach to queries,
|
|
297
|
+
* commands, and inserts.
|
|
298
|
+
*
|
|
299
|
+
* @category references
|
|
300
|
+
* @since 4.0.0
|
|
213
301
|
*/
|
|
214
|
-
export const ClickhouseSettings = /*#__PURE__*/
|
|
302
|
+
export const ClickhouseSettings = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/ClickhouseSettings", {
|
|
215
303
|
defaultValue: () => ({})
|
|
216
304
|
});
|
|
217
305
|
/**
|
|
306
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
307
|
+
* `Config`-backed ClickHouse client configuration.
|
|
308
|
+
*
|
|
218
309
|
* @category layers
|
|
219
|
-
* @since
|
|
310
|
+
* @since 4.0.0
|
|
220
311
|
*/
|
|
221
|
-
export const layerConfig = config => Layer.
|
|
312
|
+
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
313
|
/**
|
|
314
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
315
|
+
* ClickHouse client configuration.
|
|
316
|
+
*
|
|
223
317
|
* @category layers
|
|
224
|
-
* @since
|
|
318
|
+
* @since 4.0.0
|
|
225
319
|
*/
|
|
226
|
-
export const layer = config => Layer.
|
|
320
|
+
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
321
|
const typeFromUnknown = value => {
|
|
228
322
|
if (Statement.isFragment(value)) {
|
|
229
323
|
return typeFromUnknown(value.segments[0]);
|
|
@@ -249,8 +343,12 @@ const typeFromUnknown = value => {
|
|
|
249
343
|
}
|
|
250
344
|
};
|
|
251
345
|
/**
|
|
346
|
+
* Creates the SQL statement compiler for ClickHouse, emitting typed
|
|
347
|
+
* `{pN: Type}` placeholders and escaping identifiers with an optional query
|
|
348
|
+
* name transform.
|
|
349
|
+
*
|
|
252
350
|
* @category compiler
|
|
253
|
-
* @since
|
|
351
|
+
* @since 4.0.0
|
|
254
352
|
*/
|
|
255
353
|
export const makeCompiler = transform => Statement.makeCompiler({
|
|
256
354
|
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,34 @@
|
|
|
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`. Use it during application startup,
|
|
7
|
+
* deployment, or integration tests when analytical tables must exist before
|
|
8
|
+
* dependent services start reading or writing data.
|
|
9
|
+
*
|
|
10
|
+
* **Mental model**
|
|
11
|
+
*
|
|
12
|
+
* Migrations are loaded with the shared `<id>_<name>` convention and recorded in
|
|
13
|
+
* `effect_sql_migrations` by default. The runner reads the latest recorded id
|
|
14
|
+
* and applies only migrations with larger ids, returning the ids and names that
|
|
15
|
+
* were applied in the current run.
|
|
16
|
+
*
|
|
17
|
+
* **Common tasks**
|
|
18
|
+
*
|
|
19
|
+
* - Call `run` when an effect should explicitly migrate a ClickHouse database.
|
|
20
|
+
* - Use `layer` when schema setup should happen while building a layer graph.
|
|
21
|
+
* - Reuse the shared `Migrator` loaders from this module for file-based or
|
|
22
|
+
* in-memory migration definitions.
|
|
23
|
+
*
|
|
24
|
+
* **Gotchas**
|
|
25
|
+
*
|
|
26
|
+
* ClickHouse schema changes often depend on engine, `ORDER BY`, database, and
|
|
27
|
+
* cluster settings. This adapter does not add a ClickHouse-specific table lock
|
|
28
|
+
* or schema dumper, so coordinate concurrent migrators yourself and do not
|
|
29
|
+
* expect `schemaDirectory` to write a ClickHouse schema snapshot.
|
|
30
|
+
*
|
|
31
|
+
* @since 4.0.0
|
|
3
32
|
*/
|
|
4
33
|
import type * as Effect from "effect/Effect";
|
|
5
34
|
import * as Layer from "effect/Layer";
|
|
@@ -7,17 +36,23 @@ import * as Migrator from "effect/unstable/sql/Migrator";
|
|
|
7
36
|
import type * as Client from "effect/unstable/sql/SqlClient";
|
|
8
37
|
import type { SqlError } from "effect/unstable/sql/SqlError";
|
|
9
38
|
/**
|
|
10
|
-
* @since
|
|
39
|
+
* @since 4.0.0
|
|
11
40
|
*/
|
|
12
41
|
export * from "effect/unstable/sql/Migrator";
|
|
13
42
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
43
|
+
* Runs SQL migrations for ClickHouse using the supplied migrator options and
|
|
44
|
+
* returns the applied migration IDs and names.
|
|
45
|
+
*
|
|
46
|
+
* @category constructors
|
|
47
|
+
* @since 4.0.0
|
|
16
48
|
*/
|
|
17
49
|
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
50
|
/**
|
|
51
|
+
* Creates a layer that runs the configured ClickHouse migrations during layer
|
|
52
|
+
* construction and provides no services.
|
|
53
|
+
*
|
|
19
54
|
* @category layers
|
|
20
|
-
* @since
|
|
55
|
+
* @since 4.0.0
|
|
21
56
|
*/
|
|
22
57
|
export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, Client.SqlClient | R>;
|
|
23
58
|
//# 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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;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":"AAiCA,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.71",
|
|
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.71",
|
|
47
|
+
"effect": "^4.0.0-beta.71"
|
|
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.71",
|
|
51
|
+
"effect": "^4.0.0-beta.71"
|
|
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,65 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* ClickHouse driver for Effect SQL, backed by `@clickhouse/client`.
|
|
3
|
+
*
|
|
4
|
+
* Use this module to provide both the ClickHouse-specific
|
|
5
|
+
* {@link ClickhouseClient} service and the generic {@link Client.SqlClient}
|
|
6
|
+
* service. The client is intended for analytical application queries,
|
|
7
|
+
* migrations, background jobs, bulk inserts, and streaming reads that need
|
|
8
|
+
* Effect SQL query compilation, scoped lifecycle management, interruption, and
|
|
9
|
+
* consistent `SqlError` classification for ClickHouse failures.
|
|
10
|
+
*
|
|
11
|
+
* **Mental model**
|
|
12
|
+
*
|
|
13
|
+
* A client owns one scoped `@clickhouse/client` instance and verifies startup
|
|
14
|
+
* with `SELECT 1`. Regular queries use the ClickHouse HTTP `query` API,
|
|
15
|
+
* command-mode effects use `command`, and inserts use `insert`. Interrupting an
|
|
16
|
+
* operation aborts the HTTP request and attempts to kill the generated or
|
|
17
|
+
* supplied `query_id`.
|
|
18
|
+
*
|
|
19
|
+
* **Common tasks**
|
|
20
|
+
*
|
|
21
|
+
* Use {@link layer} with a concrete `ClickhouseClientConfig`,
|
|
22
|
+
* {@link layerConfig} when settings should come from Effect `Config`, and
|
|
23
|
+
* {@link make} when a scoped client value is needed directly. Use
|
|
24
|
+
* `client.param` when a placeholder needs an explicit ClickHouse type,
|
|
25
|
+
* `client.asCommand` for statements that should run through `command`,
|
|
26
|
+
* `client.insertQuery` for bulk inserts, and `client.withClickhouseSettings`
|
|
27
|
+
* or `client.withQueryId` for per-effect request options.
|
|
28
|
+
*
|
|
29
|
+
* **Gotchas**
|
|
30
|
+
*
|
|
31
|
+
* Regular queries read JSON result sets, `executeValues` requests
|
|
32
|
+
* `JSONCompact`, streams request `JSONEachRow`, and `insertQuery` defaults
|
|
33
|
+
* inserts to `JSONEachRow`. The statement compiler emits typed ClickHouse
|
|
34
|
+
* placeholders such as `{p1: Type}`; use `param` when the inferred type is too
|
|
35
|
+
* broad. ClickHouse-specific clauses such as engines, `SETTINGS`, `FORMAT`, or
|
|
36
|
+
* cluster directives must be written explicitly in SQL.
|
|
37
|
+
*
|
|
38
|
+
* @since 4.0.0
|
|
3
39
|
*/
|
|
4
40
|
import * as Clickhouse from "@clickhouse/client"
|
|
5
41
|
import * as NodeStream from "@effect/platform-node/NodeStream"
|
|
6
42
|
import * as Config from "effect/Config"
|
|
43
|
+
import * as Context from "effect/Context"
|
|
7
44
|
import * as Duration from "effect/Duration"
|
|
8
45
|
import * as Effect from "effect/Effect"
|
|
9
46
|
import * as Fiber from "effect/Fiber"
|
|
10
47
|
import { dual } from "effect/Function"
|
|
11
48
|
import * as Layer from "effect/Layer"
|
|
12
49
|
import type * as Scope from "effect/Scope"
|
|
13
|
-
import * as ServiceMap from "effect/ServiceMap"
|
|
14
50
|
import * as Stream from "effect/Stream"
|
|
15
51
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity"
|
|
16
52
|
import * as Client from "effect/unstable/sql/SqlClient"
|
|
17
53
|
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
18
|
-
import {
|
|
54
|
+
import {
|
|
55
|
+
AuthenticationError,
|
|
56
|
+
AuthorizationError,
|
|
57
|
+
ConnectionError,
|
|
58
|
+
SqlError,
|
|
59
|
+
SqlSyntaxError,
|
|
60
|
+
StatementTimeoutError,
|
|
61
|
+
UnknownError
|
|
62
|
+
} from "effect/unstable/sql/SqlError"
|
|
19
63
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
20
64
|
import * as Crypto from "node:crypto"
|
|
21
65
|
import type { Readable } from "node:stream"
|
|
@@ -23,21 +67,71 @@ import type { Readable } from "node:stream"
|
|
|
23
67
|
const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
24
68
|
const ATTR_DB_NAMESPACE = "db.namespace"
|
|
25
69
|
|
|
70
|
+
const clickhouseCodeFromCause = (cause: unknown): number | undefined => {
|
|
71
|
+
if (typeof cause !== "object" || cause === null || !("code" in cause)) {
|
|
72
|
+
return undefined
|
|
73
|
+
}
|
|
74
|
+
const code = cause.code
|
|
75
|
+
if (typeof code === "number") {
|
|
76
|
+
return code
|
|
77
|
+
}
|
|
78
|
+
if (typeof code === "string") {
|
|
79
|
+
const parsed = Number(code)
|
|
80
|
+
return Number.isNaN(parsed) ? undefined : parsed
|
|
81
|
+
}
|
|
82
|
+
return undefined
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const clickhouseSyntaxErrorCodes = new Set([36, 60, 62, 242])
|
|
86
|
+
|
|
87
|
+
const classifyError = (
|
|
88
|
+
cause: unknown,
|
|
89
|
+
message: string,
|
|
90
|
+
operation: string,
|
|
91
|
+
fallback: "connection" | "unknown" = "unknown"
|
|
92
|
+
) => {
|
|
93
|
+
const props = { cause, message, operation }
|
|
94
|
+
const code = clickhouseCodeFromCause(cause)
|
|
95
|
+
if (code !== undefined) {
|
|
96
|
+
if (code === 516) {
|
|
97
|
+
return new AuthenticationError(props)
|
|
98
|
+
}
|
|
99
|
+
if (code === 497) {
|
|
100
|
+
return new AuthorizationError(props)
|
|
101
|
+
}
|
|
102
|
+
if (clickhouseSyntaxErrorCodes.has(code)) {
|
|
103
|
+
return new SqlSyntaxError(props)
|
|
104
|
+
}
|
|
105
|
+
if (code === 159 || code === 469) {
|
|
106
|
+
return new StatementTimeoutError(props)
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
return fallback === "connection" ? new ConnectionError(props) : new UnknownError(props)
|
|
110
|
+
}
|
|
111
|
+
|
|
26
112
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
113
|
+
* Unique runtime identifier used to tag `ClickhouseClient` values.
|
|
114
|
+
*
|
|
115
|
+
* @category type IDs
|
|
116
|
+
* @since 4.0.0
|
|
29
117
|
*/
|
|
30
118
|
export const TypeId: TypeId = "~@effect/sql-clickhouse/ClickhouseClient"
|
|
31
119
|
|
|
32
120
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
121
|
+
* Type-level literal for the `ClickhouseClient` runtime identifier.
|
|
122
|
+
*
|
|
123
|
+
* @category type IDs
|
|
124
|
+
* @since 4.0.0
|
|
35
125
|
*/
|
|
36
126
|
export type TypeId = "~@effect/sql-clickhouse/ClickhouseClient"
|
|
37
127
|
|
|
38
128
|
/**
|
|
129
|
+
* ClickHouse-specific `SqlClient` extension with access to its configuration,
|
|
130
|
+
* typed parameter fragments, command-mode execution, insert queries, and
|
|
131
|
+
* per-effect query ID and ClickHouse settings.
|
|
132
|
+
*
|
|
39
133
|
* @category models
|
|
40
|
-
* @since
|
|
134
|
+
* @since 4.0.0
|
|
41
135
|
*/
|
|
42
136
|
export interface ClickhouseClient extends Client.SqlClient {
|
|
43
137
|
readonly [TypeId]: TypeId
|
|
@@ -65,14 +159,20 @@ export interface ClickhouseClient extends Client.SqlClient {
|
|
|
65
159
|
}
|
|
66
160
|
|
|
67
161
|
/**
|
|
162
|
+
* Context service tag for accessing the active `ClickhouseClient`.
|
|
163
|
+
*
|
|
68
164
|
* @category tags
|
|
69
|
-
* @since
|
|
165
|
+
* @since 4.0.0
|
|
70
166
|
*/
|
|
71
|
-
export const ClickhouseClient =
|
|
167
|
+
export const ClickhouseClient = Context.Service<ClickhouseClient>("@effect/sql-clickhouse/ClickhouseClient")
|
|
72
168
|
|
|
73
169
|
/**
|
|
170
|
+
* Configuration for creating a ClickHouse client, combining
|
|
171
|
+
* `@clickhouse/client` options with optional span attributes and query/result
|
|
172
|
+
* name transforms.
|
|
173
|
+
*
|
|
74
174
|
* @category constructors
|
|
75
|
-
* @since
|
|
175
|
+
* @since 4.0.0
|
|
76
176
|
*/
|
|
77
177
|
export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfigOptions {
|
|
78
178
|
readonly spanAttributes?: Record<string, unknown> | undefined
|
|
@@ -81,8 +181,12 @@ export interface ClickhouseClientConfig extends Clickhouse.ClickHouseClientConfi
|
|
|
81
181
|
}
|
|
82
182
|
|
|
83
183
|
/**
|
|
184
|
+
* Creates a scoped `ClickhouseClient`, verifies connectivity with `SELECT 1`,
|
|
185
|
+
* closes the underlying client when the scope ends, maps ClickHouse failures
|
|
186
|
+
* to `SqlError`, and aborts plus kills in-flight queries when interrupted.
|
|
187
|
+
*
|
|
84
188
|
* @category constructors
|
|
85
|
-
* @since
|
|
189
|
+
* @since 4.0.0
|
|
86
190
|
*/
|
|
87
191
|
export const make = (
|
|
88
192
|
options: ClickhouseClientConfig
|
|
@@ -98,17 +202,21 @@ export const make = (
|
|
|
98
202
|
yield* Effect.acquireRelease(
|
|
99
203
|
Effect.tryPromise({
|
|
100
204
|
try: () => client.exec({ query: "SELECT 1" }),
|
|
101
|
-
catch: (cause) =>
|
|
205
|
+
catch: (cause) =>
|
|
206
|
+
new SqlError({ reason: classifyError(cause, "ClickhouseClient: Failed to connect", "connect", "connection") })
|
|
102
207
|
}),
|
|
103
208
|
() => Effect.promise(() => client.close())
|
|
104
209
|
).pipe(
|
|
105
210
|
Effect.timeoutOrElse({
|
|
106
211
|
duration: Duration.seconds(5),
|
|
107
|
-
|
|
212
|
+
orElse: () =>
|
|
108
213
|
Effect.fail(
|
|
109
214
|
new SqlError({
|
|
110
|
-
|
|
111
|
-
|
|
215
|
+
reason: new ConnectionError({
|
|
216
|
+
message: "ClickhouseClient: Connection timeout",
|
|
217
|
+
cause: new Error("connection timeout"),
|
|
218
|
+
operation: "connect"
|
|
219
|
+
})
|
|
112
220
|
})
|
|
113
221
|
)
|
|
114
222
|
})
|
|
@@ -140,7 +248,12 @@ export const make = (
|
|
|
140
248
|
clickhouse_settings: settings
|
|
141
249
|
}).then(
|
|
142
250
|
(result) => resume(Effect.succeed(result)),
|
|
143
|
-
(cause) =>
|
|
251
|
+
(cause) =>
|
|
252
|
+
resume(
|
|
253
|
+
Effect.fail(
|
|
254
|
+
new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
255
|
+
)
|
|
256
|
+
)
|
|
144
257
|
)
|
|
145
258
|
} else {
|
|
146
259
|
this.conn.query({
|
|
@@ -152,7 +265,12 @@ export const make = (
|
|
|
152
265
|
format
|
|
153
266
|
}).then(
|
|
154
267
|
(result) => resume(Effect.succeed(result)),
|
|
155
|
-
(cause) =>
|
|
268
|
+
(cause) =>
|
|
269
|
+
resume(
|
|
270
|
+
Effect.fail(
|
|
271
|
+
new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
272
|
+
)
|
|
273
|
+
)
|
|
156
274
|
)
|
|
157
275
|
}
|
|
158
276
|
return Effect.suspend(() => {
|
|
@@ -209,7 +327,7 @@ export const make = (
|
|
|
209
327
|
}
|
|
210
328
|
return NodeStream.fromReadable<ReadonlyArray<Clickhouse.Row<any, "JSONEachRow">>, SqlError>({
|
|
211
329
|
evaluate: () => result.stream() as any,
|
|
212
|
-
onError: (cause) => new SqlError({ cause,
|
|
330
|
+
onError: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute stream", "stream") })
|
|
213
331
|
})
|
|
214
332
|
}),
|
|
215
333
|
Stream.unwrap,
|
|
@@ -223,7 +341,7 @@ export const make = (
|
|
|
223
341
|
}
|
|
224
342
|
return Effect.tryPromise({
|
|
225
343
|
try: () => Promise.all(promises).then((rows) => transformRows ? transformRows(rows) : rows),
|
|
226
|
-
catch: (cause) => new SqlError({ cause,
|
|
344
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to parse row", "parseRow") })
|
|
227
345
|
})
|
|
228
346
|
}),
|
|
229
347
|
Stream.flattenIterable
|
|
@@ -272,7 +390,8 @@ export const make = (
|
|
|
272
390
|
clickhouse_settings: settings
|
|
273
391
|
}).then(
|
|
274
392
|
(result) => resume(Effect.succeed(result)),
|
|
275
|
-
(cause) =>
|
|
393
|
+
(cause) =>
|
|
394
|
+
resume(Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to insert data", "insert") })))
|
|
276
395
|
)
|
|
277
396
|
return Effect.suspend(() => {
|
|
278
397
|
controller.abort()
|
|
@@ -280,25 +399,29 @@ export const make = (
|
|
|
280
399
|
})
|
|
281
400
|
})
|
|
282
401
|
},
|
|
283
|
-
withQueryId: dual(
|
|
284
|
-
|
|
402
|
+
withQueryId: dual(
|
|
403
|
+
2,
|
|
404
|
+
<A, E, R>(effect: Effect.Effect<A, E, R>, queryId: string) => Effect.provideService(effect, QueryId, queryId)
|
|
405
|
+
),
|
|
285
406
|
withClickhouseSettings: dual(
|
|
286
407
|
2,
|
|
287
408
|
<A, E, R>(
|
|
288
409
|
effect: Effect.Effect<A, E, R>,
|
|
289
410
|
settings: NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>
|
|
290
|
-
) =>
|
|
291
|
-
Effect.provideService(effect, ClickhouseSettings, settings)
|
|
411
|
+
) => Effect.provideService(effect, ClickhouseSettings, settings)
|
|
292
412
|
)
|
|
293
413
|
}
|
|
294
414
|
)
|
|
295
415
|
})
|
|
296
416
|
|
|
297
417
|
/**
|
|
298
|
-
*
|
|
299
|
-
*
|
|
418
|
+
* Fiber reference read by the low-level ClickHouse connection to choose query
|
|
419
|
+
* or command execution for statements; defaults to `query`.
|
|
420
|
+
*
|
|
421
|
+
* @category references
|
|
422
|
+
* @since 4.0.0
|
|
300
423
|
*/
|
|
301
|
-
export const ClientMethod =
|
|
424
|
+
export const ClientMethod = Context.Reference<"query" | "command" | "insert">(
|
|
302
425
|
"@effect/sql-clickhouse/ClickhouseClient/ClientMethod",
|
|
303
426
|
{
|
|
304
427
|
defaultValue: () => "query"
|
|
@@ -306,55 +429,67 @@ export const ClientMethod = ServiceMap.Reference<"query" | "command" | "insert">
|
|
|
306
429
|
)
|
|
307
430
|
|
|
308
431
|
/**
|
|
309
|
-
*
|
|
310
|
-
*
|
|
432
|
+
* Fiber reference for the ClickHouse `query_id` applied to queries and
|
|
433
|
+
* inserts; a random UUID is generated when no query ID is set.
|
|
434
|
+
*
|
|
435
|
+
* @category references
|
|
436
|
+
* @since 4.0.0
|
|
311
437
|
*/
|
|
312
|
-
export const QueryId =
|
|
438
|
+
export const QueryId = Context.Reference<string | undefined>(
|
|
313
439
|
"@effect/sql-clickhouse/ClickhouseClient/QueryId",
|
|
314
440
|
{ defaultValue: () => undefined }
|
|
315
441
|
)
|
|
316
442
|
|
|
317
443
|
/**
|
|
318
|
-
*
|
|
319
|
-
*
|
|
444
|
+
* Fiber reference containing ClickHouse settings to attach to queries,
|
|
445
|
+
* commands, and inserts.
|
|
446
|
+
*
|
|
447
|
+
* @category references
|
|
448
|
+
* @since 4.0.0
|
|
320
449
|
*/
|
|
321
|
-
export const ClickhouseSettings:
|
|
450
|
+
export const ClickhouseSettings: Context.Reference<
|
|
322
451
|
NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>
|
|
323
|
-
> =
|
|
452
|
+
> = Context.Reference("@effect/sql-clickhouse/ClickhouseClient/ClickhouseSettings", {
|
|
324
453
|
defaultValue: () => ({})
|
|
325
454
|
})
|
|
326
455
|
|
|
327
456
|
/**
|
|
457
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
458
|
+
* `Config`-backed ClickHouse client configuration.
|
|
459
|
+
*
|
|
328
460
|
* @category layers
|
|
329
|
-
* @since
|
|
461
|
+
* @since 4.0.0
|
|
330
462
|
*/
|
|
331
463
|
export const layerConfig: (
|
|
332
464
|
config: Config.Wrap<ClickhouseClientConfig>
|
|
333
465
|
) => Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError> = (
|
|
334
466
|
config: Config.Wrap<ClickhouseClientConfig>
|
|
335
467
|
): Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError> =>
|
|
336
|
-
Layer.
|
|
337
|
-
Config.unwrap(config).
|
|
468
|
+
Layer.effectContext(
|
|
469
|
+
Config.unwrap(config).pipe(
|
|
338
470
|
Effect.flatMap(make),
|
|
339
471
|
Effect.map((client) =>
|
|
340
|
-
|
|
341
|
-
|
|
472
|
+
Context.make(ClickhouseClient, client).pipe(
|
|
473
|
+
Context.add(Client.SqlClient, client)
|
|
342
474
|
)
|
|
343
475
|
)
|
|
344
476
|
)
|
|
345
477
|
).pipe(Layer.provide(Reactivity.layer))
|
|
346
478
|
|
|
347
479
|
/**
|
|
480
|
+
* Provides both `ClickhouseClient` and generic `SqlClient` services from a
|
|
481
|
+
* ClickHouse client configuration.
|
|
482
|
+
*
|
|
348
483
|
* @category layers
|
|
349
|
-
* @since
|
|
484
|
+
* @since 4.0.0
|
|
350
485
|
*/
|
|
351
486
|
export const layer = (
|
|
352
487
|
config: ClickhouseClientConfig
|
|
353
488
|
): Layer.Layer<ClickhouseClient | Client.SqlClient, Config.ConfigError | SqlError> =>
|
|
354
|
-
Layer.
|
|
489
|
+
Layer.effectContext(
|
|
355
490
|
Effect.map(make(config), (client) =>
|
|
356
|
-
|
|
357
|
-
|
|
491
|
+
Context.make(ClickhouseClient, client).pipe(
|
|
492
|
+
Context.add(Client.SqlClient, client)
|
|
358
493
|
))
|
|
359
494
|
).pipe(Layer.provide(Reactivity.layer))
|
|
360
495
|
|
|
@@ -384,8 +519,12 @@ const typeFromUnknown = (value: unknown): string => {
|
|
|
384
519
|
}
|
|
385
520
|
|
|
386
521
|
/**
|
|
522
|
+
* Creates the SQL statement compiler for ClickHouse, emitting typed
|
|
523
|
+
* `{pN: Type}` placeholders and escaping identifiers with an optional query
|
|
524
|
+
* name transform.
|
|
525
|
+
*
|
|
387
526
|
* @category compiler
|
|
388
|
-
* @since
|
|
527
|
+
* @since 4.0.0
|
|
389
528
|
*/
|
|
390
529
|
export const makeCompiler = (transform?: (_: string) => string) =>
|
|
391
530
|
Statement.makeCompiler<ClickhouseCustom>({
|
|
@@ -411,14 +550,17 @@ export const makeCompiler = (transform?: (_: string) => string) =>
|
|
|
411
550
|
const escape = Statement.defaultEscape("\"")
|
|
412
551
|
|
|
413
552
|
/**
|
|
553
|
+
* Custom SQL fragment type used for ClickHouse typed parameters created by
|
|
554
|
+
* `ClickhouseClient.param`.
|
|
555
|
+
*
|
|
414
556
|
* @category custom types
|
|
415
|
-
* @since
|
|
557
|
+
* @since 4.0.0
|
|
416
558
|
*/
|
|
417
559
|
export type ClickhouseCustom = ClickhouseParam
|
|
418
560
|
|
|
419
561
|
/**
|
|
420
562
|
* @category custom types
|
|
421
|
-
* @since
|
|
563
|
+
* @since 4.0.0
|
|
422
564
|
*/
|
|
423
565
|
interface ClickhouseParam extends Statement.Custom<"ClickhouseParam", string, unknown> {}
|
|
424
566
|
|
|
@@ -1,5 +1,34 @@
|
|
|
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`. Use it during application startup,
|
|
7
|
+
* deployment, or integration tests when analytical tables must exist before
|
|
8
|
+
* dependent services start reading or writing data.
|
|
9
|
+
*
|
|
10
|
+
* **Mental model**
|
|
11
|
+
*
|
|
12
|
+
* Migrations are loaded with the shared `<id>_<name>` convention and recorded in
|
|
13
|
+
* `effect_sql_migrations` by default. The runner reads the latest recorded id
|
|
14
|
+
* and applies only migrations with larger ids, returning the ids and names that
|
|
15
|
+
* were applied in the current run.
|
|
16
|
+
*
|
|
17
|
+
* **Common tasks**
|
|
18
|
+
*
|
|
19
|
+
* - Call `run` when an effect should explicitly migrate a ClickHouse database.
|
|
20
|
+
* - Use `layer` when schema setup should happen while building a layer graph.
|
|
21
|
+
* - Reuse the shared `Migrator` loaders from this module for file-based or
|
|
22
|
+
* in-memory migration definitions.
|
|
23
|
+
*
|
|
24
|
+
* **Gotchas**
|
|
25
|
+
*
|
|
26
|
+
* ClickHouse schema changes often depend on engine, `ORDER BY`, database, and
|
|
27
|
+
* cluster settings. This adapter does not add a ClickHouse-specific table lock
|
|
28
|
+
* or schema dumper, so coordinate concurrent migrators yourself and do not
|
|
29
|
+
* expect `schemaDirectory` to write a ClickHouse schema snapshot.
|
|
30
|
+
*
|
|
31
|
+
* @since 4.0.0
|
|
3
32
|
*/
|
|
4
33
|
import type * as Effect from "effect/Effect"
|
|
5
34
|
import * as Layer from "effect/Layer"
|
|
@@ -8,13 +37,16 @@ import type * as Client from "effect/unstable/sql/SqlClient"
|
|
|
8
37
|
import type { SqlError } from "effect/unstable/sql/SqlError"
|
|
9
38
|
|
|
10
39
|
/**
|
|
11
|
-
* @since
|
|
40
|
+
* @since 4.0.0
|
|
12
41
|
*/
|
|
13
42
|
export * from "effect/unstable/sql/Migrator"
|
|
14
43
|
|
|
15
44
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
45
|
+
* Runs SQL migrations for ClickHouse using the supplied migrator options and
|
|
46
|
+
* returns the applied migration IDs and names.
|
|
47
|
+
*
|
|
48
|
+
* @category constructors
|
|
49
|
+
* @since 4.0.0
|
|
18
50
|
*/
|
|
19
51
|
export const run: <R2 = never>(
|
|
20
52
|
{ loader, schemaDirectory, table }: Migrator.MigratorOptions<R2>
|
|
@@ -25,8 +57,11 @@ export const run: <R2 = never>(
|
|
|
25
57
|
> = Migrator.make({})
|
|
26
58
|
|
|
27
59
|
/**
|
|
60
|
+
* Creates a layer that runs the configured ClickHouse migrations during layer
|
|
61
|
+
* construction and provides no services.
|
|
62
|
+
*
|
|
28
63
|
* @category layers
|
|
29
|
-
* @since
|
|
64
|
+
* @since 4.0.0
|
|
30
65
|
*/
|
|
31
66
|
export const layer = <R>(
|
|
32
67
|
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"
|