@effect/sql-sqlite-node 4.0.0-beta.92 → 4.0.0-beta.94
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/README.md +1 -1
- package/dist/SqliteClient.d.ts +1 -2
- package/dist/SqliteClient.d.ts.map +1 -1
- package/dist/SqliteClient.js +96 -64
- package/dist/SqliteClient.js.map +1 -1
- package/package.json +5 -8
- package/src/SqliteClient.ts +105 -68
package/README.md
CHANGED
package/dist/SqliteClient.d.ts
CHANGED
|
@@ -30,7 +30,6 @@ export type TypeId = "~@effect/sql-sqlite-node/SqliteClient";
|
|
|
30
30
|
export interface SqliteClient extends Client.SqlClient {
|
|
31
31
|
readonly [TypeId]: TypeId;
|
|
32
32
|
readonly config: SqliteClientConfig;
|
|
33
|
-
readonly export: Effect.Effect<Uint8Array, SqlError>;
|
|
34
33
|
readonly backup: (destination: string) => Effect.Effect<BackupMetadata, SqlError>;
|
|
35
34
|
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>;
|
|
36
35
|
/** Not supported in sqlite */
|
|
@@ -54,7 +53,7 @@ export interface BackupMetadata {
|
|
|
54
53
|
*/
|
|
55
54
|
export declare const SqliteClient: Context.Service<SqliteClient, SqliteClient>;
|
|
56
55
|
/**
|
|
57
|
-
* Configuration for a node SQLite client backed by `
|
|
56
|
+
* Configuration for a node SQLite client backed by `node:sqlite`, including the database filename, read-only mode, statement cache settings, WAL behavior, span attributes, and query/result name transforms.
|
|
58
57
|
*
|
|
59
58
|
* @category models
|
|
60
59
|
* @since 4.0.0
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SqliteClient.d.ts","sourceRoot":"","sources":["../src/SqliteClient.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAGrC,OAAO,KAAK,UAAU,MAAM,uCAAuC,CAAA;AACnE,OAAO,KAAK,MAAM,MAAM,+BAA+B,CAAA;AAEvD,OAAO,EAAuB,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAO5E;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,MAAgD,CAAA;AAErE;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,uCAAuC,CAAA;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,YAAa,SAAQ,MAAM,CAAC,SAAS;IACpD,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAA;IACnC,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAA;IACjF,QAAQ,CAAC,aAAa,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;IAEvE,8BAA8B;IAC9B,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAA;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAChC;AAED;;;;;GAKG;AACH,eAAO,MAAM,YAAY,6CAAwE,CAAA;AAEjG;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,eAAe,CAAC,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IAE7D,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;AAOD;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GACf,SAAS,kBAAkB,KAC1B,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,UAAU,CA4MrE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,QAAQ,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,KACtC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,WAAW,CAUzB,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,kBAAkB,KACzB,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS,CAML,CAAA"}
|
package/dist/SqliteClient.js
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Connects Effect SQL to SQLite on Node.js using `
|
|
2
|
+
* Connects Effect SQL to SQLite on Node.js using `node:sqlite`.
|
|
3
3
|
*
|
|
4
4
|
* This module opens a SQLite database and exposes it as both `SqliteClient` and
|
|
5
5
|
* the generic Effect SQL client. It serializes access through one connection,
|
|
6
6
|
* caches prepared statements, enables WAL mode unless disabled, and supports
|
|
7
|
-
* database
|
|
7
|
+
* database backup, and extension loading. Streaming queries and
|
|
8
8
|
* `updateValues` are not supported by this driver.
|
|
9
9
|
*
|
|
10
10
|
* @since 4.0.0
|
|
11
11
|
*/
|
|
12
|
-
import Sqlite from "better-sqlite3";
|
|
13
12
|
import * as Cache from "effect/Cache";
|
|
14
13
|
import * as Config from "effect/Config";
|
|
15
14
|
import * as Context from "effect/Context";
|
|
@@ -25,11 +24,8 @@ import * as Reactivity from "effect/unstable/reactivity/Reactivity";
|
|
|
25
24
|
import * as Client from "effect/unstable/sql/SqlClient";
|
|
26
25
|
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError";
|
|
27
26
|
import * as Statement from "effect/unstable/sql/Statement";
|
|
27
|
+
import { backup as backupDatabase, DatabaseSync } from "node:sqlite";
|
|
28
28
|
const ATTR_DB_SYSTEM_NAME = "db.system.name";
|
|
29
|
-
const classifyError = (cause, message, operation) => classifySqliteError(cause, {
|
|
30
|
-
message,
|
|
31
|
-
operation
|
|
32
|
-
});
|
|
33
29
|
/**
|
|
34
30
|
* Runtime type identifier used to mark Node `SqliteClient` values.
|
|
35
31
|
*
|
|
@@ -55,12 +51,14 @@ export const make = options => Effect.gen(function* () {
|
|
|
55
51
|
const transformRows = options.transformResultNames ? Statement.defaultTransforms(options.transformResultNames).array : undefined;
|
|
56
52
|
const makeConnection = Effect.gen(function* () {
|
|
57
53
|
const scope = yield* Effect.scope;
|
|
58
|
-
const db = new
|
|
59
|
-
|
|
54
|
+
const db = new DatabaseSync(options.filename, {
|
|
55
|
+
readOnly: options.readonly ?? false,
|
|
56
|
+
allowExtension: true
|
|
60
57
|
});
|
|
61
58
|
yield* Scope.addFinalizer(scope, Effect.sync(() => db.close()));
|
|
59
|
+
db.enableLoadExtension(false);
|
|
62
60
|
if (options.disableWAL !== true) {
|
|
63
|
-
db.
|
|
61
|
+
db.exec("PRAGMA journal_mode = WAL");
|
|
64
62
|
}
|
|
65
63
|
const prepareCache = yield* Cache.make({
|
|
66
64
|
capacity: options.prepareCacheSize ?? 200,
|
|
@@ -73,49 +71,63 @@ export const make = options => Effect.gen(function* () {
|
|
|
73
71
|
})
|
|
74
72
|
});
|
|
75
73
|
const runStatement = (statement, params, raw) => Effect.withFiber(fiber => {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
74
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
|
|
75
|
+
return Effect.try({
|
|
76
|
+
try: () => {
|
|
77
|
+
statement.setReadBigInts(useSafeIntegers);
|
|
78
|
+
if (statement.columns().length > 0) {
|
|
79
|
+
return statement.all(...params);
|
|
80
|
+
}
|
|
81
|
+
const result = statement.run(...params);
|
|
82
|
+
return raw ? {
|
|
83
|
+
changes: result.changes,
|
|
84
|
+
lastInsertRowid: result.lastInsertRowid
|
|
85
|
+
} : [];
|
|
86
|
+
},
|
|
87
|
+
catch: cause => new SqlError({
|
|
87
88
|
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
88
|
-
})
|
|
89
|
-
}
|
|
89
|
+
})
|
|
90
|
+
});
|
|
90
91
|
});
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
try
|
|
94
|
-
|
|
95
|
-
statement.
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
try: () => {
|
|
107
|
-
const statement = db.prepare(sql);
|
|
108
|
-
if (statement.reader) {
|
|
109
|
-
statement.raw(true);
|
|
110
|
-
return statement.all(...params);
|
|
111
|
-
}
|
|
112
|
-
statement.run(...params);
|
|
113
|
-
return [];
|
|
114
|
-
},
|
|
115
|
-
catch: cause => new SqlError({
|
|
116
|
-
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
117
|
-
})
|
|
92
|
+
const runStatementValues = (statement, params) => Effect.withFiber(fiber => {
|
|
93
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
|
|
94
|
+
return Effect.try({
|
|
95
|
+
try: () => {
|
|
96
|
+
statement.setReadBigInts(useSafeIntegers);
|
|
97
|
+
if (statement.columns().length > 0) {
|
|
98
|
+
return statement.all(...params);
|
|
99
|
+
}
|
|
100
|
+
statement.run(...params);
|
|
101
|
+
return [];
|
|
102
|
+
},
|
|
103
|
+
catch: cause => new SqlError({
|
|
104
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
105
|
+
})
|
|
106
|
+
});
|
|
118
107
|
});
|
|
108
|
+
const runStatementValuesUnprepared = (statement, params) => Effect.withFiber(fiber => {
|
|
109
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers);
|
|
110
|
+
return Effect.try({
|
|
111
|
+
try: () => {
|
|
112
|
+
statement.setReadBigInts(useSafeIntegers);
|
|
113
|
+
statement.setReturnArrays(true);
|
|
114
|
+
if (statement.columns().length > 0) {
|
|
115
|
+
return statement.all(...params);
|
|
116
|
+
}
|
|
117
|
+
statement.run(...params);
|
|
118
|
+
return [];
|
|
119
|
+
},
|
|
120
|
+
catch: cause => new SqlError({
|
|
121
|
+
reason: classifyError(cause, "Failed to execute statement", "execute")
|
|
122
|
+
})
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
const run = (sql, params, raw = false) => Effect.flatMap(Cache.get(prepareCache, sql), s => runStatement(s, params, raw));
|
|
126
|
+
const runValues = (sql, params) => Effect.acquireUseRelease(Cache.get(prepareCache, sql), statement => {
|
|
127
|
+
statement.setReturnArrays(true);
|
|
128
|
+
return runStatementValues(statement, params);
|
|
129
|
+
}, statement => Effect.sync(() => statement.setReturnArrays(false)));
|
|
130
|
+
const runValuesUnprepared = (sql, params) => runStatementValuesUnprepared(db.prepare(sql), params);
|
|
119
131
|
return identity({
|
|
120
132
|
execute(sql, params, transformRows) {
|
|
121
133
|
return transformRows ? Effect.map(run(sql, params), transformRows) : run(sql, params);
|
|
@@ -136,27 +148,31 @@ export const make = options => Effect.gen(function* () {
|
|
|
136
148
|
executeStream(_sql, _params) {
|
|
137
149
|
return Stream.die("executeStream not implemented");
|
|
138
150
|
},
|
|
139
|
-
export: Effect.try({
|
|
140
|
-
try: () => db.serialize(),
|
|
141
|
-
catch: cause => new SqlError({
|
|
142
|
-
reason: classifyError(cause, "Failed to export database", "export")
|
|
143
|
-
})
|
|
144
|
-
}),
|
|
145
151
|
backup(destination) {
|
|
146
|
-
return Effect.
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
152
|
+
return Effect.suspend(() => {
|
|
153
|
+
let totalPages = 0;
|
|
154
|
+
return Effect.tryPromise({
|
|
155
|
+
try: () => backupDatabase(db, destination, {
|
|
156
|
+
progress: progress => {
|
|
157
|
+
totalPages = progress.totalPages;
|
|
158
|
+
}
|
|
159
|
+
}).then(pages => ({
|
|
160
|
+
totalPages: totalPages || pages,
|
|
161
|
+
remainingPages: 0
|
|
162
|
+
})),
|
|
163
|
+
catch: cause => new SqlError({
|
|
164
|
+
reason: classifyError(cause, "Failed to backup database", "backup")
|
|
165
|
+
})
|
|
166
|
+
});
|
|
151
167
|
});
|
|
152
168
|
},
|
|
153
169
|
loadExtension(path) {
|
|
154
|
-
return Effect.try({
|
|
170
|
+
return Effect.acquireUseRelease(Effect.sync(() => db.enableLoadExtension(true)), () => Effect.try({
|
|
155
171
|
try: () => db.loadExtension(path),
|
|
156
172
|
catch: cause => new SqlError({
|
|
157
173
|
reason: classifyError(cause, "Failed to load extension", "loadExtension")
|
|
158
174
|
})
|
|
159
|
-
});
|
|
175
|
+
}), () => Effect.sync(() => db.enableLoadExtension(false)));
|
|
160
176
|
}
|
|
161
177
|
});
|
|
162
178
|
});
|
|
@@ -177,7 +193,6 @@ export const make = options => Effect.gen(function* () {
|
|
|
177
193
|
}), {
|
|
178
194
|
[TypeId]: TypeId,
|
|
179
195
|
config: options,
|
|
180
|
-
export: Effect.flatMap(acquirer, _ => _.export),
|
|
181
196
|
backup: destination => Effect.flatMap(acquirer, _ => _.backup(destination)),
|
|
182
197
|
loadExtension: path => Effect.flatMap(acquirer, _ => _.loadExtension(path))
|
|
183
198
|
});
|
|
@@ -196,4 +211,21 @@ export const layerConfig = config => Layer.effectContext(Config.unwrap(config).p
|
|
|
196
211
|
* @since 4.0.0
|
|
197
212
|
*/
|
|
198
213
|
export const layer = config => Layer.effectContext(Effect.map(make(config), client => Context.make(SqliteClient, client).pipe(Context.add(Client.SqlClient, client)))).pipe(Layer.provide(Reactivity.layer));
|
|
214
|
+
// internal
|
|
215
|
+
const classifyError = (cause, message, operation) => classifySqliteError(sqliteCauseWithErrno(cause), {
|
|
216
|
+
message,
|
|
217
|
+
operation
|
|
218
|
+
});
|
|
219
|
+
const sqliteCauseWithErrno = cause => {
|
|
220
|
+
if (typeof cause !== "object" || cause === null || !("errcode" in cause) || "errno" in cause) {
|
|
221
|
+
return cause;
|
|
222
|
+
}
|
|
223
|
+
const errcode = cause.errcode;
|
|
224
|
+
if (typeof errcode !== "number") {
|
|
225
|
+
return cause;
|
|
226
|
+
}
|
|
227
|
+
return Object.assign(cause, {
|
|
228
|
+
errno: errcode
|
|
229
|
+
});
|
|
230
|
+
};
|
|
199
231
|
//# sourceMappingURL=SqliteClient.js.map
|
package/dist/SqliteClient.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteClient.js","names":["Sqlite","Cache","Config","Context","Duration","Effect","Fiber","identity","Layer","Scope","Semaphore","Stream","Reactivity","Client","classifySqliteError","SqlError","Statement","ATTR_DB_SYSTEM_NAME","classifyError","cause","message","operation","TypeId","SqliteClient","Service","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","scope","db","filename","readonly","addFinalizer","sync","close","disableWAL","pragma","prepareCache","capacity","prepareCacheSize","timeToLive","prepareCacheTTL","minutes","lookup","sql","try","prepare","catch","reason","runStatement","statement","params","raw","withFiber","fiber","get","context","SafeIntegers","safeIntegers","reader","succeed","all","result","run","fail","flatMap","s","runValues","acquireUseRelease","runValuesUnprepared","execute","map","executeRaw","executeValues","executeValuesUnprepared","executeUnprepared","effect","executeStream","_sql","_params","die","export","serialize","backup","destination","tryPromise","loadExtension","path","semaphore","connection","acquirer","withPermits","transactionAcquirer","uninterruptibleMask","restore","getCurrent","getUnsafe","as","tap","take","release","Object","assign","spanAttributes","entries","config","_","layerConfig","effectContext","unwrap","pipe","client","add","SqlClient","provide","layer"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"SqliteClient.js","names":["Cache","Config","Context","Duration","Effect","Fiber","identity","Layer","Scope","Semaphore","Stream","Reactivity","Client","classifySqliteError","SqlError","Statement","backup","backupDatabase","DatabaseSync","ATTR_DB_SYSTEM_NAME","TypeId","SqliteClient","Service","make","options","gen","compiler","makeCompilerSqlite","transformQueryNames","transformRows","transformResultNames","defaultTransforms","array","undefined","makeConnection","scope","db","filename","readOnly","readonly","allowExtension","addFinalizer","sync","close","enableLoadExtension","disableWAL","exec","prepareCache","capacity","prepareCacheSize","timeToLive","prepareCacheTTL","minutes","lookup","sql","try","prepare","catch","cause","reason","classifyError","runStatement","statement","params","raw","withFiber","fiber","useSafeIntegers","get","context","SafeIntegers","setReadBigInts","columns","length","all","result","run","changes","lastInsertRowid","runStatementValues","runStatementValuesUnprepared","setReturnArrays","flatMap","s","runValues","acquireUseRelease","runValuesUnprepared","execute","map","executeRaw","executeValues","executeValuesUnprepared","executeUnprepared","effect","executeStream","_sql","_params","die","destination","suspend","totalPages","tryPromise","progress","then","pages","remainingPages","loadExtension","path","semaphore","connection","acquirer","withPermits","succeed","transactionAcquirer","uninterruptibleMask","restore","getCurrent","getUnsafe","as","tap","take","release","Object","assign","spanAttributes","entries","config","_","layerConfig","effectContext","unwrap","pipe","client","add","SqlClient","provide","layer","message","operation","sqliteCauseWithErrno","errcode","errno"],"sources":["../src/SqliteClient.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect/sql-sqlite-node",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.94",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "A SQLite toolkit for Effect",
|
|
@@ -43,15 +43,12 @@
|
|
|
43
43
|
"provenance": true
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@types/
|
|
47
|
-
"effect": "^4.0.0-beta.
|
|
48
|
-
"
|
|
46
|
+
"@types/node": "^25.7.0",
|
|
47
|
+
"@effect/platform-node": "^4.0.0-beta.94",
|
|
48
|
+
"effect": "^4.0.0-beta.94"
|
|
49
49
|
},
|
|
50
50
|
"peerDependencies": {
|
|
51
|
-
"effect": "^4.0.0-beta.
|
|
52
|
-
},
|
|
53
|
-
"dependencies": {
|
|
54
|
-
"better-sqlite3": "^12.9.0"
|
|
51
|
+
"effect": "^4.0.0-beta.94"
|
|
55
52
|
},
|
|
56
53
|
"scripts": {
|
|
57
54
|
"codegen": "effect-utils codegen",
|
package/src/SqliteClient.ts
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Connects Effect SQL to SQLite on Node.js using `
|
|
2
|
+
* Connects Effect SQL to SQLite on Node.js using `node:sqlite`.
|
|
3
3
|
*
|
|
4
4
|
* This module opens a SQLite database and exposes it as both `SqliteClient` and
|
|
5
5
|
* the generic Effect SQL client. It serializes access through one connection,
|
|
6
6
|
* caches prepared statements, enables WAL mode unless disabled, and supports
|
|
7
|
-
* database
|
|
7
|
+
* database backup, and extension loading. Streaming queries and
|
|
8
8
|
* `updateValues` are not supported by this driver.
|
|
9
9
|
*
|
|
10
10
|
* @since 4.0.0
|
|
11
11
|
*/
|
|
12
|
-
import Sqlite from "better-sqlite3"
|
|
13
12
|
import * as Cache from "effect/Cache"
|
|
14
13
|
import * as Config from "effect/Config"
|
|
15
14
|
import * as Context from "effect/Context"
|
|
@@ -26,12 +25,11 @@ import * as Client from "effect/unstable/sql/SqlClient"
|
|
|
26
25
|
import type { Connection } from "effect/unstable/sql/SqlConnection"
|
|
27
26
|
import { classifySqliteError, SqlError } from "effect/unstable/sql/SqlError"
|
|
28
27
|
import * as Statement from "effect/unstable/sql/Statement"
|
|
28
|
+
import { backup as backupDatabase, DatabaseSync } from "node:sqlite"
|
|
29
|
+
import type { StatementSync } from "node:sqlite"
|
|
29
30
|
|
|
30
31
|
const ATTR_DB_SYSTEM_NAME = "db.system.name"
|
|
31
32
|
|
|
32
|
-
const classifyError = (cause: unknown, message: string, operation: string) =>
|
|
33
|
-
classifySqliteError(cause, { message, operation })
|
|
34
|
-
|
|
35
33
|
/**
|
|
36
34
|
* Runtime type identifier used to mark Node `SqliteClient` values.
|
|
37
35
|
*
|
|
@@ -57,7 +55,6 @@ export type TypeId = "~@effect/sql-sqlite-node/SqliteClient"
|
|
|
57
55
|
export interface SqliteClient extends Client.SqlClient {
|
|
58
56
|
readonly [TypeId]: TypeId
|
|
59
57
|
readonly config: SqliteClientConfig
|
|
60
|
-
readonly export: Effect.Effect<Uint8Array, SqlError>
|
|
61
58
|
readonly backup: (destination: string) => Effect.Effect<BackupMetadata, SqlError>
|
|
62
59
|
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
|
|
63
60
|
|
|
@@ -85,7 +82,7 @@ export interface BackupMetadata {
|
|
|
85
82
|
export const SqliteClient = Context.Service<SqliteClient>("@effect/sql-sqlite-node/SqliteClient")
|
|
86
83
|
|
|
87
84
|
/**
|
|
88
|
-
* Configuration for a node SQLite client backed by `
|
|
85
|
+
* Configuration for a node SQLite client backed by `node:sqlite`, including the database filename, read-only mode, statement cache settings, WAL behavior, span attributes, and query/result name transforms.
|
|
89
86
|
*
|
|
90
87
|
* @category models
|
|
91
88
|
* @since 4.0.0
|
|
@@ -103,7 +100,6 @@ export interface SqliteClientConfig {
|
|
|
103
100
|
}
|
|
104
101
|
|
|
105
102
|
interface SqliteConnection extends Connection {
|
|
106
|
-
readonly export: Effect.Effect<Uint8Array, SqlError>
|
|
107
103
|
readonly backup: (destination: string) => Effect.Effect<BackupMetadata, SqlError>
|
|
108
104
|
readonly loadExtension: (path: string) => Effect.Effect<void, SqlError>
|
|
109
105
|
}
|
|
@@ -127,13 +123,15 @@ export const make = (
|
|
|
127
123
|
|
|
128
124
|
const makeConnection = Effect.gen(function*() {
|
|
129
125
|
const scope = yield* Effect.scope
|
|
130
|
-
const db = new
|
|
131
|
-
|
|
126
|
+
const db = new DatabaseSync(options.filename, {
|
|
127
|
+
readOnly: options.readonly ?? false,
|
|
128
|
+
allowExtension: true
|
|
132
129
|
})
|
|
133
130
|
yield* Scope.addFinalizer(scope, Effect.sync(() => db.close()))
|
|
131
|
+
db.enableLoadExtension(false)
|
|
134
132
|
|
|
135
133
|
if (options.disableWAL !== true) {
|
|
136
|
-
db.
|
|
134
|
+
db.exec("PRAGMA journal_mode = WAL")
|
|
137
135
|
}
|
|
138
136
|
|
|
139
137
|
const prepareCache = yield* Cache.make({
|
|
@@ -147,23 +145,62 @@ export const make = (
|
|
|
147
145
|
})
|
|
148
146
|
|
|
149
147
|
const runStatement = (
|
|
150
|
-
statement:
|
|
148
|
+
statement: StatementSync,
|
|
151
149
|
params: ReadonlyArray<unknown>,
|
|
152
150
|
raw: boolean
|
|
153
151
|
) =>
|
|
154
152
|
Effect.withFiber<ReadonlyArray<any>, SqlError>((fiber) => {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
}
|
|
153
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
|
|
154
|
+
return Effect.try({
|
|
155
|
+
try: () => {
|
|
156
|
+
statement.setReadBigInts(useSafeIntegers)
|
|
157
|
+
if (statement.columns().length > 0) {
|
|
158
|
+
return statement.all(...(params as Array<any>)) as ReadonlyArray<any>
|
|
159
|
+
}
|
|
160
|
+
const result = statement.run(...(params as Array<any>))
|
|
161
|
+
return raw ? { changes: result.changes, lastInsertRowid: result.lastInsertRowid } as any : []
|
|
162
|
+
},
|
|
163
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
const runStatementValues = (
|
|
168
|
+
statement: StatementSync,
|
|
169
|
+
params: ReadonlyArray<unknown>
|
|
170
|
+
) =>
|
|
171
|
+
Effect.withFiber<ReadonlyArray<ReadonlyArray<unknown>>, SqlError>((fiber) => {
|
|
172
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
|
|
173
|
+
return Effect.try({
|
|
174
|
+
try: () => {
|
|
175
|
+
statement.setReadBigInts(useSafeIntegers)
|
|
176
|
+
if (statement.columns().length > 0) {
|
|
177
|
+
return statement.all(...(params as Array<any>)) as unknown as ReadonlyArray<ReadonlyArray<unknown>>
|
|
178
|
+
}
|
|
179
|
+
statement.run(...(params as Array<any>))
|
|
180
|
+
return []
|
|
181
|
+
},
|
|
182
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
183
|
+
})
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
const runStatementValuesUnprepared = (
|
|
187
|
+
statement: StatementSync,
|
|
188
|
+
params: ReadonlyArray<unknown>
|
|
189
|
+
) =>
|
|
190
|
+
Effect.withFiber<ReadonlyArray<ReadonlyArray<unknown>>, SqlError>((fiber) => {
|
|
191
|
+
const useSafeIntegers = Context.get(fiber.context, Client.SafeIntegers)
|
|
192
|
+
return Effect.try({
|
|
193
|
+
try: () => {
|
|
194
|
+
statement.setReadBigInts(useSafeIntegers)
|
|
195
|
+
statement.setReturnArrays(true)
|
|
196
|
+
if (statement.columns().length > 0) {
|
|
197
|
+
return statement.all(...(params as Array<any>)) as unknown as ReadonlyArray<ReadonlyArray<unknown>>
|
|
198
|
+
}
|
|
199
|
+
statement.run(...(params as Array<any>))
|
|
200
|
+
return []
|
|
201
|
+
},
|
|
202
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
203
|
+
})
|
|
167
204
|
})
|
|
168
205
|
|
|
169
206
|
const run = (
|
|
@@ -182,41 +219,17 @@ export const make = (
|
|
|
182
219
|
) =>
|
|
183
220
|
Effect.acquireUseRelease(
|
|
184
221
|
Cache.get(prepareCache, sql),
|
|
185
|
-
(statement) =>
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
return statement.all(...params) as ReadonlyArray<
|
|
191
|
-
ReadonlyArray<unknown>
|
|
192
|
-
>
|
|
193
|
-
}
|
|
194
|
-
statement.run(...params)
|
|
195
|
-
return []
|
|
196
|
-
},
|
|
197
|
-
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
198
|
-
}),
|
|
199
|
-
(statement) => Effect.sync(() => statement.reader && statement.raw(false))
|
|
222
|
+
(statement) => {
|
|
223
|
+
statement.setReturnArrays(true)
|
|
224
|
+
return runStatementValues(statement, params)
|
|
225
|
+
},
|
|
226
|
+
(statement) => Effect.sync(() => statement.setReturnArrays(false))
|
|
200
227
|
)
|
|
201
228
|
|
|
202
229
|
const runValuesUnprepared = (
|
|
203
230
|
sql: string,
|
|
204
231
|
params: ReadonlyArray<unknown>
|
|
205
|
-
) =>
|
|
206
|
-
Effect.try({
|
|
207
|
-
try: () => {
|
|
208
|
-
const statement = db.prepare(sql)
|
|
209
|
-
if (statement.reader) {
|
|
210
|
-
statement.raw(true)
|
|
211
|
-
return statement.all(...params) as ReadonlyArray<
|
|
212
|
-
ReadonlyArray<unknown>
|
|
213
|
-
>
|
|
214
|
-
}
|
|
215
|
-
statement.run(...params)
|
|
216
|
-
return []
|
|
217
|
-
},
|
|
218
|
-
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })
|
|
219
|
-
})
|
|
232
|
+
) => runStatementValuesUnprepared(db.prepare(sql), params)
|
|
220
233
|
|
|
221
234
|
return identity<SqliteConnection>({
|
|
222
235
|
execute(sql, params, transformRows) {
|
|
@@ -240,22 +253,31 @@ export const make = (
|
|
|
240
253
|
executeStream(_sql, _params) {
|
|
241
254
|
return Stream.die("executeStream not implemented")
|
|
242
255
|
},
|
|
243
|
-
export: Effect.try({
|
|
244
|
-
try: () => db.serialize(),
|
|
245
|
-
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to export database", "export") })
|
|
246
|
-
}),
|
|
247
256
|
backup(destination) {
|
|
248
|
-
return Effect.
|
|
249
|
-
|
|
250
|
-
|
|
257
|
+
return Effect.suspend(() => {
|
|
258
|
+
let totalPages = 0
|
|
259
|
+
return Effect.tryPromise({
|
|
260
|
+
try: () =>
|
|
261
|
+
backupDatabase(db, destination, {
|
|
262
|
+
progress: (progress) => {
|
|
263
|
+
totalPages = progress.totalPages
|
|
264
|
+
}
|
|
265
|
+
}).then((pages): BackupMetadata => ({ totalPages: totalPages || pages, remainingPages: 0 })),
|
|
266
|
+
catch: (cause) => new SqlError({ reason: classifyError(cause, "Failed to backup database", "backup") })
|
|
267
|
+
})
|
|
251
268
|
})
|
|
252
269
|
},
|
|
253
270
|
loadExtension(path) {
|
|
254
|
-
return Effect.
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
271
|
+
return Effect.acquireUseRelease(
|
|
272
|
+
Effect.sync(() => db.enableLoadExtension(true)),
|
|
273
|
+
() =>
|
|
274
|
+
Effect.try({
|
|
275
|
+
try: () => db.loadExtension(path),
|
|
276
|
+
catch: (cause) =>
|
|
277
|
+
new SqlError({ reason: classifyError(cause, "Failed to load extension", "loadExtension") })
|
|
278
|
+
}),
|
|
279
|
+
() => Effect.sync(() => db.enableLoadExtension(false))
|
|
280
|
+
)
|
|
259
281
|
}
|
|
260
282
|
})
|
|
261
283
|
})
|
|
@@ -290,7 +312,6 @@ export const make = (
|
|
|
290
312
|
{
|
|
291
313
|
[TypeId]: TypeId as TypeId,
|
|
292
314
|
config: options,
|
|
293
|
-
export: Effect.flatMap(acquirer, (_) => _.export),
|
|
294
315
|
backup: (destination: string) => Effect.flatMap(acquirer, (_) => _.backup(destination)),
|
|
295
316
|
loadExtension: (path: string) => Effect.flatMap(acquirer, (_) => _.loadExtension(path))
|
|
296
317
|
}
|
|
@@ -332,3 +353,19 @@ export const layer = (
|
|
|
332
353
|
Context.add(Client.SqlClient, client)
|
|
333
354
|
))
|
|
334
355
|
).pipe(Layer.provide(Reactivity.layer))
|
|
356
|
+
|
|
357
|
+
// internal
|
|
358
|
+
|
|
359
|
+
const classifyError = (cause: unknown, message: string, operation: string) =>
|
|
360
|
+
classifySqliteError(sqliteCauseWithErrno(cause), { message, operation })
|
|
361
|
+
|
|
362
|
+
const sqliteCauseWithErrno = (cause: unknown): unknown => {
|
|
363
|
+
if (typeof cause !== "object" || cause === null || !("errcode" in cause) || "errno" in cause) {
|
|
364
|
+
return cause
|
|
365
|
+
}
|
|
366
|
+
const errcode = (cause as { readonly errcode: unknown }).errcode
|
|
367
|
+
if (typeof errcode !== "number") {
|
|
368
|
+
return cause
|
|
369
|
+
}
|
|
370
|
+
return Object.assign(cause, { errno: errcode })
|
|
371
|
+
}
|