@effect/sql-mysql2 4.0.0-beta.9 → 4.0.0-beta.91
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/MysqlClient.d.ts +46 -15
- package/dist/MysqlClient.d.ts.map +1 -1
- package/dist/MysqlClient.js +137 -26
- package/dist/MysqlClient.js.map +1 -1
- package/dist/MysqlMigrator.d.ts +17 -5
- package/dist/MysqlMigrator.d.ts.map +1 -1
- package/dist/MysqlMigrator.js +8 -4
- package/dist/MysqlMigrator.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +3 -3
- package/package.json +5 -5
- package/src/MysqlClient.ts +184 -32
- package/src/MysqlMigrator.ts +17 -5
- package/src/index.ts +3 -3
package/dist/MysqlClient.d.ts
CHANGED
|
@@ -1,44 +1,67 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* MySQL adapter for Effect SQL, backed by the `mysql2` driver.
|
|
3
|
+
*
|
|
4
|
+
* This module provides constructors and layers for a {@link MysqlClient} and
|
|
5
|
+
* the generic Effect SQL client service. `make` creates a managed mysql2 pool,
|
|
6
|
+
* checks the connection with `SELECT 1`, maps mysql2 failures to `SqlError`,
|
|
7
|
+
* supports transaction connections, and exposes streaming queries through
|
|
8
|
+
* mysql2 query streams. It also provides direct and config-backed layers plus a
|
|
9
|
+
* MySQL statement compiler.
|
|
10
|
+
*
|
|
11
|
+
* @since 4.0.0
|
|
3
12
|
*/
|
|
4
13
|
import * as Config from "effect/Config";
|
|
14
|
+
import * as Context from "effect/Context";
|
|
5
15
|
import * as Duration from "effect/Duration";
|
|
6
16
|
import * as Effect from "effect/Effect";
|
|
7
17
|
import * as Layer from "effect/Layer";
|
|
8
18
|
import * as Redacted from "effect/Redacted";
|
|
9
19
|
import type { Scope } from "effect/Scope";
|
|
10
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
11
20
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
12
21
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
13
22
|
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
14
23
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
15
24
|
import * as Mysql from "mysql2";
|
|
16
25
|
/**
|
|
17
|
-
*
|
|
18
|
-
*
|
|
26
|
+
* Runtime type identifier used to mark `MysqlClient` values.
|
|
27
|
+
*
|
|
28
|
+
* @category type IDs
|
|
29
|
+
* @since 4.0.0
|
|
19
30
|
*/
|
|
20
31
|
export declare const TypeId: TypeId;
|
|
21
32
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
33
|
+
* Type-level identifier used to mark `MysqlClient` values.
|
|
34
|
+
*
|
|
35
|
+
* @category type IDs
|
|
36
|
+
* @since 4.0.0
|
|
24
37
|
*/
|
|
25
38
|
export type TypeId = "~@effect/sql-mysql2/MysqlClient";
|
|
26
39
|
/**
|
|
40
|
+
* mysql2-backed SQL client service, extending `SqlClient` with its runtime type marker and client configuration.
|
|
41
|
+
*
|
|
27
42
|
* @category models
|
|
28
|
-
* @since
|
|
43
|
+
* @since 4.0.0
|
|
29
44
|
*/
|
|
30
45
|
export interface MysqlClient extends Client.SqlClient {
|
|
31
46
|
readonly [TypeId]: TypeId;
|
|
32
47
|
readonly config: MysqlClientConfig;
|
|
33
48
|
}
|
|
34
49
|
/**
|
|
35
|
-
*
|
|
36
|
-
*
|
|
50
|
+
* Service tag for the mysql2 SQL client service.
|
|
51
|
+
*
|
|
52
|
+
* **When to use**
|
|
53
|
+
*
|
|
54
|
+
* Use to access or provide a mysql2 client through the Effect context.
|
|
55
|
+
*
|
|
56
|
+
* @category services
|
|
57
|
+
* @since 4.0.0
|
|
37
58
|
*/
|
|
38
|
-
export declare const MysqlClient:
|
|
59
|
+
export declare const MysqlClient: Context.Service<MysqlClient, MysqlClient>;
|
|
39
60
|
/**
|
|
61
|
+
* Configuration for a mysql2 client, including connection URI or connection fields, pool options, span attributes, and query/result name transforms.
|
|
62
|
+
*
|
|
40
63
|
* @category models
|
|
41
|
-
* @since
|
|
64
|
+
* @since 4.0.0
|
|
42
65
|
*/
|
|
43
66
|
export interface MysqlClientConfig {
|
|
44
67
|
/**
|
|
@@ -58,23 +81,31 @@ export interface MysqlClientConfig {
|
|
|
58
81
|
readonly transformQueryNames?: ((str: string) => string) | undefined;
|
|
59
82
|
}
|
|
60
83
|
/**
|
|
84
|
+
* Creates a scoped MySQL client backed by a managed mysql2 pool, verifying connectivity and supporting streaming queries through mysql2 query streams.
|
|
85
|
+
*
|
|
61
86
|
* @category constructors
|
|
62
|
-
* @since
|
|
87
|
+
* @since 4.0.0
|
|
63
88
|
*/
|
|
64
89
|
export declare const make: (options: MysqlClientConfig) => Effect.Effect<MysqlClient, SqlError, Scope | Reactivity.Reactivity>;
|
|
65
90
|
/**
|
|
91
|
+
* Creates a layer from a `Config`-wrapped MySQL client configuration, providing both `MysqlClient` and `SqlClient`.
|
|
92
|
+
*
|
|
66
93
|
* @category layers
|
|
67
|
-
* @since
|
|
94
|
+
* @since 4.0.0
|
|
68
95
|
*/
|
|
69
96
|
export declare const layerConfig: (config: Config.Wrap<MysqlClientConfig>) => Layer.Layer<MysqlClient | Client.SqlClient, Config.ConfigError | SqlError>;
|
|
70
97
|
/**
|
|
98
|
+
* Creates a layer from a concrete MySQL client configuration, providing both `MysqlClient` and `SqlClient`.
|
|
99
|
+
*
|
|
71
100
|
* @category layers
|
|
72
|
-
* @since
|
|
101
|
+
* @since 4.0.0
|
|
73
102
|
*/
|
|
74
103
|
export declare const layer: (config: MysqlClientConfig) => Layer.Layer<MysqlClient | Client.SqlClient, Config.ConfigError | SqlError>;
|
|
75
104
|
/**
|
|
105
|
+
* Creates the MySQL statement compiler, using `?` placeholders and backtick-escaped identifiers.
|
|
106
|
+
*
|
|
76
107
|
* @category compiler
|
|
77
|
-
* @since
|
|
108
|
+
* @since 4.0.0
|
|
78
109
|
*/
|
|
79
110
|
export declare const makeCompiler: (transform?: (_: string) => string) => Statement.Compiler;
|
|
80
111
|
//# sourceMappingURL=MysqlClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MysqlClient.d.ts","sourceRoot":"","sources":["../src/MysqlClient.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"MysqlClient.d.ts","sourceRoot":"","sources":["../src/MysqlClient.ts"],"names":[],"mappings":"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"}
|
package/dist/MysqlClient.js
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* MySQL adapter for Effect SQL, backed by the `mysql2` driver.
|
|
3
|
+
*
|
|
4
|
+
* This module provides constructors and layers for a {@link MysqlClient} and
|
|
5
|
+
* the generic Effect SQL client service. `make` creates a managed mysql2 pool,
|
|
6
|
+
* checks the connection with `SELECT 1`, maps mysql2 failures to `SqlError`,
|
|
7
|
+
* supports transaction connections, and exposes streaming queries through
|
|
8
|
+
* mysql2 query streams. It also provides direct and config-backed layers plus a
|
|
9
|
+
* MySQL statement compiler.
|
|
10
|
+
*
|
|
11
|
+
* @since 4.0.0
|
|
3
12
|
*/
|
|
4
13
|
import * as Config from "effect/Config";
|
|
14
|
+
import * as Context from "effect/Context";
|
|
5
15
|
import * as Duration from "effect/Duration";
|
|
6
16
|
import * as Effect from "effect/Effect";
|
|
7
17
|
import * as Layer from "effect/Layer";
|
|
8
18
|
import * as Redacted from "effect/Redacted";
|
|
9
|
-
import * as ServiceMap from "effect/ServiceMap";
|
|
10
19
|
import * as Stream from "effect/Stream";
|
|
11
20
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
12
21
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
13
|
-
import { SqlError } from "effect/unstable/sql/SqlError";
|
|
22
|
+
import { AuthenticationError, AuthorizationError, ConnectionError, ConstraintError, DeadlockError, LockTimeoutError, SqlError, SqlSyntaxError, StatementTimeoutError, UniqueViolation, UnknownError } from "effect/unstable/sql/SqlError";
|
|
14
23
|
import { asyncPauseResume } from "effect/unstable/sql/SqlStream";
|
|
15
24
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
16
25
|
import * as Mysql from "mysql2";
|
|
@@ -18,19 +27,113 @@ const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
|
18
27
|
const ATTR_DB_NAMESPACE = "db.namespace";
|
|
19
28
|
const ATTR_SERVER_ADDRESS = "server.address";
|
|
20
29
|
const ATTR_SERVER_PORT = "server.port";
|
|
30
|
+
const mysqlErrnoFromCause = cause => {
|
|
31
|
+
if (typeof cause !== "object" || cause === null || !("errno" in cause)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
const errno = cause.errno;
|
|
35
|
+
return typeof errno === "number" ? errno : undefined;
|
|
36
|
+
};
|
|
37
|
+
const mysqlConnectionErrorCodes = /*#__PURE__*/new Set([1040, 1042, 1043, 1129, 1130, 1203]);
|
|
38
|
+
const mysqlAuthorizationErrorCodes = /*#__PURE__*/new Set([1044, 1142, 1143, 1227]);
|
|
39
|
+
const mysqlSyntaxErrorCodes = /*#__PURE__*/new Set([1054, 1064, 1146]);
|
|
40
|
+
const mysqlConstraintErrorCodes = /*#__PURE__*/new Set([1022, 1048, 1169, 1216, 1217, 1451, 1452, 1557]);
|
|
41
|
+
const UNKNOWN_CONSTRAINT = "unknown";
|
|
42
|
+
const normalizeConstraintIdentifier = identifier => {
|
|
43
|
+
if (typeof identifier !== "string") {
|
|
44
|
+
return UNKNOWN_CONSTRAINT;
|
|
45
|
+
}
|
|
46
|
+
const trimmed = identifier.trim();
|
|
47
|
+
return trimmed.length === 0 ? UNKNOWN_CONSTRAINT : trimmed;
|
|
48
|
+
};
|
|
49
|
+
const mysqlCauseProperty = (cause, property) => {
|
|
50
|
+
if (typeof cause !== "object" || cause === null || !(property in cause)) {
|
|
51
|
+
return undefined;
|
|
52
|
+
}
|
|
53
|
+
return cause[property];
|
|
54
|
+
};
|
|
55
|
+
const mysqlDuplicateEntryConstraintFromMessage = message => {
|
|
56
|
+
if (typeof message !== "string") {
|
|
57
|
+
return UNKNOWN_CONSTRAINT;
|
|
58
|
+
}
|
|
59
|
+
const match = /\bfor key\s+(?:'([^']*)'|\x60([^\x60]*)\x60|([^\s'\x60]+))/i.exec(message);
|
|
60
|
+
return match === null ? UNKNOWN_CONSTRAINT : normalizeConstraintIdentifier(match[1] ?? match[2] ?? match[3]);
|
|
61
|
+
};
|
|
62
|
+
const mysqlDuplicateEntryConstraintFromCause = cause => {
|
|
63
|
+
const constraint = normalizeConstraintIdentifier(mysqlCauseProperty(cause, "constraint"));
|
|
64
|
+
if (constraint !== UNKNOWN_CONSTRAINT) {
|
|
65
|
+
return constraint;
|
|
66
|
+
}
|
|
67
|
+
const sqlMessageConstraint = mysqlDuplicateEntryConstraintFromMessage(mysqlCauseProperty(cause, "sqlMessage"));
|
|
68
|
+
if (sqlMessageConstraint !== UNKNOWN_CONSTRAINT) {
|
|
69
|
+
return sqlMessageConstraint;
|
|
70
|
+
}
|
|
71
|
+
return mysqlDuplicateEntryConstraintFromMessage(mysqlCauseProperty(cause, "message"));
|
|
72
|
+
};
|
|
73
|
+
const classifyError = (cause, message, operation) => {
|
|
74
|
+
const props = {
|
|
75
|
+
cause,
|
|
76
|
+
message,
|
|
77
|
+
operation
|
|
78
|
+
};
|
|
79
|
+
const errno = mysqlErrnoFromCause(cause);
|
|
80
|
+
if (errno !== undefined) {
|
|
81
|
+
if (mysqlConnectionErrorCodes.has(errno)) {
|
|
82
|
+
return new ConnectionError(props);
|
|
83
|
+
}
|
|
84
|
+
if (errno === 1045) {
|
|
85
|
+
return new AuthenticationError(props);
|
|
86
|
+
}
|
|
87
|
+
if (mysqlAuthorizationErrorCodes.has(errno)) {
|
|
88
|
+
return new AuthorizationError(props);
|
|
89
|
+
}
|
|
90
|
+
if (mysqlSyntaxErrorCodes.has(errno)) {
|
|
91
|
+
return new SqlSyntaxError(props);
|
|
92
|
+
}
|
|
93
|
+
if (errno === 1062) {
|
|
94
|
+
return new UniqueViolation({
|
|
95
|
+
...props,
|
|
96
|
+
constraint: mysqlDuplicateEntryConstraintFromCause(cause)
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (mysqlConstraintErrorCodes.has(errno)) {
|
|
100
|
+
return new ConstraintError(props);
|
|
101
|
+
}
|
|
102
|
+
if (errno === 1213) {
|
|
103
|
+
return new DeadlockError(props);
|
|
104
|
+
}
|
|
105
|
+
if (errno === 1205) {
|
|
106
|
+
return new LockTimeoutError(props);
|
|
107
|
+
}
|
|
108
|
+
if (errno === 3024) {
|
|
109
|
+
return new StatementTimeoutError(props);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return new UnknownError(props);
|
|
113
|
+
};
|
|
21
114
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
115
|
+
* Runtime type identifier used to mark `MysqlClient` values.
|
|
116
|
+
*
|
|
117
|
+
* @category type IDs
|
|
118
|
+
* @since 4.0.0
|
|
24
119
|
*/
|
|
25
120
|
export const TypeId = "~@effect/sql-mysql2/MysqlClient";
|
|
26
121
|
/**
|
|
27
|
-
*
|
|
28
|
-
*
|
|
122
|
+
* Service tag for the mysql2 SQL client service.
|
|
123
|
+
*
|
|
124
|
+
* **When to use**
|
|
125
|
+
*
|
|
126
|
+
* Use to access or provide a mysql2 client through the Effect context.
|
|
127
|
+
*
|
|
128
|
+
* @category services
|
|
129
|
+
* @since 4.0.0
|
|
29
130
|
*/
|
|
30
|
-
export const MysqlClient = /*#__PURE__*/
|
|
131
|
+
export const MysqlClient = /*#__PURE__*/Context.Service("@effect/sql-mysql2/MysqlClient");
|
|
31
132
|
/**
|
|
133
|
+
* Creates a scoped MySQL client backed by a managed mysql2 pool, verifying connectivity and supporting streaming queries through mysql2 query streams.
|
|
134
|
+
*
|
|
32
135
|
* @category constructors
|
|
33
|
-
* @since
|
|
136
|
+
* @since 4.0.0
|
|
34
137
|
*/
|
|
35
138
|
export const make = options => Effect.gen(function* () {
|
|
36
139
|
const compiler = makeCompiler(options.transformQueryNames);
|
|
@@ -42,7 +145,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
42
145
|
}
|
|
43
146
|
runRaw(sql, values, rowsAsArray = false, method = "execute") {
|
|
44
147
|
return Effect.callback(resume => {
|
|
45
|
-
;
|
|
148
|
+
const operation = method === "query" ? "executeUnprepared" : "execute";
|
|
46
149
|
this.conn[method]({
|
|
47
150
|
sql,
|
|
48
151
|
values,
|
|
@@ -50,8 +153,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
50
153
|
}, (cause, results, _fields) => {
|
|
51
154
|
if (cause) {
|
|
52
155
|
resume(Effect.fail(new SqlError({
|
|
53
|
-
cause,
|
|
54
|
-
message: "Failed to execute statement"
|
|
156
|
+
reason: classifyError(cause, "Failed to execute statement", operation)
|
|
55
157
|
})));
|
|
56
158
|
} else {
|
|
57
159
|
resume(Effect.succeed(results));
|
|
@@ -71,6 +173,9 @@ export const make = options => Effect.gen(function* () {
|
|
|
71
173
|
executeValues(sql, params) {
|
|
72
174
|
return this.run(sql, params, true);
|
|
73
175
|
}
|
|
176
|
+
executeValuesUnprepared(sql, params) {
|
|
177
|
+
return this.run(sql, params, true, "query");
|
|
178
|
+
}
|
|
74
179
|
executeUnprepared(sql, params, transformRows) {
|
|
75
180
|
return transformRows ? Effect.map(this.run(sql, params, false, "query"), transformRows) : this.run(sql, params, false, "query");
|
|
76
181
|
}
|
|
@@ -102,8 +207,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
102
207
|
pool.query("SELECT 1", cause => {
|
|
103
208
|
if (cause) {
|
|
104
209
|
resume(Effect.fail(new SqlError({
|
|
105
|
-
cause,
|
|
106
|
-
message: "MysqlClient: Failed to connect"
|
|
210
|
+
reason: classifyError(cause, "MysqlClient: Failed to connect", "connect")
|
|
107
211
|
})));
|
|
108
212
|
} else {
|
|
109
213
|
resume(Effect.void);
|
|
@@ -113,9 +217,12 @@ export const make = options => Effect.gen(function* () {
|
|
|
113
217
|
pool.end(() => resume(Effect.void));
|
|
114
218
|
})).pipe(Effect.timeoutOrElse({
|
|
115
219
|
duration: Duration.seconds(5),
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
220
|
+
orElse: () => Effect.fail(new SqlError({
|
|
221
|
+
reason: new ConnectionError({
|
|
222
|
+
message: "MysqlClient: Connection timeout",
|
|
223
|
+
cause: new Error("connection timeout"),
|
|
224
|
+
operation: "connect"
|
|
225
|
+
})
|
|
119
226
|
}))
|
|
120
227
|
}));
|
|
121
228
|
const poolConnection = new ConnectionImpl(pool);
|
|
@@ -123,8 +230,7 @@ export const make = options => Effect.gen(function* () {
|
|
|
123
230
|
pool.getConnection((cause, conn) => {
|
|
124
231
|
if (cause) {
|
|
125
232
|
resume(Effect.fail(new SqlError({
|
|
126
|
-
cause,
|
|
127
|
-
message: "Failed to acquire connection"
|
|
233
|
+
reason: classifyError(cause, "Failed to acquire connection", "acquireConnection")
|
|
128
234
|
})));
|
|
129
235
|
} else {
|
|
130
236
|
resume(Effect.succeed(conn));
|
|
@@ -148,18 +254,24 @@ export const make = options => Effect.gen(function* () {
|
|
|
148
254
|
});
|
|
149
255
|
});
|
|
150
256
|
/**
|
|
257
|
+
* Creates a layer from a `Config`-wrapped MySQL client configuration, providing both `MysqlClient` and `SqlClient`.
|
|
258
|
+
*
|
|
151
259
|
* @category layers
|
|
152
|
-
* @since
|
|
260
|
+
* @since 4.0.0
|
|
153
261
|
*/
|
|
154
|
-
export const layerConfig = config => Layer.
|
|
262
|
+
export const layerConfig = config => Layer.effectContext(Config.unwrap(config).pipe(Effect.flatMap(make), Effect.map(client => Context.make(MysqlClient, client).pipe(Context.add(Client.SqlClient, client))))).pipe(Layer.provide(Reactivity.layer));
|
|
155
263
|
/**
|
|
264
|
+
* Creates a layer from a concrete MySQL client configuration, providing both `MysqlClient` and `SqlClient`.
|
|
265
|
+
*
|
|
156
266
|
* @category layers
|
|
157
|
-
* @since
|
|
267
|
+
* @since 4.0.0
|
|
158
268
|
*/
|
|
159
|
-
export const layer = config => Layer.
|
|
269
|
+
export const layer = config => Layer.effectContext(Effect.map(make(config), client => Context.make(MysqlClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
|
|
160
270
|
/**
|
|
271
|
+
* Creates the MySQL statement compiler, using `?` placeholders and backtick-escaped identifiers.
|
|
272
|
+
*
|
|
161
273
|
* @category compiler
|
|
162
|
-
* @since
|
|
274
|
+
* @since 4.0.0
|
|
163
275
|
*/
|
|
164
276
|
export const makeCompiler = transform => Statement.makeCompiler({
|
|
165
277
|
dialect: "mysql",
|
|
@@ -184,8 +296,7 @@ function queryStream(conn, sql, params) {
|
|
|
184
296
|
let buffer = [];
|
|
185
297
|
let taskPending = false;
|
|
186
298
|
query.on("error", cause => emit.fail(new SqlError({
|
|
187
|
-
cause,
|
|
188
|
-
message: "Failed to stream statement"
|
|
299
|
+
reason: classifyError(cause, "Failed to stream statement", "stream")
|
|
189
300
|
})));
|
|
190
301
|
query.on("data", row => {
|
|
191
302
|
buffer.push(row);
|
package/dist/MysqlClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MysqlClient.js","names":["Config","Duration","Effect","Layer","Redacted","ServiceMap","Stream","Reactivity","Client","SqlError","asyncPauseResume","Statement","Mysql","ATTR_DB_SYSTEM_NAME","ATTR_DB_NAMESPACE","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT","TypeId","MysqlClient","Service","make","options","gen","compiler","makeCompiler","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","ConnectionImpl","conn","constructor","runRaw","sql","values","rowsAsArray","method","callback","resume","cause","results","_fields","fail","message","succeed","run","pipe","map","Array","isArray","execute","params","executeRaw","executeValues","executeUnprepared","executeStream","stream","queryStream","mapArray","_","pool","url","createPool","uri","value","multipleStatements","supportBigNumbers","connectionLimit","maxConnections","idleTimeout","connectionTTL","toMillis","fromInputUnsafe","poolConfig","host","port","database","user","username","password","acquireRelease","query","void","end","timeoutOrElse","duration","seconds","onTimeout","Error","poolConnection","acquireConn","getConnection","sync","release","transactionAcquirer","spanAttributes","Object","entries","push","assign","acquirer","config","layerConfig","effectServices","unwrap","asEffect","flatMap","client","add","SqlClient","provide","layer","transform","dialect","placeholder","onIdentifier","withoutTransform","escape","onCustom","onRecordUpdate","defaultEscape","fnUntraced","emit","addFinalizer","destroy","buffer","taskPending","on","row","queueMicrotask","items","length","onPause","pause","onResume"],"sources":["../src/MysqlClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"MysqlClient.js","names":["Config","Context","Duration","Effect","Layer","Redacted","Stream","Reactivity","Client","AuthenticationError","AuthorizationError","ConnectionError","ConstraintError","DeadlockError","LockTimeoutError","SqlError","SqlSyntaxError","StatementTimeoutError","UniqueViolation","UnknownError","asyncPauseResume","Statement","Mysql","ATTR_DB_SYSTEM_NAME","ATTR_DB_NAMESPACE","ATTR_SERVER_ADDRESS","ATTR_SERVER_PORT","mysqlErrnoFromCause","cause","undefined","errno","mysqlConnectionErrorCodes","Set","mysqlAuthorizationErrorCodes","mysqlSyntaxErrorCodes","mysqlConstraintErrorCodes","UNKNOWN_CONSTRAINT","normalizeConstraintIdentifier","identifier","trimmed","trim","length","mysqlCauseProperty","property","mysqlDuplicateEntryConstraintFromMessage","message","match","exec","mysqlDuplicateEntryConstraintFromCause","constraint","sqlMessageConstraint","classifyError","operation","props","has","TypeId","MysqlClient","Service","make","options","gen","compiler","makeCompiler","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","ConnectionImpl","conn","constructor","runRaw","sql","values","rowsAsArray","method","callback","resume","results","_fields","fail","reason","succeed","run","pipe","map","Array","isArray","execute","params","executeRaw","executeValues","executeValuesUnprepared","executeUnprepared","executeStream","stream","queryStream","mapArray","_","pool","url","createPool","uri","value","multipleStatements","supportBigNumbers","connectionLimit","maxConnections","idleTimeout","connectionTTL","toMillis","fromInputUnsafe","poolConfig","host","port","database","user","username","password","acquireRelease","query","void","end","timeoutOrElse","duration","seconds","orElse","Error","poolConnection","acquireConn","getConnection","sync","release","transactionAcquirer","spanAttributes","Object","entries","push","assign","acquirer","config","layerConfig","effectContext","unwrap","flatMap","client","add","SqlClient","provide","layer","transform","dialect","placeholder","onIdentifier","withoutTransform","escape","onCustom","onRecordUpdate","defaultEscape","fnUntraced","emit","addFinalizer","destroy","buffer","taskPending","on","row","queueMicrotask","items","onPause","pause","onResume"],"sources":["../src/MysqlClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/MysqlMigrator.d.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* MySQL adapter for the shared Effect SQL migration runner.
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports the shared `Migrator` loaders and error types, then
|
|
5
|
+
* provides `run` and `layer` helpers that apply ordered migrations through the
|
|
6
|
+
* current mysql2-backed `SqlClient`. `run` returns the applied migration IDs
|
|
7
|
+
* and names, while `layer` runs migrations during layer construction and
|
|
8
|
+
* provides no services.
|
|
9
|
+
*
|
|
10
|
+
* @since 4.0.0
|
|
3
11
|
*/
|
|
4
12
|
import type * as Effect from "effect/Effect";
|
|
5
13
|
import * as Layer from "effect/Layer";
|
|
@@ -7,17 +15,21 @@ import * as Migrator from "effect/unstable/sql/Migrator";
|
|
|
7
15
|
import type * as Client from "effect/unstable/sql/SqlClient";
|
|
8
16
|
import type { SqlError } from "effect/unstable/sql/SqlError";
|
|
9
17
|
/**
|
|
10
|
-
* @since
|
|
18
|
+
* @since 4.0.0
|
|
11
19
|
*/
|
|
12
20
|
export * from "effect/unstable/sql/Migrator";
|
|
13
21
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
22
|
+
* Runs SQL migrations using the configured `SqlClient`, returning the migrations that were applied.
|
|
23
|
+
*
|
|
24
|
+
* @category constructors
|
|
25
|
+
* @since 4.0.0
|
|
16
26
|
*/
|
|
17
27
|
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
28
|
/**
|
|
29
|
+
* Creates a layer that runs the configured SQL migrations during layer construction.
|
|
30
|
+
*
|
|
19
31
|
* @category layers
|
|
20
|
-
* @since
|
|
32
|
+
* @since 4.0.0
|
|
21
33
|
*/
|
|
22
34
|
export declare const layer: <R>(options: Migrator.MigratorOptions<R>) => Layer.Layer<never, Migrator.MigrationError | SqlError, Client.SqlClient | R>;
|
|
23
35
|
//# sourceMappingURL=MysqlMigrator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MysqlMigrator.d.ts","sourceRoot":"","sources":["../src/MysqlMigrator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"MysqlMigrator.d.ts","sourceRoot":"","sources":["../src/MysqlMigrator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAA;AAC5C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,QAAQ,MAAM,8BAA8B,CAAA;AACxD,OAAO,KAAK,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAC5D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAE5D;;GAEG;AACH,cAAc,8BAA8B,CAAA;AAE5C;;;;;GAKG;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,CAsDrB,CAAA;AAEF;;;;;GAKG;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"}
|
package/dist/MysqlMigrator.js
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
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 using the configured `SqlClient`, returning the migrations that were applied.
|
|
9
|
+
*
|
|
10
|
+
* @category constructors
|
|
11
|
+
* @since 4.0.0
|
|
10
12
|
*/
|
|
11
13
|
export const run = /*#__PURE__*/Migrator.make({
|
|
12
14
|
// TODO: re-add when Command module is available
|
|
@@ -63,8 +65,10 @@ export const run = /*#__PURE__*/Migrator.make({
|
|
|
63
65
|
// }
|
|
64
66
|
});
|
|
65
67
|
/**
|
|
68
|
+
* Creates a layer that runs the configured SQL migrations during layer construction.
|
|
69
|
+
*
|
|
66
70
|
* @category layers
|
|
67
|
-
* @since
|
|
71
|
+
* @since 4.0.0
|
|
68
72
|
*/
|
|
69
73
|
export const layer = options => Layer.effectDiscard(run(options));
|
|
70
74
|
//# sourceMappingURL=MysqlMigrator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MysqlMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/MysqlMigrator.ts"],"sourcesContent":[null],"mappings":"
|
|
1
|
+
{"version":3,"file":"MysqlMigrator.js","names":["Layer","Migrator","run","make","layer","options","effectDiscard"],"sources":["../src/MysqlMigrator.ts"],"sourcesContent":[null],"mappings":"AAYA,OAAO,KAAKA,KAAK,MAAM,cAAc;AACrC,OAAO,KAAKC,QAAQ,MAAM,8BAA8B;AAIxD;;;AAGA,cAAc,8BAA8B;AAE5C;;;;;;AAMA,OAAO,MAAMC,GAAG,gBAMZD,QAAQ,CAACE,IAAI,CAAC;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA,CACD,CAAC;AAEF;;;;;;AAMA,OAAO,MAAMC,KAAK,GAChBC,OAAoC,IAKjCL,KAAK,CAACM,aAAa,CAACJ,GAAG,CAACG,OAAO,CAAC,CAAC","ignoreList":[]}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @since
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
/**
|
|
5
|
-
* @since
|
|
5
|
+
* @since 4.0.0
|
|
6
6
|
*/
|
|
7
7
|
export * as MysqlClient from "./MysqlClient.ts";
|
|
8
8
|
/**
|
|
9
|
-
* @since
|
|
9
|
+
* @since 4.0.0
|
|
10
10
|
*/
|
|
11
11
|
export * as MysqlMigrator from "./MysqlMigrator.ts";
|
|
12
12
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @since
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
// @barrel: Auto-generated exports. Do not edit manually.
|
|
5
5
|
/**
|
|
6
|
-
* @since
|
|
6
|
+
* @since 4.0.0
|
|
7
7
|
*/
|
|
8
8
|
export * as MysqlClient from "./MysqlClient.js";
|
|
9
9
|
/**
|
|
10
|
-
* @since
|
|
10
|
+
* @since 4.0.0
|
|
11
11
|
*/
|
|
12
12
|
export * as MysqlMigrator from "./MysqlMigrator.js";
|
|
13
13
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/sql-mysql2",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.91",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "A MySQL toolkit for Effect",
|
|
@@ -43,14 +43,14 @@
|
|
|
43
43
|
"provenance": true
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@testcontainers/mysql": "^11.
|
|
47
|
-
"effect": "^4.0.0-beta.
|
|
46
|
+
"@testcontainers/mysql": "^11.14.0",
|
|
47
|
+
"effect": "^4.0.0-beta.91"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"effect": "^4.0.0-beta.
|
|
50
|
+
"effect": "^4.0.0-beta.91"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"mysql2": "^3.
|
|
53
|
+
"mysql2": "^3.22.3"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"codegen": "effect-utils codegen",
|
package/src/MysqlClient.ts
CHANGED
|
@@ -1,18 +1,39 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* MySQL adapter for Effect SQL, backed by the `mysql2` driver.
|
|
3
|
+
*
|
|
4
|
+
* This module provides constructors and layers for a {@link MysqlClient} and
|
|
5
|
+
* the generic Effect SQL client service. `make` creates a managed mysql2 pool,
|
|
6
|
+
* checks the connection with `SELECT 1`, maps mysql2 failures to `SqlError`,
|
|
7
|
+
* supports transaction connections, and exposes streaming queries through
|
|
8
|
+
* mysql2 query streams. It also provides direct and config-backed layers plus a
|
|
9
|
+
* MySQL statement compiler.
|
|
10
|
+
*
|
|
11
|
+
* @since 4.0.0
|
|
3
12
|
*/
|
|
4
13
|
import * as Config from "effect/Config"
|
|
14
|
+
import * as Context from "effect/Context"
|
|
5
15
|
import * as Duration from "effect/Duration"
|
|
6
16
|
import * as Effect from "effect/Effect"
|
|
7
17
|
import * as Layer from "effect/Layer"
|
|
8
18
|
import * as Redacted from "effect/Redacted"
|
|
9
19
|
import type { Scope } from "effect/Scope"
|
|
10
|
-
import * as ServiceMap from "effect/ServiceMap"
|
|
11
20
|
import * as Stream from "effect/Stream"
|
|
12
21
|
import * as Reactivity from "effect/unstable/reactivity/Reactivity"
|
|
13
22
|
import * as Client from "effect/unstable/sql/SqlClient"
|
|
14
23
|
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
15
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
AuthenticationError,
|
|
26
|
+
AuthorizationError,
|
|
27
|
+
ConnectionError,
|
|
28
|
+
ConstraintError,
|
|
29
|
+
DeadlockError,
|
|
30
|
+
LockTimeoutError,
|
|
31
|
+
SqlError,
|
|
32
|
+
SqlSyntaxError,
|
|
33
|
+
StatementTimeoutError,
|
|
34
|
+
UniqueViolation,
|
|
35
|
+
UnknownError
|
|
36
|
+
} from "effect/unstable/sql/SqlError"
|
|
16
37
|
import { asyncPauseResume } from "effect/unstable/sql/SqlStream"
|
|
17
38
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
18
39
|
import * as Mysql from "mysql2"
|
|
@@ -22,21 +43,118 @@ const ATTR_DB_NAMESPACE = "db.namespace"
|
|
|
22
43
|
const ATTR_SERVER_ADDRESS = "server.address"
|
|
23
44
|
const ATTR_SERVER_PORT = "server.port"
|
|
24
45
|
|
|
46
|
+
const mysqlErrnoFromCause = (cause: unknown): number | undefined => {
|
|
47
|
+
if (typeof cause !== "object" || cause === null || !("errno" in cause)) {
|
|
48
|
+
return undefined
|
|
49
|
+
}
|
|
50
|
+
const errno = cause.errno
|
|
51
|
+
return typeof errno === "number" ? errno : undefined
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const mysqlConnectionErrorCodes = new Set([1040, 1042, 1043, 1129, 1130, 1203])
|
|
55
|
+
const mysqlAuthorizationErrorCodes = new Set([1044, 1142, 1143, 1227])
|
|
56
|
+
const mysqlSyntaxErrorCodes = new Set([1054, 1064, 1146])
|
|
57
|
+
const mysqlConstraintErrorCodes = new Set([1022, 1048, 1169, 1216, 1217, 1451, 1452, 1557])
|
|
58
|
+
|
|
59
|
+
const UNKNOWN_CONSTRAINT = "unknown"
|
|
60
|
+
|
|
61
|
+
const normalizeConstraintIdentifier = (identifier: unknown): string => {
|
|
62
|
+
if (typeof identifier !== "string") {
|
|
63
|
+
return UNKNOWN_CONSTRAINT
|
|
64
|
+
}
|
|
65
|
+
const trimmed = identifier.trim()
|
|
66
|
+
return trimmed.length === 0 ? UNKNOWN_CONSTRAINT : trimmed
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
const mysqlCauseProperty = (cause: unknown, property: "constraint" | "message" | "sqlMessage"): unknown => {
|
|
70
|
+
if (typeof cause !== "object" || cause === null || !(property in cause)) {
|
|
71
|
+
return undefined
|
|
72
|
+
}
|
|
73
|
+
return (cause as Record<string, unknown>)[property]
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const mysqlDuplicateEntryConstraintFromMessage = (message: unknown): string => {
|
|
77
|
+
if (typeof message !== "string") {
|
|
78
|
+
return UNKNOWN_CONSTRAINT
|
|
79
|
+
}
|
|
80
|
+
const match = /\bfor key\s+(?:'([^']*)'|\x60([^\x60]*)\x60|([^\s'\x60]+))/i.exec(message)
|
|
81
|
+
return match === null ?
|
|
82
|
+
UNKNOWN_CONSTRAINT :
|
|
83
|
+
normalizeConstraintIdentifier(match[1] ?? match[2] ?? match[3])
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const mysqlDuplicateEntryConstraintFromCause = (cause: unknown): string => {
|
|
87
|
+
const constraint = normalizeConstraintIdentifier(mysqlCauseProperty(cause, "constraint"))
|
|
88
|
+
if (constraint !== UNKNOWN_CONSTRAINT) {
|
|
89
|
+
return constraint
|
|
90
|
+
}
|
|
91
|
+
const sqlMessageConstraint = mysqlDuplicateEntryConstraintFromMessage(mysqlCauseProperty(cause, "sqlMessage"))
|
|
92
|
+
if (sqlMessageConstraint !== UNKNOWN_CONSTRAINT) {
|
|
93
|
+
return sqlMessageConstraint
|
|
94
|
+
}
|
|
95
|
+
return mysqlDuplicateEntryConstraintFromMessage(mysqlCauseProperty(cause, "message"))
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
const classifyError = (
|
|
99
|
+
cause: unknown,
|
|
100
|
+
message: string,
|
|
101
|
+
operation: string
|
|
102
|
+
) => {
|
|
103
|
+
const props = { cause, message, operation }
|
|
104
|
+
const errno = mysqlErrnoFromCause(cause)
|
|
105
|
+
if (errno !== undefined) {
|
|
106
|
+
if (mysqlConnectionErrorCodes.has(errno)) {
|
|
107
|
+
return new ConnectionError(props)
|
|
108
|
+
}
|
|
109
|
+
if (errno === 1045) {
|
|
110
|
+
return new AuthenticationError(props)
|
|
111
|
+
}
|
|
112
|
+
if (mysqlAuthorizationErrorCodes.has(errno)) {
|
|
113
|
+
return new AuthorizationError(props)
|
|
114
|
+
}
|
|
115
|
+
if (mysqlSyntaxErrorCodes.has(errno)) {
|
|
116
|
+
return new SqlSyntaxError(props)
|
|
117
|
+
}
|
|
118
|
+
if (errno === 1062) {
|
|
119
|
+
return new UniqueViolation({ ...props, constraint: mysqlDuplicateEntryConstraintFromCause(cause) })
|
|
120
|
+
}
|
|
121
|
+
if (mysqlConstraintErrorCodes.has(errno)) {
|
|
122
|
+
return new ConstraintError(props)
|
|
123
|
+
}
|
|
124
|
+
if (errno === 1213) {
|
|
125
|
+
return new DeadlockError(props)
|
|
126
|
+
}
|
|
127
|
+
if (errno === 1205) {
|
|
128
|
+
return new LockTimeoutError(props)
|
|
129
|
+
}
|
|
130
|
+
if (errno === 3024) {
|
|
131
|
+
return new StatementTimeoutError(props)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return new UnknownError(props)
|
|
135
|
+
}
|
|
136
|
+
|
|
25
137
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
138
|
+
* Runtime type identifier used to mark `MysqlClient` values.
|
|
139
|
+
*
|
|
140
|
+
* @category type IDs
|
|
141
|
+
* @since 4.0.0
|
|
28
142
|
*/
|
|
29
143
|
export const TypeId: TypeId = "~@effect/sql-mysql2/MysqlClient"
|
|
30
144
|
|
|
31
145
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
146
|
+
* Type-level identifier used to mark `MysqlClient` values.
|
|
147
|
+
*
|
|
148
|
+
* @category type IDs
|
|
149
|
+
* @since 4.0.0
|
|
34
150
|
*/
|
|
35
151
|
export type TypeId = "~@effect/sql-mysql2/MysqlClient"
|
|
36
152
|
|
|
37
153
|
/**
|
|
154
|
+
* mysql2-backed SQL client service, extending `SqlClient` with its runtime type marker and client configuration.
|
|
155
|
+
*
|
|
38
156
|
* @category models
|
|
39
|
-
* @since
|
|
157
|
+
* @since 4.0.0
|
|
40
158
|
*/
|
|
41
159
|
export interface MysqlClient extends Client.SqlClient {
|
|
42
160
|
readonly [TypeId]: TypeId
|
|
@@ -44,14 +162,22 @@ export interface MysqlClient extends Client.SqlClient {
|
|
|
44
162
|
}
|
|
45
163
|
|
|
46
164
|
/**
|
|
47
|
-
*
|
|
48
|
-
*
|
|
165
|
+
* Service tag for the mysql2 SQL client service.
|
|
166
|
+
*
|
|
167
|
+
* **When to use**
|
|
168
|
+
*
|
|
169
|
+
* Use to access or provide a mysql2 client through the Effect context.
|
|
170
|
+
*
|
|
171
|
+
* @category services
|
|
172
|
+
* @since 4.0.0
|
|
49
173
|
*/
|
|
50
|
-
export const MysqlClient =
|
|
174
|
+
export const MysqlClient = Context.Service<MysqlClient>("@effect/sql-mysql2/MysqlClient")
|
|
51
175
|
|
|
52
176
|
/**
|
|
177
|
+
* Configuration for a mysql2 client, including connection URI or connection fields, pool options, span attributes, and query/result name transforms.
|
|
178
|
+
*
|
|
53
179
|
* @category models
|
|
54
|
-
* @since
|
|
180
|
+
* @since 4.0.0
|
|
55
181
|
*/
|
|
56
182
|
export interface MysqlClientConfig {
|
|
57
183
|
/**
|
|
@@ -77,8 +203,10 @@ export interface MysqlClientConfig {
|
|
|
77
203
|
}
|
|
78
204
|
|
|
79
205
|
/**
|
|
206
|
+
* Creates a scoped MySQL client backed by a managed mysql2 pool, verifying connectivity and supporting streaming queries through mysql2 query streams.
|
|
207
|
+
*
|
|
80
208
|
* @category constructors
|
|
81
|
-
* @since
|
|
209
|
+
* @since 4.0.0
|
|
82
210
|
*/
|
|
83
211
|
export const make = (
|
|
84
212
|
options: MysqlClientConfig
|
|
@@ -104,13 +232,16 @@ export const make = (
|
|
|
104
232
|
method: "execute" | "query" = "execute"
|
|
105
233
|
) {
|
|
106
234
|
return Effect.callback<unknown, SqlError>((resume) => {
|
|
235
|
+
const operation = method === "query" ? "executeUnprepared" : "execute"
|
|
107
236
|
;(this.conn as any)[method]({
|
|
108
237
|
sql,
|
|
109
238
|
values,
|
|
110
239
|
rowsAsArray
|
|
111
240
|
}, (cause: unknown | null, results: unknown, _fields: any) => {
|
|
112
241
|
if (cause) {
|
|
113
|
-
resume(
|
|
242
|
+
resume(
|
|
243
|
+
Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", operation) }))
|
|
244
|
+
)
|
|
114
245
|
} else {
|
|
115
246
|
resume(Effect.succeed(results))
|
|
116
247
|
}
|
|
@@ -144,6 +275,9 @@ export const make = (
|
|
|
144
275
|
executeValues(sql: string, params: ReadonlyArray<unknown>) {
|
|
145
276
|
return this.run(sql, params, true)
|
|
146
277
|
}
|
|
278
|
+
executeValuesUnprepared(sql: string, params: ReadonlyArray<unknown>) {
|
|
279
|
+
return this.run(sql, params, true, "query")
|
|
280
|
+
}
|
|
147
281
|
executeUnprepared(
|
|
148
282
|
sql: string,
|
|
149
283
|
params: ReadonlyArray<unknown>,
|
|
@@ -198,8 +332,7 @@ export const make = (
|
|
|
198
332
|
if (cause) {
|
|
199
333
|
resume(Effect.fail(
|
|
200
334
|
new SqlError({
|
|
201
|
-
cause,
|
|
202
|
-
message: "MysqlClient: Failed to connect"
|
|
335
|
+
reason: classifyError(cause, "MysqlClient: Failed to connect", "connect")
|
|
203
336
|
})
|
|
204
337
|
))
|
|
205
338
|
} else {
|
|
@@ -214,11 +347,14 @@ export const make = (
|
|
|
214
347
|
).pipe(
|
|
215
348
|
Effect.timeoutOrElse({
|
|
216
349
|
duration: Duration.seconds(5),
|
|
217
|
-
|
|
350
|
+
orElse: () =>
|
|
218
351
|
Effect.fail(
|
|
219
352
|
new SqlError({
|
|
220
|
-
|
|
221
|
-
|
|
353
|
+
reason: new ConnectionError({
|
|
354
|
+
message: "MysqlClient: Connection timeout",
|
|
355
|
+
cause: new Error("connection timeout"),
|
|
356
|
+
operation: "connect"
|
|
357
|
+
})
|
|
222
358
|
})
|
|
223
359
|
)
|
|
224
360
|
})
|
|
@@ -230,7 +366,13 @@ export const make = (
|
|
|
230
366
|
Effect.callback<Mysql.PoolConnection, SqlError>((resume) => {
|
|
231
367
|
pool.getConnection((cause, conn) => {
|
|
232
368
|
if (cause) {
|
|
233
|
-
resume(
|
|
369
|
+
resume(
|
|
370
|
+
Effect.fail(
|
|
371
|
+
new SqlError({
|
|
372
|
+
reason: classifyError(cause, "Failed to acquire connection", "acquireConnection")
|
|
373
|
+
})
|
|
374
|
+
)
|
|
375
|
+
)
|
|
234
376
|
} else {
|
|
235
377
|
resume(Effect.succeed(conn))
|
|
236
378
|
}
|
|
@@ -268,40 +410,46 @@ export const make = (
|
|
|
268
410
|
})
|
|
269
411
|
|
|
270
412
|
/**
|
|
413
|
+
* Creates a layer from a `Config`-wrapped MySQL client configuration, providing both `MysqlClient` and `SqlClient`.
|
|
414
|
+
*
|
|
271
415
|
* @category layers
|
|
272
|
-
* @since
|
|
416
|
+
* @since 4.0.0
|
|
273
417
|
*/
|
|
274
418
|
export const layerConfig = (
|
|
275
419
|
config: Config.Wrap<MysqlClientConfig>
|
|
276
420
|
): Layer.Layer<MysqlClient | Client.SqlClient, Config.ConfigError | SqlError> =>
|
|
277
|
-
Layer.
|
|
278
|
-
Config.unwrap(config).
|
|
421
|
+
Layer.effectContext(
|
|
422
|
+
Config.unwrap(config).pipe(
|
|
279
423
|
Effect.flatMap(make),
|
|
280
424
|
Effect.map((client) =>
|
|
281
|
-
|
|
282
|
-
|
|
425
|
+
Context.make(MysqlClient, client).pipe(
|
|
426
|
+
Context.add(Client.SqlClient, client)
|
|
283
427
|
)
|
|
284
428
|
)
|
|
285
429
|
)
|
|
286
430
|
).pipe(Layer.provide(Reactivity.layer))
|
|
287
431
|
|
|
288
432
|
/**
|
|
433
|
+
* Creates a layer from a concrete MySQL client configuration, providing both `MysqlClient` and `SqlClient`.
|
|
434
|
+
*
|
|
289
435
|
* @category layers
|
|
290
|
-
* @since
|
|
436
|
+
* @since 4.0.0
|
|
291
437
|
*/
|
|
292
438
|
export const layer = (
|
|
293
439
|
config: MysqlClientConfig
|
|
294
440
|
): Layer.Layer<MysqlClient | Client.SqlClient, Config.ConfigError | SqlError> =>
|
|
295
|
-
Layer.
|
|
441
|
+
Layer.effectContext(
|
|
296
442
|
Effect.map(make(config), (client) =>
|
|
297
|
-
|
|
298
|
-
|
|
443
|
+
Context.make(MysqlClient, client).pipe(
|
|
444
|
+
Context.add(Client.SqlClient, client)
|
|
299
445
|
))
|
|
300
446
|
).pipe(Layer.provide(Reactivity.layer))
|
|
301
447
|
|
|
302
448
|
/**
|
|
449
|
+
* Creates the MySQL statement compiler, using `?` placeholders and backtick-escaped identifiers.
|
|
450
|
+
*
|
|
303
451
|
* @category compiler
|
|
304
|
-
* @since
|
|
452
|
+
* @since 4.0.0
|
|
305
453
|
*/
|
|
306
454
|
export const makeCompiler = (transform?: (_: string) => string) =>
|
|
307
455
|
Statement.makeCompiler({
|
|
@@ -331,11 +479,15 @@ function queryStream(
|
|
|
331
479
|
) {
|
|
332
480
|
return asyncPauseResume<any, SqlError>(Effect.fnUntraced(function*(emit) {
|
|
333
481
|
const query = (conn as any).query(sql, params).stream()
|
|
334
|
-
yield* Effect.addFinalizer(() => Effect.sync(() => query.destroy()))
|
|
482
|
+
yield* Effect.addFinalizer(() => Effect.sync(() => query.destroy() as void))
|
|
335
483
|
|
|
336
484
|
let buffer: Array<any> = []
|
|
337
485
|
let taskPending = false
|
|
338
|
-
query.on(
|
|
486
|
+
query.on(
|
|
487
|
+
"error",
|
|
488
|
+
(cause: unknown) =>
|
|
489
|
+
emit.fail(new SqlError({ reason: classifyError(cause, "Failed to stream statement", "stream") }))
|
|
490
|
+
)
|
|
339
491
|
query.on("data", (row: any) => {
|
|
340
492
|
buffer.push(row)
|
|
341
493
|
if (!taskPending) {
|
package/src/MysqlMigrator.ts
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* MySQL adapter for the shared Effect SQL migration runner.
|
|
3
|
+
*
|
|
4
|
+
* This module re-exports the shared `Migrator` loaders and error types, then
|
|
5
|
+
* provides `run` and `layer` helpers that apply ordered migrations through the
|
|
6
|
+
* current mysql2-backed `SqlClient`. `run` returns the applied migration IDs
|
|
7
|
+
* and names, while `layer` runs migrations during layer construction and
|
|
8
|
+
* provides no services.
|
|
9
|
+
*
|
|
10
|
+
* @since 4.0.0
|
|
3
11
|
*/
|
|
4
12
|
import type * as Effect from "effect/Effect"
|
|
5
13
|
import * as Layer from "effect/Layer"
|
|
@@ -8,13 +16,15 @@ import type * as Client from "effect/unstable/sql/SqlClient"
|
|
|
8
16
|
import type { SqlError } from "effect/unstable/sql/SqlError"
|
|
9
17
|
|
|
10
18
|
/**
|
|
11
|
-
* @since
|
|
19
|
+
* @since 4.0.0
|
|
12
20
|
*/
|
|
13
21
|
export * from "effect/unstable/sql/Migrator"
|
|
14
22
|
|
|
15
23
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
24
|
+
* Runs SQL migrations using the configured `SqlClient`, returning the migrations that were applied.
|
|
25
|
+
*
|
|
26
|
+
* @category constructors
|
|
27
|
+
* @since 4.0.0
|
|
18
28
|
*/
|
|
19
29
|
export const run: <R2 = never>(
|
|
20
30
|
{ loader, schemaDirectory, table }: Migrator.MigratorOptions<R2>
|
|
@@ -78,8 +88,10 @@ export const run: <R2 = never>(
|
|
|
78
88
|
})
|
|
79
89
|
|
|
80
90
|
/**
|
|
91
|
+
* Creates a layer that runs the configured SQL migrations during layer construction.
|
|
92
|
+
*
|
|
81
93
|
* @category layers
|
|
82
|
-
* @since
|
|
94
|
+
* @since 4.0.0
|
|
83
95
|
*/
|
|
84
96
|
export const layer = <R>(
|
|
85
97
|
options: Migrator.MigratorOptions<R>
|
package/src/index.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @since
|
|
2
|
+
* @since 4.0.0
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
// @barrel: Auto-generated exports. Do not edit manually.
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* @since
|
|
8
|
+
* @since 4.0.0
|
|
9
9
|
*/
|
|
10
10
|
export * as MysqlClient from "./MysqlClient.ts"
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* @since
|
|
13
|
+
* @since 4.0.0
|
|
14
14
|
*/
|
|
15
15
|
export * as MysqlMigrator from "./MysqlMigrator.ts"
|