@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.
@@ -1,30 +1,74 @@
1
1
  /**
2
- * @since 1.0.0
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
- * @category type ids
17
- * @since 1.0.0
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
- * @category type ids
22
- * @since 1.0.0
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 1.0.0
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 1.0.0
96
+ * @since 4.0.0
51
97
  */
52
- export declare const ClickhouseClient: ServiceMap.Service<ClickhouseClient, 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 1.0.0
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 1.0.0
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
- * @category References
69
- * @since 1.0.0
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: ServiceMap.Reference<"query" | "command" | "insert">;
128
+ export declare const ClientMethod: Context.Reference<"query" | "command" | "insert">;
72
129
  /**
73
- * @category References
74
- * @since 1.0.0
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: ServiceMap.Reference<string | undefined>;
136
+ export declare const QueryId: Context.Reference<string | undefined>;
77
137
  /**
78
- * @category References
79
- * @since 1.0.0
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: ServiceMap.Reference<NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>>;
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 1.0.0
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 1.0.0
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 1.0.0
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 1.0.0
175
+ * @since 4.0.0
100
176
  */
101
177
  export type ClickhouseCustom = ClickhouseParam;
102
178
  /**
103
179
  * @category custom types
104
- * @since 1.0.0
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":"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"}
1
+ {"version":3,"file":"ClickhouseClient.d.ts","sourceRoot":"","sources":["../src/ClickhouseClient.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,KAAK,UAAU,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AAEzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAE1C,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAEvD,OAAO,EAIL,QAAQ,EAIT,MAAM,8BAA8B,CAAA;AACrC,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAE1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AA+C3C;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,MAAmD,CAAA;AAExE;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,0CAA0C,CAAA;AAE/D;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAiB,SAAQ,MAAM,CAAC,SAAS;IACxD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAA;IACvC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,SAAS,CAAC,QAAQ,CAAA;IACxE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACvF,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE;QAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,UAAU,CAAA;KACxC,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IACtD,QAAQ,CAAC,WAAW,EAAE;QACpB,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtF,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KACnF,CAAA;IACD,QAAQ,CAAC,sBAAsB,EAAE;QAC/B,CACE,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GACvE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACN,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,QAAQ,EAAE,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,GACvE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;KAC1B,CAAA;CACF;AAED;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,qDAA+E,CAAA;AAE5G;;;;;;;GAOG;AACH,MAAM,WAAW,sBAAuB,SAAQ,UAAU,CAAC,6BAA6B;IACtF,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAC7D,QAAQ,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;IACrE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,CAAA;CACrE;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,sBAAsB,KAC9B,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CA8N5E,CAAA;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,mDAKxB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,uCAGnB,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,SAAS,CAChD,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,qBAAqB,CAAC,CAAC,CAG9D,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,EAAE,CACxB,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,KACxC,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,GAAG,QAAQ,CAY1C,CAAA;AAEzC;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,sBAAsB,KAC7B,KAAK,CAAC,KAAK,CAAC,gBAAgB,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,GAAG,QAAQ,CAMxC,CAAA;AA2BzC;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,GAAI,YAAY,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,uBAiB1D,CAAA;AAMJ;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAA;AAE9C;;;GAGG;AACH,UAAU,eAAgB,SAAQ,SAAS,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC;CAAG"}
@@ -1,36 +1,118 @@
1
1
  /**
2
- * @since 1.0.0
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
- * @category type ids
23
- * @since 1.0.0
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 1.0.0
106
+ * @since 4.0.0
29
107
  */
