@effect-app/infra 4.0.0-beta.82 → 4.0.0-beta.84
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/CHANGELOG.md +14 -0
- package/dist/Store/SQL/Pg.d.ts.map +1 -1
- package/dist/Store/SQL/Pg.js +8 -7
- package/dist/Store/SQL.d.ts +8 -1
- package/dist/Store/SQL.d.ts.map +1 -1
- package/dist/Store/SQL.js +13 -15
- package/package.json +2 -2
- package/src/Store/SQL/Pg.ts +7 -5
- package/src/Store/SQL.ts +15 -16
- package/test/sql-store.test.ts +355 -23
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 4.0.0-beta.84
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- c80e781: Fix SQLite store namespace parameter ordering in filter queries. The `_namespace` placeholder was prepended to the WHERE clause but its value was appended to the end of the positional params array, causing it to bind to the wrong placeholder. PostgreSQL was unaffected (uses indexed `$N` placeholders).
|
|
8
|
+
- effect-app@4.0.0-beta.84
|
|
9
|
+
|
|
10
|
+
## 4.0.0-beta.83
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- d1fc90a: Strip `_etag` and `id` from the `data` JSON column in SQL store adapters (SQLite + PostgreSQL). These fields are already stored as dedicated columns and were redundantly duplicated inside the JSON blob. On read, `parseRow` now re-injects `id` from the row column. Backward compatible: existing rows with `_etag`/`id` in `data` continue to work as the column values take precedence.
|
|
15
|
+
- effect-app@4.0.0-beta.83
|
|
16
|
+
|
|
3
17
|
## 4.0.0-beta.82
|
|
4
18
|
|
|
5
19
|
### Minor Changes
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pg.d.ts","sourceRoot":"","sources":["../../../src/Store/SQL/Pg.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAK/C,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"Pg.d.ts","sourceRoot":"","sources":["../../../src/Store/SQL/Pg.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAK/C,OAAO,EAA8C,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,eAAe,CAAA;AA2RxI,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,wEAG9C"}
|
package/dist/Store/SQL/Pg.js
CHANGED
|
@@ -8,9 +8,9 @@ import { storeId } from "../Memory.js";
|
|
|
8
8
|
import { StoreMaker } from "../service.js";
|
|
9
9
|
import { makeETag } from "../utils.js";
|
|
10
10
|
import { buildWhereSQLQuery, logQuery, pgDialect } from "./query.js";
|
|
11
|
-
const parseRow = (row, defaultValues) => {
|
|
11
|
+
const parseRow = (row, idKey, defaultValues) => {
|
|
12
12
|
const data = (typeof row.data === "string" ? JSON.parse(row.data) : row.data);
|
|
13
|
-
return { ...defaultValues, ...data, _etag: row._etag ?? undefined };
|
|
13
|
+
return { ...defaultValues, ...data, [idKey]: row.id, _etag: row._etag ?? undefined };
|
|
14
14
|
};
|
|
15
15
|
const parseSelectRow = (row, idKey, defaultValues) => {
|
|
16
16
|
const result = { ...defaultValues };
|
|
@@ -46,13 +46,14 @@ function makePgStore({ prefix }) {
|
|
|
46
46
|
const toRow = (e) => {
|
|
47
47
|
const newE = makeETag(e);
|
|
48
48
|
const id = newE[idKey];
|
|
49
|
-
const
|
|
49
|
+
const { _etag, [idKey]: _id, ...rest } = newE;
|
|
50
|
+
const data = JSON.stringify(rest);
|
|
50
51
|
return { id, _etag: newE._etag, data, item: newE };
|
|
51
52
|
};
|
|
52
53
|
const exec = (query, params) => sql.unsafe(query, params).pipe(Effect.orDie);
|
|
53
54
|
const s = {
|
|
54
55
|
all: resolveNamespace.pipe(Effect.flatMap((ns) => exec(`SELECT id, _etag, data FROM "${tableName}" WHERE _namespace = $1`, [ns])
|
|
55
|
-
.pipe(Effect.map((rows) => rows.map((r) => parseRow(r, defaultValues))), Effect.withSpan("PgSQL.all [effect-app/infra/Store]", {
|
|
56
|
+
.pipe(Effect.map((rows) => rows.map((r) => parseRow(r, idKey, defaultValues))), Effect.withSpan("PgSQL.all [effect-app/infra/Store]", {
|
|
56
57
|
attributes: {
|
|
57
58
|
"repository.table_name": tableName,
|
|
58
59
|
"repository.model_name": name,
|
|
@@ -64,7 +65,7 @@ function makePgStore({ prefix }) {
|
|
|
64
65
|
.pipe(Effect.map((rows) => {
|
|
65
66
|
const row = rows[0];
|
|
66
67
|
return row
|
|
67
|
-
? Option.some(parseRow(row, defaultValues))
|
|
68
|
+
? Option.some(parseRow(row, idKey, defaultValues))
|
|
68
69
|
: Option.none();
|
|
69
70
|
}), Effect.withSpan("PgSQL.find [effect-app/infra/Store]", {
|
|
70
71
|
attributes: { "repository.table_name": tableName, "repository.model_name": name, id }
|
|
@@ -92,7 +93,7 @@ function makePgStore({ prefix }) {
|
|
|
92
93
|
};
|
|
93
94
|
});
|
|
94
95
|
}
|
|
95
|
-
return rows.map((r) => parseRow(r, defaultValues));
|
|
96
|
+
return rows.map((r) => parseRow(r, idKey, defaultValues));
|
|
96
97
|
}))), Effect.withSpan("PgSQL.filter [effect-app/infra/Store]", {
|
|
97
98
|
attributes: { "repository.table_name": tableName, "repository.model_name": name }
|
|
98
99
|
}, { captureStackTrace: false }))));
|
|
@@ -171,4 +172,4 @@ export function PgStoreLayer(cfg) {
|
|
|
171
172
|
return StoreMaker
|
|
172
173
|
.toLayer(makePgStore(cfg));
|
|
173
174
|
}
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvU3RvcmUvU1FML1BnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUE4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVwRSxNQUFNLFFBQVEsR0FBRyxDQUNmLEdBQXdELEVBQ3hELGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBbUMsQ0FBQTtBQUN0RyxDQUFDLENBQUE7QUFFRCxNQUFNLGNBQWMsR0FBRyxDQUNyQixHQUE0QixFQUM1QixLQUFr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
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvU3RvcmUvU1FML1BnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHVEQUF1RDtBQUV2RCxPQUFPLEVBQUUsTUFBTSxFQUE4QixNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQy9FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNsRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDaEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBRTdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdEMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDeEksT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVwRSxNQUFNLFFBQVEsR0FBRyxDQUNmLEdBQXdELEVBQ3hELEtBQWtCLEVBQ2xCLGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxTQUFTLEVBQW1DLENBQUE7QUFDdkgsQ0FBQyxDQUFBO0FBRUQsTUFBTSxjQUFjLEdBQUcsQ0FDckIsR0FBNEIsRUFDNUIsS0FBa0IsRUFDbEIsYUFBc0MsRUFDakMsRUFBRTtJQUNQLE1BQU0sTUFBTSxHQUE0QixFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUE7SUFDNUQsS0FBSyxNQUFNLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMvQyxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUNqQixNQUFNLENBQUMsS0FBZSxDQUFDLEdBQUcsS0FBSyxDQUFBO1lBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUE7UUFDdEIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBQ0QsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDLENBQUE7QUFFRCxTQUFTLFdBQVcsQ0FBQyxFQUFFLE1BQU0sRUFBaUI7SUFDNUMsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN6QixNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFBO1FBQ3RDLE9BQU87WUFDTCxJQUFJLEVBQUUsQ0FDSixJQUFZLEVBQ1osS0FBWSxFQUNaLElBQTZDLEVBQzdDLE1BQTZCLEVBQzdCLEVBQUUsQ0FDRixNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztnQkFFbEIsTUFBTSxTQUFTLEdBQUcsR0FBRyxNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUE7Z0JBQ3BDLE1BQU0sYUFBYSxHQUFHLE1BQU0sRUFBRSxhQUFhLElBQUksRUFBRSxDQUFBO2dCQUVqRCxNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxFQUFFLGNBQWM7b0JBQzlDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO3dCQUNqRCxJQUFJLFNBQVMsS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7NEJBQ2xFLE1BQU0sSUFBSSxLQUFLLENBQUMsYUFBYSxTQUFTLGVBQWUsQ0FBQyxDQUFBO3dCQUN4RCxDQUFDO3dCQUNELE9BQU8sU0FBUyxDQUFBO29CQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUVMLEtBQUssQ0FBQyxDQUFDLEdBQUc7cUJBQ1AsTUFBTSxDQUNMLCtCQUErQixTQUFTLGlJQUFpSSxDQUMxSztxQkFDQSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUVyQixNQUFNLEtBQUssR0FBRyxDQUFDLENBQUssRUFBRSxFQUFFO29CQUN0QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7b0JBQ3hCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQVcsQ0FBQTtvQkFDaEMsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEtBQUssQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLElBQVcsQ0FBQTtvQkFDcEQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtvQkFDakMsT0FBTyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFBO2dCQUNyRCxDQUFDLENBQUE7Z0JBRUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFhLEVBQUUsTUFBMkIsRUFBRSxFQUFFLENBQzFELEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7Z0JBRXJELE1BQU0sQ0FBQyxHQUEwQjtvQkFDL0IsR0FBRyxFQUFFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDL0MsSUFBSSxDQUFDLGdDQUFnQyxTQUFTLHlCQUF5QixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7eUJBQzNFLElBQUksQ0FDSCxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBRSxJQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQVUsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQzVGLE1BQU0sQ0FBQyxRQUFRLENBQUMsb0NBQW9DLEVBQUU7d0JBQ3BELFVBQVUsRUFBRTs0QkFDVix1QkFBdUIsRUFBRSxTQUFTOzRCQUNsQyx1QkFBdUIsRUFBRSxJQUFJOzRCQUM3QixzQkFBc0IsRUFBRSxFQUFFO3lCQUMzQjtxQkFDRixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDakMsQ0FDSixDQUFDO29CQUVGLElBQUksRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ1gsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE1BQU07eUJBQ3pCLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ2QsSUFBSSxDQUFDLGdDQUFnQyxTQUFTLHFDQUFxQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO3lCQUMzRixJQUFJLENBQ0gsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNsQixNQUFNLEdBQUcsR0FBSSxJQUFjLENBQUMsQ0FBQyxDQUFDLENBQUE7d0JBQzlCLE9BQU8sR0FBRzs0QkFDUixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQVUsR0FBRyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQzs0QkFDM0QsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtvQkFDbkIsQ0FBQyxDQUFDLEVBQ0YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxxQ0FBcUMsRUFBRTt3QkFDckQsVUFBVSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7cUJBQ3RGLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUNqQyxDQUNKLENBQUM7b0JBRU4sTUFBTSxFQUFFLENBQWtDLENBQXlCLEVBQUUsRUFBRTt3QkFDckUsTUFBTSxNQUFNLEdBQUcsQ0FBQzs2QkFDYixNQUFNLENBQUE7d0JBRVQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ2pELE1BQU07NkJBQ0gsSUFBSSxDQUFDLEdBQUcsRUFBRTs0QkFDVCxNQUFNLENBQUMsR0FBRyxrQkFBa0IsQ0FDMUIsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdEUsU0FBUyxFQUNULGFBQWEsRUFDYixDQUFDLENBQUMsTUFFVyxFQUNiLENBQUMsQ0FBQyxLQUFzRixFQUN4RixDQUFDLENBQUMsSUFBSSxFQUNOLENBQUMsQ0FBQyxLQUFLLENBQ1IsQ0FBQTs0QkFDRCxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFBOzRCQUNoRSxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTs0QkFDeEMsTUFBTSxLQUFLLEdBQUcsUUFBUTtnQ0FDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsYUFBYSxNQUFNLENBQUM7Z0NBQ25FLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FDYixTQUFTLFNBQVMsR0FBRyxFQUNyQixTQUFTLFNBQVMsd0JBQXdCLGFBQWEsRUFBRSxDQUMxRCxDQUFBOzRCQUNILE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFBO3dCQUNsRCxDQUFDLENBQUM7NkJBQ0QsSUFBSSxDQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM5QixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDbkIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FDeEIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFOzRCQUNsQixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQ0FDYixPQUFRLElBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtvQ0FDL0IsTUFBTSxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUE7b0NBQzdDLE9BQU87d0NBQ0wsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUNaLGFBQW9CLEVBQ3BCLENBQUMsQ0FBQyxNQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQVksQ0FDMUQ7d0NBQ0QsR0FBRyxRQUFRO3FDQUNQLENBQUE7Z0NBQ1IsQ0FBQyxDQUFDLENBQUE7NEJBQ0osQ0FBQzs0QkFDRCxPQUFRLElBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLGFBQWEsQ0FBYSxDQUFDLENBQUE7d0JBQzNGLENBQUMsQ0FBQyxDQUNILENBQ0YsRUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDLHVDQUF1QyxFQUFFOzRCQUN2RCxVQUFVLEVBQUUsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsSUFBSSxFQUFFO3lCQUNsRixFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDakMsQ0FDSixDQUFDLENBQUE7b0JBQ0osQ0FBQztvQkFFRCxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNULGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FDMUMsTUFBTTt5QkFDSCxHQUFHLENBQUMsUUFBUSxDQUFDO3dCQUNaLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTt3QkFDcEIsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7NEJBQ1osS0FBSyxDQUFDLENBQUMsSUFBSSxDQUNULFdBQVcsU0FBUyw4RUFBOEUsRUFDbEcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUMzQyxDQUFBOzRCQUNELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FDMUIsc0JBQXNCLFNBQVMscUNBQXFDLEVBQ3BFLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDYixDQUFBOzRCQUNELE1BQU0sT0FBTyxHQUFJLFFBQWtCLENBQUMsQ0FBQyxDQUFDLENBQUE7NEJBQ3RDLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7Z0NBQzVDLElBQUksT0FBTyxFQUFFLENBQUM7b0NBQ1osT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLDhCQUE4QixDQUFDO3dDQUMvQyxJQUFJLEVBQUUsSUFBSTt3Q0FDVixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7d0NBQ1YsT0FBTyxFQUFFLE9BQU8sQ0FBQyxLQUFLO3dDQUN0QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUs7d0NBQ2QsSUFBSSxFQUFFLEdBQUc7cUNBQ1YsQ0FBQyxDQUFBO2dDQUNKLENBQUM7Z0NBQ0QsT0FBTyxLQUFLLENBQUMsQ0FBQyxJQUFJLDhCQUE4QixDQUFDO29DQUMvQyxJQUFJLEVBQUUsSUFBSTtvQ0FDVixFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUU7b0NBQ1YsT0FBTyxFQUFFLEVBQUU7b0NBQ1gsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO29DQUNkLElBQUksRUFBRSxHQUFHO2lDQUNWLENBQUMsQ0FBQTs0QkFDSixDQUFDO3dCQUNILENBQUM7NkJBQU0sQ0FBQzs0QkFDTixLQUFLLENBQUMsQ0FBQyxJQUFJLENBQ1QsZ0JBQWdCLFNBQVMseURBQXlELEVBQ2xGLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQ2xDLENBQUE7d0JBQ0gsQ0FBQzt3QkFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUE7b0JBQ2pCLENBQUMsQ0FBQzt5QkFDRCxJQUFJLENBQ0gsTUFBTSxDQUFDLFFBQVEsQ0FBQyxvQ0FBb0MsRUFBRTt3QkFDcEQsVUFBVSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO3FCQUNoRyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FDakMsQ0FDSixDQUFDO29CQUVKLFFBQVEsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2xCLEdBQUc7eUJBQ0EsZUFBZSxDQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZDO3lCQUNBLElBQUksQ0FDSCxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQXlDLENBQUMsRUFDNUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyx5Q0FBeUMsRUFBRTt3QkFDekQsVUFBVSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtxQkFDbEYsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQ2pDO29CQUVMLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ2pCLEdBQUc7eUJBQ0EsZUFBZSxDQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZDO3lCQUNBLElBQUksQ0FDSCxNQUFNLENBQUMsS0FBSyxFQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQXlDLENBQUMsRUFDNUQsTUFBTSxDQUFDLFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRTt3QkFDeEQsVUFBVSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTtxQkFDbEYsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQ2pDO29CQUVMLFdBQVcsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNuQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7d0JBQzlELE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQTt3QkFDMUMsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQ2pELElBQUksQ0FDRixnQkFBZ0IsU0FBUyxrQkFBa0IsWUFBWSxzQkFBc0IsYUFBYSxFQUFFLEVBQzVGLENBQUMsR0FBRyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQ2I7NkJBQ0UsSUFBSSxDQUNILE1BQU0sQ0FBQyxNQUFNLEVBQ2IsTUFBTSxDQUFDLFFBQVEsQ0FBQyw0Q0FBNEMsRUFBRTs0QkFDNUQsVUFBVSxFQUFFLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRTt5QkFDbEYsRUFBRSxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQ2pDLENBQ0osQ0FBQyxDQUFBO29CQUNKLENBQUM7b0JBRUQsUUFBUSxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDbEIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQ1IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUMseUNBQXlDLEVBQUU7d0JBQ3pELFVBQVUsRUFBRSxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUU7cUJBQ2xGLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUNqQztpQkFDSixDQUFBO2dCQUVELElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ1QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUMxQixnQ0FBZ0MsU0FBUyx5QkFBeUIsRUFDbEUsQ0FBQyxTQUFTLENBQUMsQ0FDWixDQUFBO29CQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBRSxRQUFrQixDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQTtvQkFDdEQsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7d0JBQ2hCLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLENBQUE7d0JBQ3RELE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQTt3QkFDekIsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FDekIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDM0MsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FDdkMsQ0FBQTtvQkFDSCxDQUFDO2dCQUNILENBQUM7Z0JBRUQsT0FBTyxDQUFDLENBQUE7WUFDVixDQUFDLENBQUM7U0FDTCxDQUFBO0lBQ0gsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxHQUFrQjtJQUM3QyxPQUFPLFVBQVU7U0FDZCxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7QUFDOUIsQ0FBQyJ9
|
package/dist/Store/SQL.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { SqlClient } from "effect/unstable/sql";
|
|
2
|
-
import
|
|
2
|
+
import type { FieldValues } from "../Model/filter/types.js";
|
|
3
|
+
import { type PersistenceModelType, type StorageConfig, StoreMaker } from "./service.js";
|
|
4
|
+
/** @internal */
|
|
5
|
+
export declare const parseRow: <Encoded extends FieldValues>(row: {
|
|
6
|
+
id: string;
|
|
7
|
+
_etag: string | null;
|
|
8
|
+
data: string;
|
|
9
|
+
}, idKey: PropertyKey, defaultValues: Partial<Encoded>) => PersistenceModelType<Encoded>;
|
|
3
10
|
export declare function SQLiteStoreLayer(cfg: StorageConfig): import("effect/Layer").Layer<StoreMaker, never, SqlClient.SqlClient>;
|
|
4
11
|
//# sourceMappingURL=SQL.d.ts.map
|
package/dist/Store/SQL.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SQL.d.ts","sourceRoot":"","sources":["../../src/Store/SQL.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"SQL.d.ts","sourceRoot":"","sources":["../../src/Store/SQL.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAE3D,OAAO,EAAmB,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAgC,UAAU,EAAE,MAAM,cAAc,CAAA;AAIvI,gBAAgB;AAChB,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,WAAW,EAClD,KAAK;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACvD,OAAO,WAAW,EAClB,eAAe,OAAO,CAAC,OAAO,CAAC,KAC9B,oBAAoB,CAAC,OAAO,CAG9B,CAAA;AA6SD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,aAAa,wEAGlD"}
|
package/dist/Store/SQL.js
CHANGED
|
@@ -8,9 +8,10 @@ import { storeId } from "./Memory.js";
|
|
|
8
8
|
import { StoreMaker } from "./service.js";
|
|
9
9
|
import { buildWhereSQLQuery, logQuery, sqliteDialect } from "./SQL/query.js";
|
|
10
10
|
import { makeETag } from "./utils.js";
|
|
11
|
-
|
|
11
|
+
/** @internal */
|
|
12
|
+
export const parseRow = (row, idKey, defaultValues) => {
|
|
12
13
|
const data = (typeof row.data === "string" ? JSON.parse(row.data) : row.data);
|
|
13
|
-
return { ...defaultValues, ...data, _etag: row._etag ?? undefined };
|
|
14
|
+
return { ...defaultValues, ...data, [idKey]: row.id, _etag: row._etag ?? undefined };
|
|
14
15
|
};
|
|
15
16
|
const parseSelectRow = (row, idKey, defaultValues) => {
|
|
16
17
|
const result = { ...defaultValues };
|
|
@@ -54,13 +55,14 @@ function makeSQLStoreInt(dialect, jsonColumnType) {
|
|
|
54
55
|
const toRow = (e) => {
|
|
55
56
|
const newE = makeETag(e);
|
|
56
57
|
const id = newE[idKey];
|
|
57
|
-
const
|
|
58
|
+
const { _etag, [idKey]: _id, ...rest } = newE;
|
|
59
|
+
const data = JSON.stringify(rest);
|
|
58
60
|
return { id, _etag: newE._etag, data, item: newE };
|
|
59
61
|
};
|
|
60
62
|
const exec = (query, params) => sql.unsafe(query, params).pipe(Effect.orDie);
|
|
61
63
|
const s = {
|
|
62
64
|
all: resolveNamespace.pipe(Effect.flatMap((ns) => exec(`SELECT id, _etag, data FROM "${tableName}" WHERE _namespace = ?`, [ns])
|
|
63
|
-
.pipe(Effect.map((rows) => rows.map((r) => parseRow(r, defaultValues))), Effect.withSpan("SQL.all [effect-app/infra/Store]", {
|
|
65
|
+
.pipe(Effect.map((rows) => rows.map((r) => parseRow(r, idKey, defaultValues))), Effect.withSpan("SQL.all [effect-app/infra/Store]", {
|
|
64
66
|
attributes: {
|
|
65
67
|
"repository.table_name": tableName,
|
|
66
68
|
"repository.model_name": name,
|
|
@@ -71,7 +73,7 @@ function makeSQLStoreInt(dialect, jsonColumnType) {
|
|
|
71
73
|
.pipe(Effect.map((rows) => {
|
|
72
74
|
const row = rows[0];
|
|
73
75
|
return row
|
|
74
|
-
? Option.some(parseRow(row, defaultValues))
|
|
76
|
+
? Option.some(parseRow(row, idKey, defaultValues))
|
|
75
77
|
: Option.none();
|
|
76
78
|
}), Effect.withSpan("SQL.find [effect-app/infra/Store]", {
|
|
77
79
|
attributes: { "repository.table_name": tableName, "repository.model_name": name, id }
|
|
@@ -88,26 +90,22 @@ function makeSQLStoreInt(dialect, jsonColumnType) {
|
|
|
88
90
|
.order, f
|
|
89
91
|
.skip, f
|
|
90
92
|
.limit);
|
|
91
|
-
const nsPlaceholder = dialect
|
|
92
|
-
.placeholder(q
|
|
93
|
-
.params
|
|
94
|
-
.length + 1);
|
|
95
93
|
const hasWhere = q
|
|
96
94
|
.sql
|
|
97
95
|
.includes("WHERE");
|
|
98
96
|
const nsSql = hasWhere
|
|
99
97
|
? q
|
|
100
98
|
.sql
|
|
101
|
-
.replace("WHERE", `WHERE _namespace =
|
|
99
|
+
.replace("WHERE", `WHERE _namespace = ? AND`)
|
|
102
100
|
: q
|
|
103
101
|
.sql
|
|
104
|
-
.replace(`FROM "${tableName}"`, `FROM "${tableName}" WHERE _namespace =
|
|
102
|
+
.replace(`FROM "${tableName}"`, `FROM "${tableName}" WHERE _namespace = ?`);
|
|
105
103
|
return {
|
|
106
104
|
sql: nsSql,
|
|
107
105
|
params: [
|
|
106
|
+
ns,
|
|
108
107
|
...q
|
|
109
|
-
.params
|
|
110
|
-
ns
|
|
108
|
+
.params
|
|
111
109
|
]
|
|
112
110
|
};
|
|
113
111
|
})
|
|
@@ -122,7 +120,7 @@ function makeSQLStoreInt(dialect, jsonColumnType) {
|
|
|
122
120
|
};
|
|
123
121
|
});
|
|
124
122
|
}
|
|
125
|
-
return rows.map((r) => parseRow(r, defaultValues));
|
|
123
|
+
return rows.map((r) => parseRow(r, idKey, defaultValues));
|
|
126
124
|
}))), Effect.withSpan("SQL.filter [effect-app/infra/Store]", {
|
|
127
125
|
attributes: { "repository.table_name": tableName, "repository.model_name": name }
|
|
128
126
|
}, { captureStackTrace: false }))));
|
|
@@ -200,4 +198,4 @@ export function SQLiteStoreLayer(cfg) {
|
|
|
200
198
|
return StoreMaker
|
|
201
199
|
.toLayer(makeSQLStoreInt(sqliteDialect, "JSON")(cfg));
|
|
202
200
|
}
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FMLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL1NRTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBOEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkksT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBbUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxNQUFNLFFBQVEsR0FBRyxDQUNmLEdBQXVELEVBQ3ZELGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBbUMsQ0FBQTtBQUN0RyxDQUFDLENBQUE7QUFFRCxNQUFNLGNBQWMsR0FBRyxDQUNyQixHQUE0QixFQUM1QixLQUFrQixFQUNs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
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU1FMLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL1N0b3JlL1NRTC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx1REFBdUQ7QUFFdkQsT0FBTyxFQUFFLE1BQU0sRUFBOEIsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUMvRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQy9DLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDckMsT0FBTyxFQUFnRyxVQUFVLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDdkksT0FBTyxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBbUIsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDN0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVyQyxnQkFBZ0I7QUFDaEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQ3RCLEdBQXVELEVBQ3ZELEtBQWtCLEVBQ2xCLGFBQStCLEVBQ0EsRUFBRTtJQUNqQyxNQUFNLElBQUksR0FBRyxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFXLENBQUE7SUFDdkYsT0FBTyxFQUFFLEdBQUcsYUFBYSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUssSUFBSSxTQUFT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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.84",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"proper-lockfile": "^4.1.2",
|
|
14
14
|
"pure-rand": "7.0.1",
|
|
15
15
|
"query-string": "^9.3.1",
|
|
16
|
-
"effect-app": "4.0.0-beta.
|
|
16
|
+
"effect-app": "4.0.0-beta.84"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@azure/cosmos": "^4.9.2",
|
package/src/Store/SQL/Pg.ts
CHANGED
|
@@ -13,10 +13,11 @@ import { buildWhereSQLQuery, logQuery, pgDialect } from "./query.js"
|
|
|
13
13
|
|
|
14
14
|
const parseRow = <Encoded extends FieldValues>(
|
|
15
15
|
row: { id: string; _etag: string | null; data: unknown },
|
|
16
|
+
idKey: PropertyKey,
|
|
16
17
|
defaultValues: Partial<Encoded>
|
|
17
18
|
): PersistenceModelType<Encoded> => {
|
|
18
19
|
const data = (typeof row.data === "string" ? JSON.parse(row.data) : row.data) as object
|
|
19
|
-
return { ...defaultValues, ...data, _etag: row._etag ?? undefined } as PersistenceModelType<Encoded>
|
|
20
|
+
return { ...defaultValues, ...data, [idKey]: row.id, _etag: row._etag ?? undefined } as PersistenceModelType<Encoded>
|
|
20
21
|
}
|
|
21
22
|
|
|
22
23
|
const parseSelectRow = (
|
|
@@ -69,7 +70,8 @@ function makePgStore({ prefix }: StorageConfig) {
|
|
|
69
70
|
const toRow = (e: PM) => {
|
|
70
71
|
const newE = makeETag(e)
|
|
71
72
|
const id = newE[idKey] as string
|
|
72
|
-
const
|
|
73
|
+
const { _etag, [idKey]: _id, ...rest } = newE as any
|
|
74
|
+
const data = JSON.stringify(rest)
|
|
73
75
|
return { id, _etag: newE._etag!, data, item: newE }
|
|
74
76
|
}
|
|
75
77
|
|
|
@@ -80,7 +82,7 @@ function makePgStore({ prefix }: StorageConfig) {
|
|
|
80
82
|
all: resolveNamespace.pipe(Effect.flatMap((ns) =>
|
|
81
83
|
exec(`SELECT id, _etag, data FROM "${tableName}" WHERE _namespace = $1`, [ns])
|
|
82
84
|
.pipe(
|
|
83
|
-
Effect.map((rows) => (rows as any[]).map((r) => parseRow<Encoded>(r, defaultValues))),
|
|
85
|
+
Effect.map((rows) => (rows as any[]).map((r) => parseRow<Encoded>(r, idKey, defaultValues))),
|
|
84
86
|
Effect.withSpan("PgSQL.all [effect-app/infra/Store]", {
|
|
85
87
|
attributes: {
|
|
86
88
|
"repository.table_name": tableName,
|
|
@@ -99,7 +101,7 @@ function makePgStore({ prefix }: StorageConfig) {
|
|
|
99
101
|
Effect.map((rows) => {
|
|
100
102
|
const row = (rows as any[])[0]
|
|
101
103
|
return row
|
|
102
|
-
? Option.some(parseRow<Encoded>(row, defaultValues))
|
|
104
|
+
? Option.some(parseRow<Encoded>(row, idKey, defaultValues))
|
|
103
105
|
: Option.none()
|
|
104
106
|
}),
|
|
105
107
|
Effect.withSpan("PgSQL.find [effect-app/infra/Store]", {
|
|
@@ -155,7 +157,7 @@ function makePgStore({ prefix }: StorageConfig) {
|
|
|
155
157
|
} as M
|
|
156
158
|
})
|
|
157
159
|
}
|
|
158
|
-
return (rows as any[]).map((r) => parseRow<Encoded>(r, defaultValues) as any as M)
|
|
160
|
+
return (rows as any[]).map((r) => parseRow<Encoded>(r, idKey, defaultValues) as any as M)
|
|
159
161
|
})
|
|
160
162
|
)
|
|
161
163
|
),
|
package/src/Store/SQL.ts
CHANGED
|
@@ -11,12 +11,14 @@ import { type FilterArgs, type PersistenceModelType, type StorageConfig, type St
|
|
|
11
11
|
import { buildWhereSQLQuery, logQuery, type SQLDialect, sqliteDialect } from "./SQL/query.js"
|
|
12
12
|
import { makeETag } from "./utils.js"
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
/** @internal */
|
|
15
|
+
export const parseRow = <Encoded extends FieldValues>(
|
|
15
16
|
row: { id: string; _etag: string | null; data: string },
|
|
17
|
+
idKey: PropertyKey,
|
|
16
18
|
defaultValues: Partial<Encoded>
|
|
17
19
|
): PersistenceModelType<Encoded> => {
|
|
18
20
|
const data = (typeof row.data === "string" ? JSON.parse(row.data) : row.data) as object
|
|
19
|
-
return { ...defaultValues, ...data, _etag: row._etag ?? undefined } as PersistenceModelType<Encoded>
|
|
21
|
+
return { ...defaultValues, ...data, [idKey]: row.id, _etag: row._etag ?? undefined } as PersistenceModelType<Encoded>
|
|
20
22
|
}
|
|
21
23
|
|
|
22
24
|
const parseSelectRow = <Encoded extends FieldValues>(
|
|
@@ -76,7 +78,8 @@ function makeSQLStoreInt(dialect: SQLDialect, jsonColumnType: string) {
|
|
|
76
78
|
const toRow = (e: PM) => {
|
|
77
79
|
const newE = makeETag(e)
|
|
78
80
|
const id = newE[idKey] as string
|
|
79
|
-
const
|
|
81
|
+
const { _etag, [idKey]: _id, ...rest } = newE as any
|
|
82
|
+
const data = JSON.stringify(rest)
|
|
80
83
|
return { id, _etag: newE._etag!, data, item: newE }
|
|
81
84
|
}
|
|
82
85
|
|
|
@@ -87,7 +90,7 @@ function makeSQLStoreInt(dialect: SQLDialect, jsonColumnType: string) {
|
|
|
87
90
|
all: resolveNamespace.pipe(Effect.flatMap((ns) =>
|
|
88
91
|
exec(`SELECT id, _etag, data FROM "${tableName}" WHERE _namespace = ?`, [ns])
|
|
89
92
|
.pipe(
|
|
90
|
-
Effect.map((rows) => (rows as any[]).map((r) => parseRow<Encoded>(r, defaultValues))),
|
|
93
|
+
Effect.map((rows) => (rows as any[]).map((r) => parseRow<Encoded>(r, idKey, defaultValues))),
|
|
91
94
|
Effect.withSpan("SQL.all [effect-app/infra/Store]", {
|
|
92
95
|
attributes: {
|
|
93
96
|
"repository.table_name": tableName,
|
|
@@ -105,7 +108,7 @@ function makeSQLStoreInt(dialect: SQLDialect, jsonColumnType: string) {
|
|
|
105
108
|
Effect.map((rows) => {
|
|
106
109
|
const row = (rows as any[])[0]
|
|
107
110
|
return row
|
|
108
|
-
? Option.some(parseRow<Encoded>(row, defaultValues))
|
|
111
|
+
? Option.some(parseRow<Encoded>(row, idKey, defaultValues))
|
|
109
112
|
: Option.none()
|
|
110
113
|
}),
|
|
111
114
|
Effect.withSpan("SQL.find [effect-app/infra/Store]", {
|
|
@@ -141,31 +144,25 @@ function makeSQLStoreInt(dialect: SQLDialect, jsonColumnType: string) {
|
|
|
141
144
|
f
|
|
142
145
|
.limit
|
|
143
146
|
)
|
|
144
|
-
const nsPlaceholder = dialect
|
|
145
|
-
.placeholder(
|
|
146
|
-
q
|
|
147
|
-
.params
|
|
148
|
-
.length + 1
|
|
149
|
-
)
|
|
150
147
|
const hasWhere = q
|
|
151
148
|
.sql
|
|
152
149
|
.includes("WHERE")
|
|
153
150
|
const nsSql = hasWhere
|
|
154
151
|
? q
|
|
155
152
|
.sql
|
|
156
|
-
.replace("WHERE", `WHERE _namespace =
|
|
153
|
+
.replace("WHERE", `WHERE _namespace = ? AND`)
|
|
157
154
|
: q
|
|
158
155
|
.sql
|
|
159
156
|
.replace(
|
|
160
157
|
`FROM "${tableName}"`,
|
|
161
|
-
`FROM "${tableName}" WHERE _namespace =
|
|
158
|
+
`FROM "${tableName}" WHERE _namespace = ?`
|
|
162
159
|
)
|
|
163
160
|
return {
|
|
164
161
|
sql: nsSql,
|
|
165
162
|
params: [
|
|
163
|
+
ns,
|
|
166
164
|
...q
|
|
167
|
-
.params
|
|
168
|
-
ns
|
|
165
|
+
.params
|
|
169
166
|
]
|
|
170
167
|
}
|
|
171
168
|
})
|
|
@@ -189,7 +186,9 @@ function makeSQLStoreInt(dialect: SQLDialect, jsonColumnType: string) {
|
|
|
189
186
|
} as M
|
|
190
187
|
})
|
|
191
188
|
}
|
|
192
|
-
return (rows as any[]).map((r) =>
|
|
189
|
+
return (rows as any[]).map((r) =>
|
|
190
|
+
parseRow<Encoded>(r, idKey, defaultValues) as any as M
|
|
191
|
+
)
|
|
193
192
|
})
|
|
194
193
|
)
|
|
195
194
|
),
|
package/test/sql-store.test.ts
CHANGED
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
import type Sqlite from "better-sqlite3"
|
|
3
3
|
import BetterSqlite from "better-sqlite3"
|
|
4
4
|
import { describe, expect, it } from "vitest"
|
|
5
|
+
import { parseRow } from "../src/Store/SQL.js"
|
|
5
6
|
import { buildWhereSQLQuery, pgDialect, sqliteDialect } from "../src/Store/SQL/query.js"
|
|
7
|
+
import { makeETag } from "../src/Store/utils.js"
|
|
6
8
|
|
|
7
9
|
const query = (db: Sqlite.Database, sql: string, params: unknown[] = []) =>
|
|
8
10
|
db.prepare(sql).all(...params as any[]) as any[]
|
|
@@ -309,14 +311,141 @@ describe("SQL Store (SQLite integration)", () => {
|
|
|
309
311
|
db.exec(
|
|
310
312
|
`CREATE TABLE IF NOT EXISTS "test_items" (id TEXT PRIMARY KEY, _etag TEXT, data JSON NOT NULL)`
|
|
311
313
|
)
|
|
312
|
-
db
|
|
313
|
-
.
|
|
314
|
+
db
|
|
315
|
+
.prepare(`INSERT INTO "test_items" (id, _etag, data) VALUES (?, ?, ?)`)
|
|
316
|
+
.run("1", "etag1", JSON.stringify({ name: "Alice", age: 30 }))
|
|
314
317
|
|
|
315
318
|
const rows = db.prepare(`SELECT * FROM "test_items"`).all()
|
|
316
319
|
expect(rows.length).toBe(1)
|
|
317
320
|
expect((rows[0] as any).id).toBe("1")
|
|
318
321
|
}))
|
|
319
322
|
|
|
323
|
+
it("data column should not contain _etag or id", () =>
|
|
324
|
+
withDb((db) => {
|
|
325
|
+
db.exec(
|
|
326
|
+
`CREATE TABLE IF NOT EXISTS "test_clean" (id TEXT PRIMARY KEY, _etag TEXT, data JSON NOT NULL)`
|
|
327
|
+
)
|
|
328
|
+
// Simulate what toRow now produces: data without id or _etag
|
|
329
|
+
const data = { name: "Alice", age: 30, tags: ["admin"] }
|
|
330
|
+
db
|
|
331
|
+
.prepare(`INSERT INTO "test_clean" (id, _etag, data) VALUES (?, ?, ?)`)
|
|
332
|
+
.run("1", "etag1", JSON.stringify(data))
|
|
333
|
+
|
|
334
|
+
const row = db.prepare(`SELECT * FROM "test_clean" WHERE id = ?`).get("1") as any
|
|
335
|
+
const parsed = JSON.parse(row.data) as any
|
|
336
|
+
expect(parsed).not.toHaveProperty("id")
|
|
337
|
+
expect(parsed).not.toHaveProperty("_etag")
|
|
338
|
+
expect(parsed.name).toBe("Alice")
|
|
339
|
+
expect(parsed.age).toBe(30)
|
|
340
|
+
expect(parsed.tags).toEqual(["admin"])
|
|
341
|
+
// id and _etag come from their own columns
|
|
342
|
+
expect(row.id).toBe("1")
|
|
343
|
+
expect(row._etag).toBe("etag1")
|
|
344
|
+
}))
|
|
345
|
+
|
|
346
|
+
it("backward compat: rows with id/_etag in data still work with queries", () =>
|
|
347
|
+
withDb((db) => {
|
|
348
|
+
db.exec(
|
|
349
|
+
`CREATE TABLE IF NOT EXISTS "test_compat" (id TEXT PRIMARY KEY, _etag TEXT, data JSON NOT NULL)`
|
|
350
|
+
)
|
|
351
|
+
// Old format: id and _etag inside data
|
|
352
|
+
db
|
|
353
|
+
.prepare(`INSERT INTO "test_compat" (id, _etag, data) VALUES (?, ?, ?)`)
|
|
354
|
+
.run("1", "etag1", JSON.stringify({ id: "1", _etag: "old_etag", name: "Alice", age: 30 }))
|
|
355
|
+
// New format: id and _etag stripped from data
|
|
356
|
+
db
|
|
357
|
+
.prepare(`INSERT INTO "test_compat" (id, _etag, data) VALUES (?, ?, ?)`)
|
|
358
|
+
.run("2", "etag2", JSON.stringify({ name: "Bob", age: 25 }))
|
|
359
|
+
|
|
360
|
+
// Both should be queryable by name
|
|
361
|
+
const q1 = buildWhereSQLQuery(
|
|
362
|
+
sqliteDialect,
|
|
363
|
+
"id",
|
|
364
|
+
[{ t: "where", path: "name", op: "eq", value: "Alice" }],
|
|
365
|
+
"test_compat",
|
|
366
|
+
{}
|
|
367
|
+
)
|
|
368
|
+
const r1 = query(db, q1.sql, q1.params)
|
|
369
|
+
expect(r1.length).toBe(1)
|
|
370
|
+
expect((r1[0] as any).id).toBe("1")
|
|
371
|
+
|
|
372
|
+
const q2 = buildWhereSQLQuery(
|
|
373
|
+
sqliteDialect,
|
|
374
|
+
"id",
|
|
375
|
+
[{ t: "where", path: "name", op: "eq", value: "Bob" }],
|
|
376
|
+
"test_compat",
|
|
377
|
+
{}
|
|
378
|
+
)
|
|
379
|
+
const r2 = query(db, q2.sql, q2.params)
|
|
380
|
+
expect(r2.length).toBe(1)
|
|
381
|
+
expect((r2[0] as any).id).toBe("2")
|
|
382
|
+
|
|
383
|
+
// Both queryable by id column
|
|
384
|
+
const q3 = buildWhereSQLQuery(
|
|
385
|
+
sqliteDialect,
|
|
386
|
+
"id",
|
|
387
|
+
[{ t: "where", path: "id", op: "in", value: ["1", "2"] as any }],
|
|
388
|
+
"test_compat",
|
|
389
|
+
{}
|
|
390
|
+
)
|
|
391
|
+
expect(query(db, q3.sql, q3.params).length).toBe(2)
|
|
392
|
+
}))
|
|
393
|
+
|
|
394
|
+
it("queries work when data does not contain id", () =>
|
|
395
|
+
withDb((db) => {
|
|
396
|
+
db.exec(
|
|
397
|
+
`CREATE TABLE IF NOT EXISTS "test_noid" (id TEXT PRIMARY KEY, _etag TEXT, data JSON NOT NULL)`
|
|
398
|
+
)
|
|
399
|
+
const people = [
|
|
400
|
+
{ name: "Alice", age: 30 },
|
|
401
|
+
{ name: "Bob", age: 25 },
|
|
402
|
+
{ name: "Charlie", age: 35 }
|
|
403
|
+
]
|
|
404
|
+
const insert = db.prepare(
|
|
405
|
+
`INSERT INTO "test_noid" (id, _etag, data) VALUES (?, ?, ?)`
|
|
406
|
+
)
|
|
407
|
+
people.forEach((p, i) => insert.run(String(i + 1), `etag_${i + 1}`, JSON.stringify(p)))
|
|
408
|
+
|
|
409
|
+
// Filter by field in data
|
|
410
|
+
const q1 = buildWhereSQLQuery(
|
|
411
|
+
sqliteDialect,
|
|
412
|
+
"id",
|
|
413
|
+
[{ t: "where", path: "age", op: "gt", value: 28 as any }],
|
|
414
|
+
"test_noid",
|
|
415
|
+
{}
|
|
416
|
+
)
|
|
417
|
+
expect(query(db, q1.sql, q1.params).length).toBe(2) // Alice(30), Charlie(35)
|
|
418
|
+
|
|
419
|
+
// Filter by id column
|
|
420
|
+
const q2 = buildWhereSQLQuery(
|
|
421
|
+
sqliteDialect,
|
|
422
|
+
"id",
|
|
423
|
+
[{ t: "where", path: "id", op: "eq", value: "2" }],
|
|
424
|
+
"test_noid",
|
|
425
|
+
{}
|
|
426
|
+
)
|
|
427
|
+
const r2 = query(db, q2.sql, q2.params)
|
|
428
|
+
expect(r2.length).toBe(1)
|
|
429
|
+
expect((r2[0] as any).id).toBe("2")
|
|
430
|
+
expect((JSON.parse((r2[0] as any).data) as any).name).toBe("Bob")
|
|
431
|
+
|
|
432
|
+
// Order + limit still works
|
|
433
|
+
const q3 = buildWhereSQLQuery(
|
|
434
|
+
sqliteDialect,
|
|
435
|
+
"id",
|
|
436
|
+
[],
|
|
437
|
+
"test_noid",
|
|
438
|
+
{},
|
|
439
|
+
undefined,
|
|
440
|
+
[{ key: "age", direction: "ASC" }] as any,
|
|
441
|
+
undefined,
|
|
442
|
+
2
|
|
443
|
+
)
|
|
444
|
+
const r3 = query(db, q3.sql, q3.params)
|
|
445
|
+
expect(r3.length).toBe(2)
|
|
446
|
+
expect((JSON.parse((r3[0] as any).data) as any).name).toBe("Bob") // youngest first
|
|
447
|
+
}))
|
|
448
|
+
|
|
320
449
|
it("query builder generates valid SQL for SQLite", () =>
|
|
321
450
|
withDb((db) => {
|
|
322
451
|
db.exec(
|
|
@@ -334,45 +463,54 @@ describe("SQL Store (SQLite integration)", () => {
|
|
|
334
463
|
`INSERT INTO "test_people" (id, _etag, data) VALUES (?, ?, ?)`
|
|
335
464
|
)
|
|
336
465
|
for (const p of people) {
|
|
337
|
-
|
|
466
|
+
const { id, ...data } = p
|
|
467
|
+
insert.run(id, `etag_${id}`, JSON.stringify(data))
|
|
338
468
|
}
|
|
339
469
|
|
|
340
470
|
// Test eq
|
|
341
471
|
const q1 = buildWhereSQLQuery(
|
|
342
|
-
sqliteDialect,
|
|
472
|
+
sqliteDialect,
|
|
473
|
+
"id",
|
|
343
474
|
[{ t: "where", path: "name", op: "eq", value: "Alice" }],
|
|
344
|
-
"test_people",
|
|
475
|
+
"test_people",
|
|
476
|
+
{}
|
|
345
477
|
)
|
|
346
478
|
expect(query(db, q1.sql, q1.params).length).toBe(1)
|
|
347
479
|
expect((JSON.parse((query(db, q1.sql, q1.params)[0] as any).data) as any).name).toBe("Alice")
|
|
348
480
|
|
|
349
481
|
// Test gt
|
|
350
482
|
const q2 = buildWhereSQLQuery(
|
|
351
|
-
sqliteDialect,
|
|
483
|
+
sqliteDialect,
|
|
484
|
+
"id",
|
|
352
485
|
[{ t: "where", path: "age", op: "gt", value: 28 as any }],
|
|
353
|
-
"test_people",
|
|
486
|
+
"test_people",
|
|
487
|
+
{}
|
|
354
488
|
)
|
|
355
489
|
expect(query(db, q2.sql, q2.params).length).toBe(2)
|
|
356
490
|
|
|
357
491
|
// Test OR
|
|
358
492
|
const q3 = buildWhereSQLQuery(
|
|
359
|
-
sqliteDialect,
|
|
493
|
+
sqliteDialect,
|
|
494
|
+
"id",
|
|
360
495
|
[
|
|
361
496
|
{ t: "where", path: "name", op: "eq", value: "Alice" },
|
|
362
497
|
{ t: "or", path: "name", op: "eq", value: "Bob" }
|
|
363
498
|
],
|
|
364
|
-
"test_people",
|
|
499
|
+
"test_people",
|
|
500
|
+
{}
|
|
365
501
|
)
|
|
366
502
|
expect(query(db, q3.sql, q3.params).length).toBe(2)
|
|
367
503
|
|
|
368
504
|
// Test AND
|
|
369
505
|
const q4 = buildWhereSQLQuery(
|
|
370
|
-
sqliteDialect,
|
|
506
|
+
sqliteDialect,
|
|
507
|
+
"id",
|
|
371
508
|
[
|
|
372
509
|
{ t: "where", path: "name", op: "eq", value: "Alice" },
|
|
373
510
|
{ t: "and", path: "age", op: "gt", value: 25 as any }
|
|
374
511
|
],
|
|
375
|
-
"test_people",
|
|
512
|
+
"test_people",
|
|
513
|
+
{}
|
|
376
514
|
)
|
|
377
515
|
const r4 = query(db, q4.sql, q4.params)
|
|
378
516
|
expect(r4.length).toBe(1)
|
|
@@ -380,25 +518,31 @@ describe("SQL Store (SQLite integration)", () => {
|
|
|
380
518
|
|
|
381
519
|
// Test IN
|
|
382
520
|
const q5 = buildWhereSQLQuery(
|
|
383
|
-
sqliteDialect,
|
|
521
|
+
sqliteDialect,
|
|
522
|
+
"id",
|
|
384
523
|
[{ t: "where", path: "id", op: "in", value: ["1", "3"] as any }],
|
|
385
|
-
"test_people",
|
|
524
|
+
"test_people",
|
|
525
|
+
{}
|
|
386
526
|
)
|
|
387
527
|
expect(query(db, q5.sql, q5.params).length).toBe(2)
|
|
388
528
|
|
|
389
529
|
// Test contains (string)
|
|
390
530
|
const q6 = buildWhereSQLQuery(
|
|
391
|
-
sqliteDialect,
|
|
531
|
+
sqliteDialect,
|
|
532
|
+
"id",
|
|
392
533
|
[{ t: "where", path: "name", op: "contains", value: "li" }],
|
|
393
|
-
"test_people",
|
|
534
|
+
"test_people",
|
|
535
|
+
{}
|
|
394
536
|
)
|
|
395
537
|
expect(query(db, q6.sql, q6.params).length).toBe(2) // Alice, Charlie
|
|
396
538
|
|
|
397
539
|
// Test startsWith
|
|
398
540
|
const q7 = buildWhereSQLQuery(
|
|
399
|
-
sqliteDialect,
|
|
541
|
+
sqliteDialect,
|
|
542
|
+
"id",
|
|
400
543
|
[{ t: "where", path: "name", op: "startsWith", value: "Al" }],
|
|
401
|
-
"test_people",
|
|
544
|
+
"test_people",
|
|
545
|
+
{}
|
|
402
546
|
)
|
|
403
547
|
const r7 = query(db, q7.sql, q7.params)
|
|
404
548
|
expect(r7.length).toBe(1)
|
|
@@ -406,15 +550,18 @@ describe("SQL Store (SQLite integration)", () => {
|
|
|
406
550
|
|
|
407
551
|
// Test includes (array)
|
|
408
552
|
const q8 = buildWhereSQLQuery(
|
|
409
|
-
sqliteDialect,
|
|
553
|
+
sqliteDialect,
|
|
554
|
+
"id",
|
|
410
555
|
[{ t: "where", path: "tags", op: "includes", value: "admin" }],
|
|
411
|
-
"test_people",
|
|
556
|
+
"test_people",
|
|
557
|
+
{}
|
|
412
558
|
)
|
|
413
559
|
expect(query(db, q8.sql, q8.params).length).toBe(2) // Alice, Charlie
|
|
414
560
|
|
|
415
561
|
// Test nested scope: where name = Alice OR (age > 30 AND name contains 'ar')
|
|
416
562
|
const q9 = buildWhereSQLQuery(
|
|
417
|
-
sqliteDialect,
|
|
563
|
+
sqliteDialect,
|
|
564
|
+
"id",
|
|
418
565
|
[
|
|
419
566
|
{ t: "where", path: "name", op: "eq", value: "Alice" },
|
|
420
567
|
{
|
|
@@ -426,19 +573,204 @@ describe("SQL Store (SQLite integration)", () => {
|
|
|
426
573
|
relation: "some"
|
|
427
574
|
}
|
|
428
575
|
],
|
|
429
|
-
"test_people",
|
|
576
|
+
"test_people",
|
|
577
|
+
{}
|
|
430
578
|
)
|
|
431
579
|
expect(query(db, q9.sql, q9.params).length).toBe(2) // Alice + Charlie
|
|
432
580
|
|
|
433
581
|
// Test order + limit
|
|
434
582
|
const q10 = buildWhereSQLQuery(
|
|
435
|
-
sqliteDialect,
|
|
583
|
+
sqliteDialect,
|
|
584
|
+
"id",
|
|
585
|
+
[],
|
|
586
|
+
"test_people",
|
|
587
|
+
{},
|
|
436
588
|
undefined,
|
|
437
589
|
[{ key: "age", direction: "DESC" }] as any,
|
|
438
|
-
undefined,
|
|
590
|
+
undefined,
|
|
591
|
+
2
|
|
439
592
|
)
|
|
440
593
|
const r10 = query(db, q10.sql, q10.params)
|
|
441
594
|
expect(r10.length).toBe(2)
|
|
442
595
|
expect((JSON.parse((r10[0] as any).data) as any).name).toBe("Charlie") // oldest first
|
|
443
596
|
}))
|
|
597
|
+
|
|
598
|
+
it("namespace param is in correct position for SQLite positional placeholders", () =>
|
|
599
|
+
withDb((db) => {
|
|
600
|
+
db.exec(
|
|
601
|
+
`CREATE TABLE IF NOT EXISTS "test_ns" (id TEXT NOT NULL, _namespace TEXT NOT NULL DEFAULT 'primary', _etag TEXT, data JSON NOT NULL, PRIMARY KEY (id, _namespace))`
|
|
602
|
+
)
|
|
603
|
+
const insert = db.prepare(
|
|
604
|
+
`INSERT INTO "test_ns" (id, _namespace, _etag, data) VALUES (?, ?, ?, ?)`
|
|
605
|
+
)
|
|
606
|
+
insert.run("1", "primary", "e1", JSON.stringify({ name: "Alice", role: "admin" }))
|
|
607
|
+
insert.run("2", "primary", "e2", JSON.stringify({ name: "Bob", role: "user" }))
|
|
608
|
+
insert.run("3", "other", "e3", JSON.stringify({ name: "Charlie", role: "admin" }))
|
|
609
|
+
|
|
610
|
+
// Build a filter query: role != 'deleted'
|
|
611
|
+
const q = buildWhereSQLQuery(
|
|
612
|
+
sqliteDialect,
|
|
613
|
+
"id",
|
|
614
|
+
[{ t: "where", path: "role", op: "neq", value: "deleted" }],
|
|
615
|
+
"test_ns",
|
|
616
|
+
{}
|
|
617
|
+
)
|
|
618
|
+
|
|
619
|
+
// Simulate what SQL.ts does: prepend _namespace = ? and put ns FIRST in params
|
|
620
|
+
const hasWhere = q.sql.includes("WHERE")
|
|
621
|
+
const nsSql = hasWhere
|
|
622
|
+
? q.sql.replace("WHERE", `WHERE _namespace = ? AND`)
|
|
623
|
+
: q.sql.replace(`FROM "test_ns"`, `FROM "test_ns" WHERE _namespace = ?`)
|
|
624
|
+
const params = ["primary", ...q.params]
|
|
625
|
+
|
|
626
|
+
const results = query(db, nsSql, params)
|
|
627
|
+
// Should only get Alice and Bob (primary namespace), not Charlie (other namespace)
|
|
628
|
+
expect(results.length).toBe(2)
|
|
629
|
+
const names = results.map((r) => (JSON.parse((r as any).data) as any).name).sort()
|
|
630
|
+
expect(names).toEqual(["Alice", "Bob"])
|
|
631
|
+
}))
|
|
632
|
+
})
|
|
633
|
+
|
|
634
|
+
// --- toRow stripping and parseRow reconstruction tests ---
|
|
635
|
+
|
|
636
|
+
describe("toRow strips _etag and id from data", () => {
|
|
637
|
+
// Replicate the toRow logic from SQL.ts to test in isolation
|
|
638
|
+
const toRow = <IdKey extends PropertyKey>(e: any, idKey: IdKey) => {
|
|
639
|
+
const newE = makeETag(e)
|
|
640
|
+
const id = newE[idKey] as string
|
|
641
|
+
const { _etag, [idKey]: _id, ...rest } = newE as any
|
|
642
|
+
const data = JSON.stringify(rest)
|
|
643
|
+
return { id, _etag: newE._etag!, data, item: newE }
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
it("data JSON does not contain _etag", () => {
|
|
647
|
+
const row = toRow({ id: "1", _etag: undefined, name: "Alice", age: 30 }, "id")
|
|
648
|
+
const parsed = JSON.parse(row.data) as any
|
|
649
|
+
expect(parsed).not.toHaveProperty("_etag")
|
|
650
|
+
expect(parsed.name).toBe("Alice")
|
|
651
|
+
expect(parsed.age).toBe(30)
|
|
652
|
+
})
|
|
653
|
+
|
|
654
|
+
it("data JSON does not contain id field", () => {
|
|
655
|
+
const row = toRow({ id: "1", _etag: undefined, name: "Alice" }, "id")
|
|
656
|
+
const parsed = JSON.parse(row.data) as any
|
|
657
|
+
expect(parsed).not.toHaveProperty("id")
|
|
658
|
+
expect(parsed.name).toBe("Alice")
|
|
659
|
+
})
|
|
660
|
+
|
|
661
|
+
it("data JSON does not contain custom idKey field", () => {
|
|
662
|
+
const row = toRow({ myId: "abc", _etag: undefined, name: "Bob" }, "myId")
|
|
663
|
+
const parsed = JSON.parse(row.data) as any
|
|
664
|
+
expect(parsed).not.toHaveProperty("myId")
|
|
665
|
+
expect(parsed.name).toBe("Bob")
|
|
666
|
+
expect(row.id).toBe("abc")
|
|
667
|
+
})
|
|
668
|
+
|
|
669
|
+
it("id and _etag are returned as separate fields", () => {
|
|
670
|
+
const row = toRow({ id: "1", _etag: undefined, name: "Alice" }, "id")
|
|
671
|
+
expect(row.id).toBe("1")
|
|
672
|
+
expect(typeof row._etag).toBe("string")
|
|
673
|
+
expect(row._etag.length).toBeGreaterThan(0)
|
|
674
|
+
})
|
|
675
|
+
|
|
676
|
+
it("item still contains all fields including _etag and id", () => {
|
|
677
|
+
const row = toRow({ id: "1", _etag: undefined, name: "Alice" }, "id")
|
|
678
|
+
expect(row.item.id).toBe("1")
|
|
679
|
+
expect(row.item._etag).toBe(row._etag)
|
|
680
|
+
expect(row.item.name).toBe("Alice")
|
|
681
|
+
})
|
|
682
|
+
|
|
683
|
+
it("preserves nested objects in data", () => {
|
|
684
|
+
const row = toRow({ id: "1", _etag: undefined, address: { city: "NYC", zip: "10001" } }, "id")
|
|
685
|
+
const parsed = JSON.parse(row.data) as any
|
|
686
|
+
expect(parsed.address).toEqual({ city: "NYC", zip: "10001" })
|
|
687
|
+
expect(parsed).not.toHaveProperty("id")
|
|
688
|
+
expect(parsed).not.toHaveProperty("_etag")
|
|
689
|
+
})
|
|
690
|
+
})
|
|
691
|
+
|
|
692
|
+
describe("parseRow reconstructs full object from row", () => {
|
|
693
|
+
it("re-injects id from row column using idKey", () => {
|
|
694
|
+
const result: any = parseRow(
|
|
695
|
+
{ id: "42", _etag: "etag1", data: JSON.stringify({ name: "Alice", age: 30 }) },
|
|
696
|
+
"id",
|
|
697
|
+
{}
|
|
698
|
+
)
|
|
699
|
+
expect(result.id).toBe("42")
|
|
700
|
+
expect(result.name).toBe("Alice")
|
|
701
|
+
expect(result.age).toBe(30)
|
|
702
|
+
expect(result._etag).toBe("etag1")
|
|
703
|
+
})
|
|
704
|
+
|
|
705
|
+
it("re-injects custom idKey from row column", () => {
|
|
706
|
+
const result: any = parseRow(
|
|
707
|
+
{ id: "abc", _etag: "etag2", data: JSON.stringify({ name: "Bob" }) },
|
|
708
|
+
"myId",
|
|
709
|
+
{}
|
|
710
|
+
)
|
|
711
|
+
expect(result.myId).toBe("abc")
|
|
712
|
+
expect(result.name).toBe("Bob")
|
|
713
|
+
expect(result._etag).toBe("etag2")
|
|
714
|
+
})
|
|
715
|
+
|
|
716
|
+
it("uses _etag from row column, not from data", () => {
|
|
717
|
+
const result: any = parseRow(
|
|
718
|
+
{ id: "1", _etag: "column_etag", data: JSON.stringify({ _etag: "stale_data_etag", name: "Alice" }) },
|
|
719
|
+
"id",
|
|
720
|
+
{}
|
|
721
|
+
)
|
|
722
|
+
expect(result._etag).toBe("column_etag")
|
|
723
|
+
})
|
|
724
|
+
|
|
725
|
+
it("uses id from row column, not from data", () => {
|
|
726
|
+
const result: any = parseRow(
|
|
727
|
+
{ id: "correct_id", _etag: "e1", data: JSON.stringify({ id: "wrong_id", name: "Alice" }) },
|
|
728
|
+
"id",
|
|
729
|
+
{}
|
|
730
|
+
)
|
|
731
|
+
expect(result.id).toBe("correct_id")
|
|
732
|
+
})
|
|
733
|
+
|
|
734
|
+
it("applies defaultValues for missing fields", () => {
|
|
735
|
+
const result: any = parseRow(
|
|
736
|
+
{ id: "1", _etag: "e1", data: JSON.stringify({ name: "Alice" }) },
|
|
737
|
+
"id",
|
|
738
|
+
{ status: "active", role: "user" }
|
|
739
|
+
)
|
|
740
|
+
expect(result.name).toBe("Alice")
|
|
741
|
+
expect(result.status).toBe("active")
|
|
742
|
+
expect(result.role).toBe("user")
|
|
743
|
+
})
|
|
744
|
+
|
|
745
|
+
it("data fields override defaultValues", () => {
|
|
746
|
+
const result: any = parseRow(
|
|
747
|
+
{ id: "1", _etag: "e1", data: JSON.stringify({ name: "Alice", status: "inactive" }) },
|
|
748
|
+
"id",
|
|
749
|
+
{ status: "active" }
|
|
750
|
+
)
|
|
751
|
+
expect(result.status).toBe("inactive")
|
|
752
|
+
})
|
|
753
|
+
|
|
754
|
+
it("handles null _etag from row", () => {
|
|
755
|
+
const result: any = parseRow(
|
|
756
|
+
{ id: "1", _etag: null, data: JSON.stringify({ name: "Alice" }) },
|
|
757
|
+
"id",
|
|
758
|
+
{}
|
|
759
|
+
)
|
|
760
|
+
expect(result._etag).toBeUndefined()
|
|
761
|
+
})
|
|
762
|
+
|
|
763
|
+
it("round-trip: toRow then parseRow reconstructs the original", () => {
|
|
764
|
+
const original = { id: "1", _etag: undefined as string | undefined, name: "Alice", age: 30, tags: ["admin"] }
|
|
765
|
+
const newE = makeETag(original)
|
|
766
|
+
const { _etag, id: _id, ...rest } = newE as any
|
|
767
|
+
const row = { id: newE.id, _etag: newE._etag!, data: JSON.stringify(rest) }
|
|
768
|
+
|
|
769
|
+
const reconstructed: any = parseRow(row, "id", {})
|
|
770
|
+
expect(reconstructed.id).toBe("1")
|
|
771
|
+
expect(reconstructed.name).toBe("Alice")
|
|
772
|
+
expect(reconstructed.age).toBe(30)
|
|
773
|
+
expect(reconstructed.tags).toEqual(["admin"])
|
|
774
|
+
expect(reconstructed._etag).toBe(newE._etag)
|
|
775
|
+
})
|
|
444
776
|
})
|