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