30
- export const ClickhouseClient = /*#__PURE__*/ServiceMap.Service("@effect/sql-clickhouse/ClickhouseClient");
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 1.0.0
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
- onTimeout: () => Effect.fail(new SqlError({
50
- message: "ClickhouseClient: Connection timeout",
51
- cause: new Error("connection timeout")
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
- * @category References
198
- * @since 1.0.0
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__*/ServiceMap.Reference("@effect/sql-clickhouse/ClickhouseClient/ClientMethod", {
282
+ export const ClientMethod = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/ClientMethod", {
201
283
  defaultValue: () => "query"
202
284
  });
203
285
  /**
204
- * @category References
205
- * @since 1.0.0
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__*/ServiceMap.Reference("@effect/sql-clickhouse/ClickhouseClient/QueryId", {
292
+ export const QueryId = /*#__PURE__*/Context.Reference("@effect/sql-clickhouse/ClickhouseClient/QueryId", {
208
293
  defaultValue: () => undefined
209
294
  });
210
295
  /**
211
- * @category References
212
- * @since 1.0.0
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__*/ServiceMap.Reference("@effect/sql-clickhouse/ClickhouseClient/ClickhouseSettings", {
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 1.0.0
310
+ * @since 4.0.0
220
311
  */
221
- export const layerConfig = config => Layer.effectServices(Config.unwrap(config).asEffect().pipe(Effect.flatMap(make), Effect.map(client => ServiceMap.make(ClickhouseClient, client).pipe(ServiceMap.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.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 1.0.0
318
+ * @since 4.0.0
225
319
  */
226
- export const layer = config => Layer.effectServices(Effect.map(make(config), client => ServiceMap.make(ClickhouseClient, client).pipe(ServiceMap.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.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 1.0.0
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
- * @since 1.0.0
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 1.0.0
39
+ * @since 4.0.0
11
40
  */
12
41
  export * from "effect/unstable/sql/Migrator";
13
42
  /**
14
- * @category constructor
15
- * @since 1.0.0
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 1.0.0
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;;GAEG;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;;;GAGG;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;;;GAGG;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
+ {"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 1.0.0
4
+ * @since 4.0.0
5
5
  */
6
6
  export * from "effect/unstable/sql/Migrator";
7
7
  /**
8
- * @category constructor
9
- * @since 1.0.0
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 1.0.0
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":"AAIA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,8BAA8B;AAIxD;;;AAGA,cAAc,8BAA8B;AAE5C;;;;AAIA,OAAO,MAAMC,GAAG,gBAMZD,QAAQ,CAACE,IAAI,CAAC,EAAE,CAAC;AAErB;;;;AAIA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAKjCL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]}
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 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  /**
5
- * @since 1.0.0
5
+ * @since 4.0.0
6
6
  */
7
7
  export * as ClickhouseClient from "./ClickhouseClient.ts";
8
8
  /**
9
- * @since 1.0.0
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 1.0.0
2
+ * @since 4.0.0
3
3
  */
4
4
  // @barrel: Auto-generated exports. Do not edit manually.
5
5
  /**
6
- * @since 1.0.0
6
+ * @since 4.0.0
7
7
  */
8
8
  export * as ClickhouseClient from "./ClickhouseClient.js";
9
9
  /**
10
- * @since 1.0.0
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.7",
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.7",
47
- "effect": "^4.0.0-beta.7"
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.7",
51
- "effect": "^4.0.0-beta.7"
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.16.0"
54
+ "@clickhouse/client": "^1.18.4"
55
55
  },
56
56
  "scripts": {
57
57
  "codegen": "effect-utils codegen",
@@ -1,21 +1,65 @@
1
1
  /**
2
- * @since 1.0.0
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 { SqlError } from "effect/unstable/sql/SqlError"
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
- * @category type ids
28
- * @since 1.0.0
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
- * @category type ids
34
- * @since 1.0.0
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 1.0.0
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 1.0.0
165
+ * @since 4.0.0
70
166
  */
71
- export const ClickhouseClient = ServiceMap.Service<ClickhouseClient>("@effect/sql-clickhouse/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 1.0.0
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 1.0.0
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) => new SqlError({ cause, message: "ClickhouseClient: Failed to connect" })
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
- onTimeout: () =>
212
+ orElse: () =>
108
213
  Effect.fail(
109
214
  new SqlError({
110
- message: "ClickhouseClient: Connection timeout",
111
- cause: new Error("connection timeout")
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) => resume(Effect.fail(new SqlError({ cause, message: "Failed to execute statement" })))
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) => resume(Effect.fail(new SqlError({ cause, message: "Failed to execute statement" })))
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, message: "Failed to execute stream" })
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, message: "Failed to parse row" })
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) => resume(Effect.fail(new SqlError({ cause, message: "Failed to insert data" })))
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(2, <A, E, R>(effect: Effect.Effect<A, E, R>, queryId: string) =>
284
- Effect.provideService(effect, QueryId, queryId)),
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
- * @category References
299
- * @since 1.0.0
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 = ServiceMap.Reference<"query" | "command" | "insert">(
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
- * @category References
310
- * @since 1.0.0
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 = ServiceMap.Reference<string | undefined>(
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
- * @category References
319
- * @since 1.0.0
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: ServiceMap.Reference<
450
+ export const ClickhouseSettings: Context.Reference<
322
451
  NonNullable<Clickhouse.BaseQueryParams["clickhouse_settings"]>
323
- > = ServiceMap.Reference("@effect/sql-clickhouse/ClickhouseClient/ClickhouseSettings", {
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 1.0.0
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.effectServices(
337
- Config.unwrap(config).asEffect().pipe(
468
+ Layer.effectContext(
469
+ Config.unwrap(config).pipe(
338
470
  Effect.flatMap(make),
339
471
  Effect.map((client) =>
340
- ServiceMap.make(ClickhouseClient, client).pipe(
341
- ServiceMap.add(Client.SqlClient, client)
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 1.0.0
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.effectServices(
489
+ Layer.effectContext(
355
490
  Effect.map(make(config), (client) =>
356
- ServiceMap.make(ClickhouseClient, client).pipe(
357
- ServiceMap.add(Client.SqlClient, client)
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 1.0.0
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 1.0.0
557
+ * @since 4.0.0
416
558
  */
417
559
  export type ClickhouseCustom = ClickhouseParam
418
560
 
419
561
  /**
420
562
  * @category custom types
421
- * @since 1.0.0
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
- * @since 1.0.0
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 1.0.0
40
+ * @since 4.0.0
12
41
  */
13
42
  export * from "effect/unstable/sql/Migrator"
14
43
 
15
44
  /**
16
- * @category constructor
17
- * @since 1.0.0
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 1.0.0
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 1.0.0
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 1.0.0
8
+ * @since 4.0.0
9
9
  */
10
10
  export * as ClickhouseClient from "./ClickhouseClient.ts"
11
11
 
12
12
  /**
13
- * @since 1.0.0
13
+ * @since 4.0.0
14
14
  */
15
15
  export * as ClickhouseMigrator from "./ClickhouseMigrator.ts"