@voltro/database 0.18.0 → 0.20.0
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 +245 -3
- package/dist/index.d.ts +209 -4
- package/dist/index.js +490 -441
- package/dist/sql.d.ts +3 -2
- package/dist/sql.js +327 -327
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { $ as e, A as t, At as n, B as r, C as i, Ct as a, D as o, Dt as s, E as c, Et as l, F as u, G as d, H as f, I as p, J as m, K as h, L as g, M as ee, Mt as _, N as v, Nt as y, O as b, Ot as x, P as te, Q as S, R as ne, S as re, St as C, T as ie, Tt as ae, U as w, V as oe, W as se, X as ce, Y as le, Z as ue, _ as de, _t as fe, a as pe, at as me, b as he, bt as ge, c as _e, ct as ve, d as ye, dt as be, et as xe, f as Se, ft as Ce, g as we, gt as Te, h as Ee, ht as De, i as T, it as Oe, j as ke, jt as E, k as Ae, kt as je, l as Me, lt as Ne, m as Pe, mt as Fe, n as Ie, nt as Le, o as Re, ot as ze, p as Be, pt as Ve, q as He, r as Ue, rt as We, s as Ge, st as Ke, t as qe, tt as Je, u as Ye, ut as Xe, v as Ze, vt as Qe, w as $e, wt as D, x as et, xt as O, y as tt, yt as nt, z as rt } from "./fileBased-Dfuv6JWP.js";
|
|
2
2
|
import { timestampMs as it, timestampMsOrNull as at } from "./wire.js";
|
|
3
3
|
import { Chunk as ot, Data as st, Effect as ct, Option as k, Schema as A, Stream as lt } from "effect";
|
|
4
|
+
import { AsyncLocalStorage as ut } from "node:async_hooks";
|
|
4
5
|
import { ansi as j } from "@voltro/logger";
|
|
5
|
-
import { SqlClient as
|
|
6
|
+
import { SqlClient as dt } from "@effect/sql";
|
|
6
7
|
//#region src/arrayCodec.ts
|
|
7
|
-
var
|
|
8
|
+
var ft = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqlite", pt = (e) => {
|
|
8
9
|
let t = [];
|
|
9
10
|
for (let [n, r] of Object.entries(e.fields)) r.type === "array" && t.push(n);
|
|
10
11
|
return t;
|
|
11
|
-
},
|
|
12
|
-
if (!
|
|
13
|
-
let r =
|
|
12
|
+
}, mt = (e, t, n) => {
|
|
13
|
+
if (!ft(n) || !t) return e;
|
|
14
|
+
let r = pt(t);
|
|
14
15
|
if (r.length === 0) return e;
|
|
15
16
|
let i = { ...e };
|
|
16
17
|
for (let e of r) {
|
|
@@ -18,9 +19,9 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
18
19
|
Array.isArray(t) && (i[e] = JSON.stringify(t));
|
|
19
20
|
}
|
|
20
21
|
return i;
|
|
21
|
-
},
|
|
22
|
-
if (!
|
|
23
|
-
let r =
|
|
22
|
+
}, ht = (e, t, n) => {
|
|
23
|
+
if (!ft(n) || !t) return e;
|
|
24
|
+
let r = pt(t);
|
|
24
25
|
return r.length === 0 ? e : e.map((e) => {
|
|
25
26
|
let t;
|
|
26
27
|
for (let n of r) {
|
|
@@ -32,7 +33,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
32
33
|
}
|
|
33
34
|
return t ?? e;
|
|
34
35
|
});
|
|
35
|
-
},
|
|
36
|
+
}, gt = "enc:v1:", _t = class extends Error {
|
|
36
37
|
_tag = "FieldDecryptionError";
|
|
37
38
|
table;
|
|
38
39
|
column;
|
|
@@ -40,33 +41,33 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
40
41
|
constructor(e) {
|
|
41
42
|
super(`column "${e.table}.${e.column}" is .encrypted() but could not be decrypted (${e.reason}) — the stored value was most likely encrypted under a different key`), this.name = "FieldDecryptionError", this.table = e.table, this.column = e.column, this.reason = e.reason;
|
|
42
43
|
}
|
|
43
|
-
},
|
|
44
|
+
}, vt = (e) => typeof e == "object" && !!e && e._tag === "FieldDecryptionError", yt = (e) => typeof e == "string" && e.startsWith("enc:v1:"), bt = (e) => {
|
|
44
45
|
let t = [];
|
|
45
46
|
for (let [n, r] of Object.entries(e.fields)) r.encrypted === !0 && t.push(n);
|
|
46
47
|
return t;
|
|
47
|
-
},
|
|
48
|
+
}, xt = (e, t, n) => {
|
|
48
49
|
if (!t) return e;
|
|
49
|
-
let r =
|
|
50
|
+
let r = bt(t);
|
|
50
51
|
if (r.length === 0) return e;
|
|
51
52
|
let i = { ...e };
|
|
52
53
|
for (let e of r) {
|
|
53
54
|
let r = i[e];
|
|
54
|
-
if (!(r == null ||
|
|
55
|
+
if (!(r == null || yt(r))) {
|
|
55
56
|
if (!n) throw Error(`column "${t.tableName ?? "?"}.${e}" is .encrypted() but no field cipher is registered — wire @voltro/plugin-governance's fieldEncryption (key via the Secrets-Resolver)`);
|
|
56
57
|
i[e] = n.encrypt(JSON.stringify(r));
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
return i;
|
|
60
|
-
},
|
|
61
|
+
}, St = (e, t, n, r) => {
|
|
61
62
|
if (!t) return e;
|
|
62
|
-
let i =
|
|
63
|
+
let i = bt(t);
|
|
63
64
|
if (i.length === 0 || !n) return e;
|
|
64
65
|
let a = r?.onError ?? "throw", o = t.tableName ?? "?";
|
|
65
66
|
return e.map((e) => {
|
|
66
67
|
let t;
|
|
67
68
|
for (let s of i) {
|
|
68
69
|
let i = e[s];
|
|
69
|
-
if (
|
|
70
|
+
if (yt(i)) {
|
|
70
71
|
t ??= { ...e };
|
|
71
72
|
try {
|
|
72
73
|
t[s] = JSON.parse(n.decrypt(i));
|
|
@@ -80,7 +81,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
80
81
|
});
|
|
81
82
|
continue;
|
|
82
83
|
}
|
|
83
|
-
throw new
|
|
84
|
+
throw new _t({
|
|
84
85
|
table: o,
|
|
85
86
|
column: s,
|
|
86
87
|
reason: n
|
|
@@ -90,7 +91,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
90
91
|
}
|
|
91
92
|
return t ?? e;
|
|
92
93
|
});
|
|
93
|
-
},
|
|
94
|
+
}, Ct = (e) => {
|
|
94
95
|
let t = (() => {
|
|
95
96
|
switch (e.type) {
|
|
96
97
|
case "id":
|
|
@@ -111,37 +112,37 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
111
112
|
}
|
|
112
113
|
})();
|
|
113
114
|
return e.nullable === !0 ? A.NullOr(t) : t;
|
|
114
|
-
},
|
|
115
|
+
}, wt = (e, t) => {
|
|
115
116
|
let n = new Set(t?.omit ?? []), r = {};
|
|
116
|
-
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] =
|
|
117
|
+
for (let [t, i] of Object.entries(e.fields)) n.has(t) || (r[t] = Ct(i));
|
|
117
118
|
return A.Struct(r);
|
|
118
|
-
},
|
|
119
|
+
}, Tt = (e) => typeof e == "function" ? e : () => e, Et = (e, t) => ({
|
|
119
120
|
kind: "one",
|
|
120
|
-
target:
|
|
121
|
+
target: Tt(e),
|
|
121
122
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
122
123
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
123
|
-
}),
|
|
124
|
+
}), Dt = (e, t) => ({
|
|
124
125
|
kind: "many",
|
|
125
|
-
target:
|
|
126
|
+
target: Tt(e),
|
|
126
127
|
...t?.foreignKey === void 0 ? {} : { foreignKey: t.foreignKey },
|
|
127
128
|
...t?.sourceKey === void 0 ? {} : { sourceKey: t.sourceKey }
|
|
128
|
-
}),
|
|
129
|
+
}), Ot = (e, t) => ({
|
|
129
130
|
kind: "manyToMany",
|
|
130
|
-
target:
|
|
131
|
-
through:
|
|
131
|
+
target: Tt(e),
|
|
132
|
+
through: Tt(t.through),
|
|
132
133
|
sourceKey: t.sourceKey,
|
|
133
134
|
targetKey: t.targetKey
|
|
134
|
-
}),
|
|
135
|
-
one:
|
|
136
|
-
many:
|
|
137
|
-
manyToMany:
|
|
138
|
-
},
|
|
135
|
+
}), kt = {
|
|
136
|
+
one: Et,
|
|
137
|
+
many: Dt,
|
|
138
|
+
manyToMany: Ot
|
|
139
|
+
}, At = (e, t) => {
|
|
139
140
|
let n = typeof e == "function" ? e : () => e;
|
|
140
141
|
return {
|
|
141
142
|
source: n,
|
|
142
|
-
relations: t(
|
|
143
|
+
relations: t(kt, n())
|
|
143
144
|
};
|
|
144
|
-
},
|
|
145
|
+
}, jt = (e) => {
|
|
145
146
|
if (typeof e != "object" || !e) return !1;
|
|
146
147
|
let t = e;
|
|
147
148
|
if (typeof t.source != "function" || typeof t.relations != "object" || t.relations === null) return !1;
|
|
@@ -150,64 +151,64 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
150
151
|
let t = e?.kind;
|
|
151
152
|
return t === "one" || t === "many" || t === "manyToMany";
|
|
152
153
|
});
|
|
153
|
-
},
|
|
154
|
+
}, Mt = Et, Nt = Dt, Pt = Ot, Ft = (e, t, n) => {
|
|
154
155
|
let r = [];
|
|
155
156
|
for (let [n, i] of Object.entries(e.fields)) i.type === "reference" && i.references?.()?.tableName === t && r.push(n);
|
|
156
157
|
if (r.length === 0) throw Error(`relation '${n}': no reference() column on '${e.tableName}' points at '${t}'. Either add one or pass an explicit { foreignKey: '<column>' }.`);
|
|
157
158
|
if (r.length > 1) throw Error(`relation '${n}': multiple reference() columns on '${e.tableName}' point at '${t}' (${r.join(", ")}). Pass an explicit { foreignKey: '<column>' } to disambiguate.`);
|
|
158
159
|
return r[0];
|
|
159
|
-
},
|
|
160
|
-
let t =
|
|
160
|
+
}, It = (e) => Object.keys(e.fields), Lt = (e, t) => Object.prototype.hasOwnProperty.call(e.fields, t), Rt = (e) => {
|
|
161
|
+
let t = It(e);
|
|
161
162
|
return t.length === 0 ? "<none>" : t.join(", ");
|
|
162
|
-
},
|
|
163
|
+
}, zt = (e, t, n) => {
|
|
163
164
|
let r = `relation '${t}' on '${e.tableName}'`, i = n.target();
|
|
164
165
|
if (n.kind === "manyToMany") {
|
|
165
166
|
let t = n.through();
|
|
166
|
-
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!
|
|
167
|
+
for (let [a, o] of [["sourceKey", n.sourceKey], ["targetKey", n.targetKey]]) if (!Lt(t, o)) throw Error(`${r}: manyToMany ${a} '${o}' is not a column on the junction table '${t.tableName}'. Both keys name columns on the JUNCTION — ${a === "sourceKey" ? `sourceKey points at '${e.tableName}'` : `targetKey points at '${i.tableName}'`}. Columns on '${t.tableName}': ${Rt(t)}.`);
|
|
167
168
|
return;
|
|
168
169
|
}
|
|
169
170
|
if (n.sourceKey !== void 0 && n.foreignKey !== void 0) throw Error(`${r}: pass EITHER sourceKey OR foreignKey, not both. sourceKey '${n.sourceKey}' names a column on the source ('${e.tableName}') holding the target's id; foreignKey '${n.foreignKey}' names a column on the target ('${i.tableName}') holding the source's id. With both, foreignKey is ignored.`);
|
|
170
|
-
if (n.sourceKey !== void 0 && !
|
|
171
|
-
let t =
|
|
172
|
-
throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${
|
|
171
|
+
if (n.sourceKey !== void 0 && !Lt(e, n.sourceKey)) {
|
|
172
|
+
let t = Lt(i, n.sourceKey);
|
|
173
|
+
throw Error(`${r}: sourceKey '${n.sourceKey}' is not a column on the source table '${e.tableName}'.` + (t ? ` It IS a column on the target '${i.tableName}' — you probably want { foreignKey: '${n.sourceKey}' }, which names the column on the TARGET that holds this table's id.` : ` Columns on '${e.tableName}': ${Rt(e)}.`));
|
|
173
174
|
}
|
|
174
|
-
if (n.foreignKey !== void 0 && !
|
|
175
|
-
let t =
|
|
176
|
-
throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${
|
|
175
|
+
if (n.foreignKey !== void 0 && !Lt(i, n.foreignKey)) {
|
|
176
|
+
let t = Lt(e, n.foreignKey);
|
|
177
|
+
throw Error(`${r}: foreignKey '${n.foreignKey}' is not a column on the target table '${i.tableName}'.` + (t ? ` It IS a column on the source '${e.tableName}' — you want { sourceKey: '${n.foreignKey}' }. foreignKey names the column on the TARGET that points back at this table; sourceKey names the column on THIS table that holds the target's id.` : ` Columns on '${i.tableName}': ${Rt(i)}.`));
|
|
177
178
|
}
|
|
178
|
-
},
|
|
179
|
-
let t = e.source(), n =
|
|
179
|
+
}, Bt = Symbol.for("@voltro/database/relationsRegistry"), Vt = globalThis, M = Vt[Bt] ?? (Vt[Bt] = /* @__PURE__ */ new Map()), Ht = (e) => {
|
|
180
|
+
let t = e.source(), n = M.get(t.tableName);
|
|
180
181
|
if (n === void 0) {
|
|
181
|
-
|
|
182
|
+
M.set(t.tableName, new Map(Object.entries(e.relations)));
|
|
182
183
|
return;
|
|
183
184
|
}
|
|
184
185
|
for (let [r, i] of Object.entries(e.relations)) {
|
|
185
186
|
if (n.has(r)) throw Error(`duplicate relation '${r}' on '${t.tableName}': two relations() blocks both declare it. Pick distinct names or merge them into one block.`);
|
|
186
187
|
n.set(r, i);
|
|
187
188
|
}
|
|
188
|
-
},
|
|
189
|
+
}, Ut = (e) => {
|
|
189
190
|
let t = 0;
|
|
190
|
-
for (let n of Object.values(e))
|
|
191
|
+
for (let n of Object.values(e)) jt(n) && (Ht(n), t += 1);
|
|
191
192
|
return t;
|
|
192
|
-
},
|
|
193
|
-
let t =
|
|
193
|
+
}, Wt = (e) => {
|
|
194
|
+
let t = M.get(e);
|
|
194
195
|
if (t !== void 0) return Object.fromEntries(t);
|
|
195
|
-
},
|
|
196
|
+
}, Gt = (e, t) => M.get(e)?.get(t), Kt = () => {
|
|
196
197
|
let e = [];
|
|
197
|
-
for (let [t, n] of
|
|
198
|
+
for (let [t, n] of M) for (let [r, i] of n) e.push({
|
|
198
199
|
source: t,
|
|
199
200
|
name: r,
|
|
200
201
|
relation: i
|
|
201
202
|
});
|
|
202
203
|
return e;
|
|
203
|
-
},
|
|
204
|
-
for (let [e, t] of
|
|
204
|
+
}, qt = () => {
|
|
205
|
+
for (let [e, t] of M) {
|
|
205
206
|
let n = u(e);
|
|
206
|
-
if (n !== void 0) for (let [e, r] of t)
|
|
207
|
+
if (n !== void 0) for (let [e, r] of t) zt(n, e, r);
|
|
207
208
|
}
|
|
208
|
-
},
|
|
209
|
-
|
|
210
|
-
},
|
|
209
|
+
}, Jt = () => {
|
|
210
|
+
M.clear();
|
|
211
|
+
}, Yt = (e) => e == null || typeof e == "boolean" ? e : typeof e == "number" ? e !== 0 : typeof e == "bigint" ? e !== 0n : typeof e == "string" ? e === "1" || e.toLowerCase() === "true" : e, Xt = (e) => {
|
|
211
212
|
if (e == null || typeof e != "string") return e;
|
|
212
213
|
let t = e.trim();
|
|
213
214
|
if (t.length === 0) return e;
|
|
@@ -218,7 +219,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
218
219
|
} catch {
|
|
219
220
|
return e;
|
|
220
221
|
}
|
|
221
|
-
},
|
|
222
|
+
}, Zt = (e) => e == null || typeof e == "string" ? e : typeof e == "number" || typeof e == "bigint" ? String(e) : e, Qt = (e) => {
|
|
222
223
|
if (e == null || e instanceof Date) return e;
|
|
223
224
|
if (typeof e == "string") {
|
|
224
225
|
let t = new Date(e);
|
|
@@ -229,19 +230,19 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
229
230
|
return isNaN(t.getTime()) ? e : t;
|
|
230
231
|
}
|
|
231
232
|
return e;
|
|
232
|
-
},
|
|
233
|
+
}, $t = (e, t, n) => {
|
|
233
234
|
if (e == null) return e;
|
|
234
235
|
switch (t) {
|
|
235
|
-
case "boolean": return n === "postgres" ? e :
|
|
236
|
+
case "boolean": return n === "postgres" ? e : Yt(e);
|
|
236
237
|
case "json":
|
|
237
|
-
case "array": return n === "postgres" ? e :
|
|
238
|
+
case "array": return n === "postgres" ? e : Xt(e);
|
|
238
239
|
case "timestamp":
|
|
239
|
-
case "date": return n === "sqlite" || n === "turso" ?
|
|
240
|
+
case "date": return n === "sqlite" || n === "turso" ? Qt(e) : e;
|
|
240
241
|
case "decimal":
|
|
241
|
-
case "bigint": return
|
|
242
|
+
case "bigint": return Zt(e);
|
|
242
243
|
default: return e;
|
|
243
244
|
}
|
|
244
|
-
},
|
|
245
|
+
}, en = (e, t, n) => {
|
|
245
246
|
if (e.length === 0) return e;
|
|
246
247
|
let r = u(t);
|
|
247
248
|
if (r === void 0) return e;
|
|
@@ -252,36 +253,36 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
252
253
|
});
|
|
253
254
|
return e.map((e) => {
|
|
254
255
|
let t = { ...e };
|
|
255
|
-
for (let { key: e, type: r } of a) e in t && (t[e] =
|
|
256
|
+
for (let { key: e, type: r } of a) e in t && (t[e] = $t(t[e], r, n));
|
|
256
257
|
return t;
|
|
257
258
|
});
|
|
258
|
-
},
|
|
259
|
+
}, tn = (e, t) => {
|
|
259
260
|
if (e == null) return e;
|
|
260
261
|
switch (t) {
|
|
261
262
|
case "json":
|
|
262
263
|
case "array": return typeof e == "string" ? e : JSON.stringify(e);
|
|
263
264
|
default: return e;
|
|
264
265
|
}
|
|
265
|
-
},
|
|
266
|
+
}, nn = (e, t, n = ["json", "array"]) => {
|
|
266
267
|
let r = u(t);
|
|
267
268
|
if (r === void 0) return e;
|
|
268
269
|
let i = r.fields, a = null;
|
|
269
270
|
for (let [t, r] of Object.entries(i)) if (n.includes(r.type) && t in e) {
|
|
270
|
-
let n =
|
|
271
|
+
let n = tn(e[t], r.type);
|
|
271
272
|
n !== e[t] && (a === null && (a = { ...e }), a[t] = n);
|
|
272
273
|
}
|
|
273
274
|
return a ?? e;
|
|
274
|
-
},
|
|
275
|
+
}, rn = class extends Error {
|
|
275
276
|
_tag = "EagerCardinalityError";
|
|
276
277
|
constructor(e) {
|
|
277
278
|
super(e), this.name = "EagerCardinalityError";
|
|
278
279
|
}
|
|
279
|
-
},
|
|
280
|
+
}, an = (e) => {
|
|
280
281
|
let { relationName: t, sourceTableName: n, targetTableName: r, foreignKey: i, sourceKey: a } = e, o = r === n;
|
|
281
282
|
return `relation '${t}' on '${n}' is declared \`one\`, but ${r}.${i} matches MORE than one row for the same ${n}.${a} — so there is no single related row to return.` + (o ? ` Because this relation is self-referential, check which side the key is on: \`foreignKey: '${i}'\` means "rows whose ${i} points AT me" (my children — there can be many). If you meant "the row my ${i} points to" (my parent), that is \`sourceKey: '${i}'\`.` : " Use `many(...)` if several are expected, or narrow the key.");
|
|
282
|
-
},
|
|
283
|
+
}, on = async (e, t, n, r) => {
|
|
283
284
|
if (e.length === 0) return e;
|
|
284
|
-
let i =
|
|
285
|
+
let i = Wt(n.tableName);
|
|
285
286
|
if (i === void 0) throw Error(`cannot eager-load on '${n.tableName}': no relations registered. Did you forget to declare \`relations(${n.tableName}, ...)\` or import the file that does?`);
|
|
286
287
|
let a = e.map((e) => ({ ...e }));
|
|
287
288
|
for (let [e, o] of Object.entries(t)) {
|
|
@@ -290,36 +291,36 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
290
291
|
let t = Object.keys(i).join(", ") || "<none>";
|
|
291
292
|
throw Error(`unknown relation '${e}' on '${n.tableName}'. Registered relations: ${t}.`);
|
|
292
293
|
}
|
|
293
|
-
|
|
294
|
+
zt(n, e, t), await sn(a, e, t, o === !0 ? {} : o, n, r);
|
|
294
295
|
}
|
|
295
296
|
return a;
|
|
296
|
-
},
|
|
297
|
+
}, sn = async (e, t, n, r, i, a) => {
|
|
297
298
|
switch (n.kind) {
|
|
298
299
|
case "one":
|
|
299
|
-
await
|
|
300
|
+
await cn(e, t, n, r, i, a);
|
|
300
301
|
return;
|
|
301
302
|
case "many":
|
|
302
|
-
await
|
|
303
|
+
await ln(e, t, n, r, i, a);
|
|
303
304
|
return;
|
|
304
305
|
case "manyToMany":
|
|
305
|
-
await
|
|
306
|
+
await dn(e, t, n, r, i, a);
|
|
306
307
|
return;
|
|
307
308
|
}
|
|
308
|
-
},
|
|
309
|
-
let o = n.target(), s = n.sourceKey ??
|
|
309
|
+
}, cn = async (e, t, n, r, i, a) => {
|
|
310
|
+
let o = n.target(), s = n.sourceKey ?? fn(i, o.tableName);
|
|
310
311
|
if (s !== void 0) {
|
|
311
|
-
let n =
|
|
312
|
+
let n = pn(e, s), i = n.length === 0 ? [] : await mn(o, "id", n, r, a), c = new Map(i.map((e) => [e.id, e]));
|
|
312
313
|
for (let n of e) {
|
|
313
314
|
let e = n[s];
|
|
314
315
|
n[t] = e == null ? null : c.get(e) ?? null;
|
|
315
316
|
}
|
|
316
|
-
await
|
|
317
|
+
await hn(i, r.with, o, a);
|
|
317
318
|
return;
|
|
318
319
|
}
|
|
319
|
-
let c = n.foreignKey ??
|
|
320
|
+
let c = n.foreignKey ?? Ft(o, i.tableName, t), l = n.sourceKey ?? "id", u = pn(e, l), d = u.length === 0 ? [] : await mn(o, c, u, r, a), f = /* @__PURE__ */ new Map();
|
|
320
321
|
for (let e of d) {
|
|
321
322
|
let n = e[c];
|
|
322
|
-
if (f.has(n)) throw new
|
|
323
|
+
if (f.has(n)) throw new rn(an({
|
|
323
324
|
relationName: t,
|
|
324
325
|
sourceTableName: i.tableName,
|
|
325
326
|
targetTableName: o.tableName,
|
|
@@ -332,9 +333,9 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
332
333
|
let e = n[l];
|
|
333
334
|
n[t] = e == null ? null : f.get(e) ?? null;
|
|
334
335
|
}
|
|
335
|
-
await
|
|
336
|
-
},
|
|
337
|
-
let o = n.target(), s = n.foreignKey ??
|
|
336
|
+
await hn(d, r.with, o, a);
|
|
337
|
+
}, ln = async (e, t, n, r, i, a) => {
|
|
338
|
+
let o = n.target(), s = n.foreignKey ?? Ft(o, i.tableName, t), c = n.sourceKey ?? "id", l = pn(e, c), u = un(r), d = l.length === 0 ? [] : await mn(o, s, l, u, a), f = /* @__PURE__ */ new Map();
|
|
338
339
|
for (let e of d) {
|
|
339
340
|
let t = e[s], n = f.get(t);
|
|
340
341
|
n ? n.push(e) : f.set(t, [e]);
|
|
@@ -350,12 +351,12 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
350
351
|
let e = n[c];
|
|
351
352
|
n[t] = f.get(e) ?? [];
|
|
352
353
|
}
|
|
353
|
-
await
|
|
354
|
-
},
|
|
354
|
+
await hn(d, r.with, o, a);
|
|
355
|
+
}, un = (e) => {
|
|
355
356
|
let { limit: t, offset: n, ...r } = e;
|
|
356
357
|
return r;
|
|
357
|
-
},
|
|
358
|
-
let o = n.target(), s = n.through(), c =
|
|
358
|
+
}, dn = async (e, t, n, r, i, a) => {
|
|
359
|
+
let o = n.target(), s = n.through(), c = pn(e, "id");
|
|
359
360
|
if (c.length === 0) {
|
|
360
361
|
for (let n of e) n[t] = [];
|
|
361
362
|
return;
|
|
@@ -376,8 +377,8 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
376
377
|
for (let n of e) n[t] = [];
|
|
377
378
|
return;
|
|
378
379
|
}
|
|
379
|
-
let f = await
|
|
380
|
-
await
|
|
380
|
+
let f = await mn(o, "id", pn(d, n.targetKey), r, a), p = new Map(f.map((e) => [e.id, e]));
|
|
381
|
+
await hn(f, r.with, o, a);
|
|
381
382
|
let m = r.junction === void 0 ? void 0 : r.junction === !0 ? Object.keys(s.fields) : r.junction, h = /* @__PURE__ */ new Map();
|
|
382
383
|
for (let e of d) {
|
|
383
384
|
let t = e[n.sourceKey], r = e[n.targetKey], i = p.get(r);
|
|
@@ -389,16 +390,16 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
389
390
|
o ? o.push(a) : h.set(t, [a]);
|
|
390
391
|
}
|
|
391
392
|
for (let n of e) n[t] = h.get(n.id) ?? [];
|
|
392
|
-
},
|
|
393
|
+
}, fn = (e, t) => {
|
|
393
394
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
394
|
-
},
|
|
395
|
+
}, pn = (e, t) => {
|
|
395
396
|
let n = /* @__PURE__ */ new Set();
|
|
396
397
|
for (let r of e) {
|
|
397
398
|
let e = r[t];
|
|
398
399
|
e != null && n.add(e);
|
|
399
400
|
}
|
|
400
401
|
return [...n];
|
|
401
|
-
},
|
|
402
|
+
}, mn = (e, t, n, r, i) => {
|
|
402
403
|
let a = {
|
|
403
404
|
column: t,
|
|
404
405
|
op: "in",
|
|
@@ -412,50 +413,50 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
412
413
|
skip: r.offset,
|
|
413
414
|
projection: void 0
|
|
414
415
|
});
|
|
415
|
-
},
|
|
416
|
-
t !== void 0 && e.length !== 0 && (await
|
|
416
|
+
}, hn = async (e, t, n, r) => {
|
|
417
|
+
t !== void 0 && e.length !== 0 && (await on(e, t, n, r)).forEach((t, n) => {
|
|
417
418
|
let r = e[n];
|
|
418
419
|
for (let [e, n] of Object.entries(t)) e in r || (r[e] = n);
|
|
419
420
|
});
|
|
420
|
-
},
|
|
421
|
+
}, gn = (e) => e.eager !== void 0 && Object.keys(e.eager).length > 0, _n = class extends Error {
|
|
421
422
|
_tag = "TenantNamespaceUnresolved";
|
|
422
423
|
constructor(e) {
|
|
423
424
|
super(e), this.name = "TenantNamespaceUnresolved";
|
|
424
425
|
}
|
|
425
|
-
},
|
|
426
|
+
}, vn = class extends Error {
|
|
426
427
|
_tag = "TenantNamespaceInvalid";
|
|
427
428
|
constructor(e) {
|
|
428
429
|
super(e), this.name = "TenantNamespaceInvalid";
|
|
429
430
|
}
|
|
430
|
-
},
|
|
431
|
-
if (e == null || e === "") throw new
|
|
432
|
-
let t =
|
|
433
|
-
if (t.replace(/_/g, "") === "") throw new
|
|
434
|
-
let n = `${
|
|
435
|
-
if (n.length >
|
|
431
|
+
}, yn = 63, bn = "tenant_", xn = (e) => e.toLowerCase().replace(/[^a-z0-9_]/g, "_"), Sn = (e) => {
|
|
432
|
+
if (e == null || e === "") throw new _n("namespace isolation is on but the request has no resolvable tenant (subject.tenantId is null/empty). Refusing to run against a shared/default namespace — this would be a cross-tenant read. Authenticate with a tenant-scoped subject, or disable namespace isolation for this surface.");
|
|
433
|
+
let t = xn(e);
|
|
434
|
+
if (t.replace(/_/g, "") === "") throw new vn(`tenant id '${e}' has no usable identifier characters after sanitisation — cannot derive a distinct namespace.`);
|
|
435
|
+
let n = `${bn}${t}`;
|
|
436
|
+
if (n.length > yn) throw new vn(`namespace '${n}' for tenant '${e}' exceeds the ${yn}-byte identifier limit. Use a shorter tenant id.`);
|
|
436
437
|
return n;
|
|
437
|
-
},
|
|
438
|
-
if (e === void 0 || t == null || !
|
|
438
|
+
}, Cn = (e, t) => e === null ? t : `${e}.${t}`, wn = /* @__PURE__ */ new Set(["timestamp", "date"]), Tn = /^\d{4}-\d{2}-\d{2}([T ]\d{2}:\d{2})?/, En = (e, t) => {
|
|
439
|
+
if (e === void 0 || t == null || !wn.has(e) || t instanceof Date) return t;
|
|
439
440
|
if (typeof t == "number" && Number.isFinite(t)) return new Date(t);
|
|
440
|
-
if (typeof t == "string" &&
|
|
441
|
+
if (typeof t == "string" && Tn.test(t)) {
|
|
441
442
|
let e = new Date(t);
|
|
442
443
|
return Number.isNaN(e.getTime()) ? t : e;
|
|
443
444
|
}
|
|
444
445
|
return t;
|
|
445
|
-
},
|
|
446
|
+
}, Dn = (e, t) => e === void 0 || !wn.has(e) ? t : t.map((t) => En(e, t)), On = (e, t) => {
|
|
446
447
|
let { strings: n, values: r } = e, i = t.unsafe(n[0] ?? "");
|
|
447
448
|
for (let e = 0; e < r.length; e++) i = t`${i}${r[e]}${t.unsafe(n[e + 1] ?? "")}`;
|
|
448
449
|
return t`${i}`;
|
|
449
|
-
},
|
|
450
|
-
if ("not" in e) return t`NOT (${
|
|
451
|
-
if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) =>
|
|
452
|
-
if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) =>
|
|
450
|
+
}, N = (e) => e.replace(/[\\%_]/g, (e) => `\\${e}`), P = (e, t, n = null, r) => {
|
|
451
|
+
if ("not" in e) return t`NOT (${P(e.not, t, n, r)})`;
|
|
452
|
+
if ("and" in e) return e.and.length === 0 ? t`TRUE` : t.and(e.and.map((e) => P(e, t, n, r)));
|
|
453
|
+
if ("or" in e) return e.or.length === 0 ? t`FALSE` : t.or(e.or.map((e) => P(e, t, n, r)));
|
|
453
454
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
454
|
-
let r = e, i =
|
|
455
|
+
let r = e, i = F(r.subquery, t, n);
|
|
455
456
|
return r.op === "subquery-in" ? t`${t(r.column)} IN (${i})` : t`${t(r.column)} NOT IN (${i})`;
|
|
456
457
|
}
|
|
457
458
|
if (e.op === "exists" || e.op === "not-exists") {
|
|
458
|
-
let r = e, i =
|
|
459
|
+
let r = e, i = F(r.subquery, t, n);
|
|
459
460
|
return r.op === "exists" ? t`EXISTS (${i})` : t`NOT EXISTS (${i})`;
|
|
460
461
|
}
|
|
461
462
|
let i = e, a = t(i.column), o = i.path, s = o !== void 0 && o.length > 0, c = () => t.onDialectOrElse({
|
|
@@ -468,7 +469,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
468
469
|
mssql: () => t.unsafe(T(i.column, o, "mssql", { numeric: !0 })),
|
|
469
470
|
sqlite: () => t.unsafe(T(i.column, o, "sqlite", { numeric: !0 })),
|
|
470
471
|
orElse: () => t.unsafe(T(i.column, o, "postgres", { numeric: !0 }))
|
|
471
|
-
}), d = s ? c() : a, f = s ? l() : a, p = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : u(r)?.fields?.[i.column]?.type, g = (e) =>
|
|
472
|
+
}), d = s ? c() : a, f = s ? l() : a, p = (e) => s && e != null ? String(e) : e, m = (e) => s ? Number(e) : e, h = s || r === void 0 ? void 0 : u(r)?.fields?.[i.column]?.type, g = (e) => En(h, e);
|
|
472
473
|
switch (i.op) {
|
|
473
474
|
case "eq": return t`${d} = ${p(g(i.value))}`;
|
|
474
475
|
case "neq": return t`${d} <> ${p(g(i.value))}`;
|
|
@@ -485,7 +486,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
485
486
|
return e.length === 0 ? t`TRUE` : t`${d} NOT IN ${t.in(s ? e.map((e) => p(e)) : e)}`;
|
|
486
487
|
}
|
|
487
488
|
case "contains": {
|
|
488
|
-
let e = `%${
|
|
489
|
+
let e = `%${N(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
|
|
489
490
|
return t.onDialectOrElse({
|
|
490
491
|
mysql: () => t`LOWER(${d}) LIKE LOWER(${e})`,
|
|
491
492
|
mssql: () => t`LOWER(${d}) LIKE LOWER(${e})`,
|
|
@@ -494,7 +495,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
494
495
|
});
|
|
495
496
|
}
|
|
496
497
|
case "startsWith": {
|
|
497
|
-
let e = `${
|
|
498
|
+
let e = `${N(typeof i.value == "string" ? i.value : String(i.value ?? ""))}%`;
|
|
498
499
|
return t.onDialectOrElse({
|
|
499
500
|
mysql: () => t`${d} LIKE ${e}`,
|
|
500
501
|
orElse: () => t`${d} LIKE ${e} ESCAPE '\\'`
|
|
@@ -542,13 +543,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
542
543
|
});
|
|
543
544
|
}
|
|
544
545
|
}
|
|
545
|
-
},
|
|
546
|
+
}, kn = (e, t) => {
|
|
546
547
|
let n = [];
|
|
547
548
|
return e.partitionBy && e.partitionBy.length > 0 && n.push(t`PARTITION BY ${t.csv(e.partitionBy.map((e) => t`${t(e)}`))}`), e.orderBy && e.orderBy.length > 0 && n.push(t`ORDER BY ${t.csv(e.orderBy.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), n.length === 0 ? t`` : n.length === 1 ? n[0] : n.reduce((e, n, r) => r === 0 ? n : t`${e} ${n}`);
|
|
548
|
-
},
|
|
549
|
+
}, An = (e, t) => t.csv(e.map((e) => {
|
|
549
550
|
let n = e.column === void 0 ? t.unsafe("*") : t`${t(e.column)}`;
|
|
550
551
|
if (e.op.startsWith("window-")) {
|
|
551
|
-
let r =
|
|
552
|
+
let r = kn(e.window ?? {}, t);
|
|
552
553
|
switch (e.op) {
|
|
553
554
|
case "window-row-number": return t`ROW_NUMBER() OVER (${r}) AS ${t(e.alias)}`;
|
|
554
555
|
case "window-rank": return t`RANK() OVER (${r}) AS ${t(e.alias)}`;
|
|
@@ -572,43 +573,43 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
572
573
|
return t`${t(e.column)} AS ${t(e.alias)}`;
|
|
573
574
|
default: throw Error(`compileAggregateProjection: unknown op '${e.op}'`);
|
|
574
575
|
}
|
|
575
|
-
})),
|
|
576
|
+
})), jn = (e) => `[${e.join(",")}]`, Mn = (e, t) => {
|
|
576
577
|
if (e.queryVector === void 0) return null;
|
|
577
|
-
let n = t(e.column), r =
|
|
578
|
+
let n = t(e.column), r = jn(e.queryVector), i = e.distance === "cosine" ? "<=>" : e.distance === "l2" ? "<->" : "<#>", a = e.distance === "cosine" ? "VEC_DISTANCE_COSINE" : "VEC_DISTANCE_EUCLIDEAN";
|
|
578
579
|
return t.onDialectOrElse({
|
|
579
580
|
mysql: () => t`${t.unsafe(a)}(${n}, ${r})`,
|
|
580
581
|
mssql: () => t`NULL`,
|
|
581
582
|
sqlite: () => t`NULL`,
|
|
582
583
|
orElse: () => t`${n} ${t.unsafe(i)} ${r}::vector`
|
|
583
584
|
});
|
|
584
|
-
},
|
|
585
|
+
}, Nn = (e, t) => {
|
|
585
586
|
let n = t.unsafe(e.useGeography ? "::geography" : "::geometry");
|
|
586
587
|
return t`ST_Distance(${t(e.column)}${n}, ${e.geom}${n})`;
|
|
587
|
-
},
|
|
588
|
-
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${
|
|
588
|
+
}, Pn = (e, t) => t`${t(e.column)} <-> ${e.geom}::geometry`, Fn = (e, t) => t`${t(`${e.indexName}_tsv`)}`, In = (e, t) => `${t}_${e.indexName}_fts`, Ln = (e, t, n) => {
|
|
589
|
+
let r = n.csv(e.columns.map((e) => n`${n(e)}`)), i = `%${N(e.query)}%`;
|
|
589
590
|
return n.onDialectOrElse({
|
|
590
591
|
mysql: () => n`MATCH(${r}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
591
592
|
sqlite: () => {
|
|
592
|
-
let r = n(
|
|
593
|
+
let r = n(In(e, t));
|
|
593
594
|
return n`${n("id")} IN (SELECT ${n("row_id")} FROM ${r} WHERE ${r} MATCH ${e.query})`;
|
|
594
595
|
},
|
|
595
596
|
mssql: () => n.or(e.columns.map((e) => n`LOWER(${n(e)}) LIKE LOWER(${i}) ESCAPE '\\'`)),
|
|
596
|
-
orElse: () => n`${
|
|
597
|
+
orElse: () => n`${Fn(e, n)} @@ plainto_tsquery(${e.config ?? "english"}, ${e.query})`
|
|
597
598
|
});
|
|
598
|
-
},
|
|
599
|
-
let r = `%${
|
|
599
|
+
}, Rn = (e, t, n) => {
|
|
600
|
+
let r = `%${N(e.query)}%`;
|
|
600
601
|
return n.onDialectOrElse({
|
|
601
602
|
mysql: () => n`MATCH(${n.csv(e.columns.map((e) => n`${n(e)}`))}) AGAINST(${e.query} IN NATURAL LANGUAGE MODE)`,
|
|
602
603
|
sqlite: () => {
|
|
603
|
-
let r = n(
|
|
604
|
+
let r = n(In(e, t));
|
|
604
605
|
return n`COALESCE((SELECT -bm25(${r}) FROM ${r} WHERE ${r} MATCH ${e.query} AND ${r}.${n("row_id")} = ${n("id")}), 0)`;
|
|
605
606
|
},
|
|
606
607
|
mssql: () => e.columns.map((e) => n`(CASE WHEN LOWER(${n(e)}) LIKE LOWER(${r}) ESCAPE '\\' THEN 1 ELSE 0 END)`).reduce((e, t, r) => r === 0 ? t : n`${e} + ${t}`),
|
|
607
|
-
orElse: () => n`ts_rank(${
|
|
608
|
+
orElse: () => n`ts_rank(${Fn(e, n)}, plainto_tsquery(${e.config ?? "english"}, ${e.query}))`
|
|
608
609
|
});
|
|
609
|
-
},
|
|
610
|
+
}, F = (e, t, n = null) => {
|
|
610
611
|
if (e.setOp && e.setOp.queries.length >= 2) {
|
|
611
|
-
let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${
|
|
612
|
+
let r = e.setOp.kind === "union" ? "UNION" : e.setOp.kind === "union-all" ? "UNION ALL" : e.setOp.kind === "intersect" ? "INTERSECT" : "EXCEPT", i = e.setOp.queries.map((e) => t`(${F(e, t, n)})`).reduce((e, n, i) => i === 0 ? n : t`${e} ${t.unsafe(r)} ${n}`), a = [];
|
|
612
613
|
if (e.order.length > 0 && a.push(t` ORDER BY ${t.csv(e.order.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`), e.take !== void 0) {
|
|
613
614
|
if (!Number.isInteger(e.take) || e.take < 0) throw Error(`compileSelect: invalid take ${e.take}`);
|
|
614
615
|
a.push(t` LIMIT ${t.unsafe(String(e.take))}`);
|
|
@@ -619,7 +620,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
619
620
|
}
|
|
620
621
|
return t`${i}${a.reduce((e, n) => t`${e}${n}`, t``)}`;
|
|
621
622
|
}
|
|
622
|
-
let r = e.annClause === void 0 ? null :
|
|
623
|
+
let r = e.annClause === void 0 ? null : Mn(e.annClause, t);
|
|
623
624
|
e.spatialClause !== void 0 && t.onDialectOrElse({
|
|
624
625
|
mysql: () => {
|
|
625
626
|
throw Error("@voltro/plugin-postgis: spatial distance / KNN ordering is postgres-only");
|
|
@@ -632,16 +633,16 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
632
633
|
},
|
|
633
634
|
orElse: () => t``
|
|
634
635
|
});
|
|
635
|
-
let i = e.spatialClause?.projectAs === void 0 ? null :
|
|
636
|
+
let i = e.spatialClause?.projectAs === void 0 ? null : Nn(e.spatialClause, t), a = e.aggregations && e.aggregations.length > 0 ? An(e.aggregations, t) : e.joinedProjection && e.joinedProjection.length > 0 ? t.csv(e.joinedProjection.map((e) => t`${t(e.source)} AS ${t(e.outputKey)}`)) : e.projection && e.projection.length > 0 ? t.csv(e.projection.map((e) => t`${t(e)}`)) : t`*`, o = (e.aggregations && e.aggregations.length > 0) === !0, s = r !== null && !o ? t`${a}, ${r} AS ${t("distance")}` : a, c = e.fullTextSearch, l = c?.rank !== void 0 && !o ? Rn(c, e.table, t) : null, u = l !== null && c?.rank !== void 0 ? t`${s}, ${l} AS ${t(c.rank.alias)}` : s, d = i !== null && !o && e.spatialClause?.projectAs !== void 0 ? t`${u}, ${i} AS ${t(e.spatialClause.projectAs)}` : u, f = e.distinctOn && e.distinctOn.length > 0 ? t.onDialectOrElse({
|
|
636
637
|
orElse: () => t`DISTINCT ON (${t.csv(e.distinctOn.map((e) => t`${t(e)}`))}) `,
|
|
637
638
|
mysql: () => t`DISTINCT `,
|
|
638
639
|
mssql: () => t`DISTINCT `,
|
|
639
640
|
sqlite: () => t`DISTINCT `
|
|
640
|
-
}) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(
|
|
641
|
+
}) : e.distinct ? t`DISTINCT ` : t``, p = e.alias === void 0 ? t`${t(Cn(n, e.table))}` : t`${t(Cn(n, e.table))} AS ${t(e.alias)}`, m = (e.joins ?? []).map((e) => {
|
|
641
642
|
let r = e.kind === "inner" ? "INNER" : "LEFT";
|
|
642
|
-
return t` ${t.unsafe(r)} JOIN ${t(
|
|
643
|
-
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null :
|
|
644
|
-
r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${
|
|
643
|
+
return t` ${t.unsafe(r)} JOIN ${t(Cn(n, e.table))} AS ${t(e.alias)} ON ${P(e.on, t, n)}`;
|
|
644
|
+
}), h = m.length > 0 ? m.reduce((e, n) => t`${e}${n}`, p) : p, g = c === void 0 ? null : Ln(c, e.table, t), ee = [e.predicate ? P(e.predicate, t, n, e.table) : null, g].filter((e) => e !== null), _ = ee.length > 0 ? t` WHERE ${t.and(ee)}` : t``, v = e.groupBy && e.groupBy.length > 0 ? t` GROUP BY ${t.csv(e.groupBy.map((e) => t`${t(e)}`))}` : t``, y = e.having ? t` HAVING ${P(e.having, t, n, e.table)}` : t``, b = e.skip !== void 0, x = [];
|
|
645
|
+
r !== null && x.push(t`${r} ASC`), e.spatialClause?.order !== void 0 && x.push(e.spatialClause.order === "desc" ? t`${Pn(e.spatialClause, t)} DESC` : t`${Pn(e.spatialClause, t)} ASC`), l !== null && c?.rank?.order === !0 && x.push(t`${l} DESC`);
|
|
645
646
|
for (let n of e.order) x.push(n.direction === "desc" ? t`${t(n.column)} DESC` : t`${t(n.column)} ASC`);
|
|
646
647
|
let te = x.length > 0 ? t` ORDER BY ${t.csv(x)}` : b ? t.onDialectOrElse({
|
|
647
648
|
mssql: () => t` ORDER BY (SELECT NULL)`,
|
|
@@ -649,7 +650,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
649
650
|
}) : t``, S = (e) => {
|
|
650
651
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`compileSelect: expected non-negative integer take/skip, got ${e}`);
|
|
651
652
|
return t.unsafe(String(e));
|
|
652
|
-
}, ne = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${
|
|
653
|
+
}, ne = (e.ctes ?? []).map((e) => t`${t(e.name)} AS (${F(e.descriptor, t, n)})`), re = (e.ctes ?? []).some((e) => e.recursive === !0), C = ne.length > 0 ? t`WITH ${t.unsafe(re ? "RECURSIVE " : "")}${t.csv(ne)} ` : t``;
|
|
653
654
|
return t.onDialectOrElse({
|
|
654
655
|
mssql: () => {
|
|
655
656
|
let n = e.take !== void 0 && !b ? t`TOP ${S(e.take)} ` : t``, r = b ? t` OFFSET ${S(e.skip)} ROWS FETCH NEXT ${S(e.take ?? 2 ** 53 - 1)} ROWS ONLY` : t``;
|
|
@@ -660,29 +661,29 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
660
661
|
return t`${C}SELECT ${f}${d} FROM ${h}${_}${v}${y}${te}${n}${r}`;
|
|
661
662
|
}
|
|
662
663
|
});
|
|
663
|
-
},
|
|
664
|
+
}, zn = (e, t, n) => {
|
|
664
665
|
if (e.eager === void 0) return null;
|
|
665
|
-
let r =
|
|
666
|
+
let r = Vn(e.table, e.eager, e.sourceTable);
|
|
666
667
|
if (r === null) return null;
|
|
667
|
-
let i =
|
|
668
|
+
let i = Jn(n, e, r, qn(t, n));
|
|
668
669
|
return i === null ? null : {
|
|
669
670
|
fragment: i,
|
|
670
|
-
decode:
|
|
671
|
+
decode: Zn(r, n)
|
|
671
672
|
};
|
|
672
|
-
},
|
|
673
|
+
}, I = (e) => e.relation.kind === "one" && e.fkSide === "target", Bn = (e) => ({
|
|
673
674
|
...e,
|
|
674
675
|
branch: {
|
|
675
676
|
...e.branch,
|
|
676
677
|
limit: 2
|
|
677
678
|
}
|
|
678
|
-
}),
|
|
679
|
-
let r = n ?? ne(e), i =
|
|
679
|
+
}), Vn = (e, t, n) => {
|
|
680
|
+
let r = n ?? ne(e), i = Wt(e);
|
|
680
681
|
if (i === void 0) return null;
|
|
681
682
|
let a = [];
|
|
682
683
|
for (let [e, n] of Object.entries(t)) {
|
|
683
684
|
let t = i[e];
|
|
684
685
|
if (t === void 0) return null;
|
|
685
|
-
let o =
|
|
686
|
+
let o = Hn(e, t, r, n === !0 ? {} : n);
|
|
686
687
|
if (o === null) return null;
|
|
687
688
|
a.push(o);
|
|
688
689
|
}
|
|
@@ -690,30 +691,30 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
690
691
|
table: r,
|
|
691
692
|
children: a
|
|
692
693
|
};
|
|
693
|
-
},
|
|
694
|
+
}, Hn = (e, t, n, r) => {
|
|
694
695
|
let i = t.target(), a = (t.kind === "manyToMany" ? void 0 : t.sourceKey) ?? "id", o, s;
|
|
695
696
|
if (t.kind === "manyToMany") o = t.targetKey, s = "target";
|
|
696
697
|
else if (t.kind === "one") {
|
|
697
|
-
let r = t.sourceKey ??
|
|
698
|
+
let r = t.sourceKey ?? Kn(n, i.tableName);
|
|
698
699
|
if (r !== void 0) o = r, s = "source";
|
|
699
700
|
else try {
|
|
700
|
-
o = t.foreignKey ??
|
|
701
|
+
o = t.foreignKey ?? Ft(i, n.tableName, e), s = "target";
|
|
701
702
|
} catch {
|
|
702
703
|
return null;
|
|
703
704
|
}
|
|
704
705
|
} else try {
|
|
705
|
-
o = t.foreignKey ??
|
|
706
|
+
o = t.foreignKey ?? Ft(i, n.tableName, e), s = "target";
|
|
706
707
|
} catch {
|
|
707
708
|
return null;
|
|
708
709
|
}
|
|
709
710
|
let c = r.with === void 0 ? [] : (() => {
|
|
710
|
-
let e =
|
|
711
|
+
let e = Wt(i.tableName);
|
|
711
712
|
if (e === void 0 && Object.keys(r.with).length > 0) return null;
|
|
712
713
|
let t = [];
|
|
713
714
|
for (let [n, a] of Object.entries(r.with)) {
|
|
714
715
|
let r = e?.[n];
|
|
715
716
|
if (r === void 0) return null;
|
|
716
|
-
let o =
|
|
717
|
+
let o = Hn(n, r, i, a === !0 ? {} : a);
|
|
717
718
|
if (o === null) return null;
|
|
718
719
|
t.push(o);
|
|
719
720
|
}
|
|
@@ -729,9 +730,9 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
729
730
|
fkSide: s,
|
|
730
731
|
branch: r,
|
|
731
732
|
children: c,
|
|
732
|
-
junction:
|
|
733
|
+
junction: Un(t, r)
|
|
733
734
|
};
|
|
734
|
-
},
|
|
735
|
+
}, Un = (e, t) => {
|
|
735
736
|
if (e.kind !== "manyToMany" || t.junction === void 0) return;
|
|
736
737
|
let n = e.through(), r = t.junction === !0 ? Object.keys(n.fields) : t.junction, i = r.filter((e) => e in n.fields);
|
|
737
738
|
return {
|
|
@@ -743,35 +744,35 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
743
744
|
return t !== void 0 && (t.type === "timestamp" || t.type === "date");
|
|
744
745
|
})
|
|
745
746
|
};
|
|
746
|
-
},
|
|
747
|
+
}, Wn = (e) => `__j_${e}`, Gn = "__j", Kn = (e, t) => {
|
|
747
748
|
for (let [n, r] of Object.entries(e.fields)) if (r.type === "reference" && r.references?.()?.tableName === t) return n;
|
|
748
|
-
},
|
|
749
|
+
}, qn = (e, t) => {
|
|
749
750
|
let n = 0;
|
|
750
751
|
return {
|
|
751
752
|
sql: e,
|
|
752
753
|
dialect: t,
|
|
753
754
|
nextAlias: () => `__a${n++}`
|
|
754
755
|
};
|
|
755
|
-
},
|
|
756
|
+
}, Jn = (e, t, n, r) => {
|
|
756
757
|
switch (e) {
|
|
757
|
-
case "postgres": return
|
|
758
|
+
case "postgres": return er(t, n, r);
|
|
758
759
|
case "sqlite":
|
|
759
|
-
case "turso": return
|
|
760
|
+
case "turso": return cr(t, n, r);
|
|
760
761
|
case "mysql":
|
|
761
|
-
case "mariadb": return
|
|
762
|
-
case "mssql": return
|
|
762
|
+
case "mariadb": return vr(t, n, r);
|
|
763
|
+
case "mssql": return Tr(t, n, r);
|
|
763
764
|
}
|
|
764
|
-
},
|
|
765
|
-
let n =
|
|
765
|
+
}, Yn = (e, t) => t === "mssql" && !Xn.test(e) ? /* @__PURE__ */ new Date(`${e}Z`) : new Date(e), Xn = /(?:Z|[+-]\d{2}:?\d{2})$/, Zn = (e, t) => {
|
|
766
|
+
let n = Qn(e.table, e.children, t);
|
|
766
767
|
return (e) => e.map((e) => {
|
|
767
768
|
let t = e.__row, r = typeof t == "string" ? JSON.parse(t) : t;
|
|
768
769
|
return n(r);
|
|
769
770
|
});
|
|
770
|
-
},
|
|
771
|
+
}, Qn = (e, t, n) => {
|
|
771
772
|
let r = [];
|
|
772
773
|
for (let [t, n] of Object.entries(e.fields)) (n.type === "timestamp" || n.type === "date") && r.push(t);
|
|
773
774
|
let i = t.map((e) => {
|
|
774
|
-
let t =
|
|
775
|
+
let t = Qn(e.target, e.children, n), r = e.relation.kind === "one", i = I(e), a = i ? an({
|
|
775
776
|
relationName: e.relationName,
|
|
776
777
|
sourceTableName: e.source.tableName,
|
|
777
778
|
targetTableName: e.target.tableName,
|
|
@@ -784,14 +785,14 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
784
785
|
isSingle: r,
|
|
785
786
|
fromOverFetch: i,
|
|
786
787
|
cardinalityMessage: a,
|
|
787
|
-
junction:
|
|
788
|
+
junction: $n(e.junction, n)
|
|
788
789
|
};
|
|
789
790
|
});
|
|
790
791
|
return (e) => {
|
|
791
792
|
let t = { ...e };
|
|
792
793
|
for (let e of r) {
|
|
793
794
|
let r = t[e];
|
|
794
|
-
typeof r == "string" && (t[e] =
|
|
795
|
+
typeof r == "string" && (t[e] = Yn(r, n));
|
|
795
796
|
}
|
|
796
797
|
for (let e of i) {
|
|
797
798
|
let n = t[e.name];
|
|
@@ -801,7 +802,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
801
802
|
}
|
|
802
803
|
if (e.fromOverFetch) {
|
|
803
804
|
let r = n;
|
|
804
|
-
if (r.length > 1) throw new
|
|
805
|
+
if (r.length > 1) throw new rn(e.cardinalityMessage);
|
|
805
806
|
t[e.name] = r.length === 0 ? null : e.decode(r[0]);
|
|
806
807
|
continue;
|
|
807
808
|
}
|
|
@@ -813,204 +814,204 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
813
814
|
}
|
|
814
815
|
return t;
|
|
815
816
|
};
|
|
816
|
-
},
|
|
817
|
+
}, $n = (e, t) => {
|
|
817
818
|
if (e === void 0) return;
|
|
818
819
|
let n = new Set(e.dateColumns), r = e.requested;
|
|
819
820
|
return (e) => {
|
|
820
821
|
let i = e._junction ?? {}, a = {};
|
|
821
822
|
for (let e of r) {
|
|
822
823
|
let r = i[e];
|
|
823
|
-
a[e] = n.has(e) && typeof r == "string" ?
|
|
824
|
+
a[e] = n.has(e) && typeof r == "string" ? Yn(r, t) : r;
|
|
824
825
|
}
|
|
825
826
|
return {
|
|
826
827
|
...e,
|
|
827
828
|
_junction: a
|
|
828
829
|
};
|
|
829
830
|
};
|
|
830
|
-
},
|
|
831
|
-
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s =
|
|
832
|
-
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${
|
|
833
|
-
},
|
|
834
|
-
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${
|
|
831
|
+
}, er = (e, t, n) => {
|
|
832
|
+
let r = n.sql, i = n.nextAlias(), a = r(t.table.tableName), o = r(i), s = tr(i, t.children, n);
|
|
833
|
+
return s === null ? null : r`SELECT ${s} AS "__row" FROM ${a} AS ${o}${e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``}${e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${z(i, e.column, r)} DESC` : r`${z(i, e.column, r)} ASC`))}` : r``}${e.take === void 0 ? r`` : r` LIMIT ${V(e.take, r)}`}${e.skip === void 0 ? r`` : r` OFFSET ${V(e.skip, r)}`}`;
|
|
834
|
+
}, tr = (e, t, n, r) => {
|
|
835
|
+
let i = n.sql, a = r === void 0 ? i`to_jsonb(${i(e)}.*)` : i`(to_jsonb(${i(e)}.*) - ${B(Gn, i)}::text)`;
|
|
835
836
|
if (t.length === 0 && r === void 0) return a;
|
|
836
837
|
let o = [];
|
|
837
|
-
r !== void 0 && o.push(i`${
|
|
838
|
+
r !== void 0 && o.push(i`${B("_junction", i)}, ${z(e, Gn, i)}`);
|
|
838
839
|
for (let r of t) {
|
|
839
|
-
let t =
|
|
840
|
+
let t = nr(r, e, n);
|
|
840
841
|
if (t === null) return null;
|
|
841
|
-
o.push(i`${
|
|
842
|
+
o.push(i`${B(r.relationName, i)}, ${t}`);
|
|
842
843
|
}
|
|
843
844
|
return i`${a} || jsonb_build_object(${i.csv(o)})`;
|
|
844
|
-
},
|
|
845
|
+
}, nr = (e, t, n) => {
|
|
845
846
|
switch (e.relation.kind) {
|
|
846
|
-
case "one": return
|
|
847
|
-
case "many": return
|
|
848
|
-
case "manyToMany": return
|
|
847
|
+
case "one": return I(e) ? ir(Bn(e), t, n) : rr(e, t, n);
|
|
848
|
+
case "many": return ir(e, t, n);
|
|
849
|
+
case "manyToMany": return ar(e, t, n);
|
|
849
850
|
}
|
|
850
|
-
},
|
|
851
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
851
|
+
}, rr = (e, t, n) => {
|
|
852
|
+
let r = n.sql, i = n.nextAlias(), a = tr(i, e.children, n);
|
|
852
853
|
if (a === null) return null;
|
|
853
|
-
let o = e.fkSide === "source" ? r`${
|
|
854
|
+
let o = e.fkSide === "source" ? r`${z(i, "id", r)} = ${z(t, e.foreignKey, r)}` : r`${z(i, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${H(e.branch.where, i, r)}`, c = L(i, e.branch.orderBy, r);
|
|
854
855
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}${c} LIMIT 1)`;
|
|
855
|
-
},
|
|
856
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
856
|
+
}, ir = (e, t, n) => {
|
|
857
|
+
let r = n.sql, i = n.nextAlias(), a = tr(i, e.children, n);
|
|
857
858
|
if (a === null) return null;
|
|
858
|
-
let o = r`${
|
|
859
|
+
let o = r`${z(void 0, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(e.branch.where, r)}`, c = sr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${V(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${V(e.branch.offset, r)}`;
|
|
859
860
|
return r`COALESCE((SELECT jsonb_agg(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), '[]'::jsonb)`;
|
|
860
|
-
},
|
|
861
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
861
|
+
}, ar = (e, t, n) => {
|
|
862
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = tr(o, e.children, n, e.junction);
|
|
862
863
|
if (c === null) return null;
|
|
863
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
864
|
-
return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${
|
|
865
|
-
},
|
|
866
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
864
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${P(e.branch.where, r)}`, u = U(e, s, r), d = L(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${V(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${V(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : r`, ${or(e.junction, s, r)} AS ${r(Gn)}`;
|
|
865
|
+
return r`COALESCE((SELECT jsonb_agg(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${z(o, "id", r)} = ${z(s, i.targetKey, r)} WHERE ${z(s, i.sourceKey, r)} = ${z(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), '[]'::jsonb)`;
|
|
866
|
+
}, or = (e, t, n) => e.present.length === 0 ? n`jsonb_build_object()` : n`jsonb_build_object(${n.csv(e.present.map((e) => n`${B(e, n)}, ${z(t, e, n)}`))})`, L = (e, t, n) => t === void 0 || t.length === 0 ? n`` : n` ORDER BY ${n.csv(t.map((t) => t.direction === "desc" ? n`${z(e, t.column, n)} DESC` : n`${z(e, t.column, n)} ASC`))}`, sr = (e, t) => e === void 0 || e.length === 0 ? t`` : t` ORDER BY ${t.csv(e.map((e) => e.direction === "desc" ? t`${t(e.column)} DESC` : t`${t(e.column)} ASC`))}`, cr = (e, t, n) => {
|
|
867
|
+
let r = n.sql, i = n.nextAlias(), a = lr(i, t.table, t.children, n);
|
|
867
868
|
if (a === null) return null;
|
|
868
|
-
let o = e.predicate ? r` WHERE ${
|
|
869
|
+
let o = e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${z(i, e.column, r)} DESC` : r`${z(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${V(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${V(e.skip, r)}`;
|
|
869
870
|
return r`SELECT ${a} AS "__row" FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
870
|
-
},
|
|
871
|
+
}, lr = (e, t, n, r, i) => {
|
|
871
872
|
let a = r.sql, o = [];
|
|
872
|
-
for (let n of Object.keys(t.fields)) o.push(a`${
|
|
873
|
+
for (let n of Object.keys(t.fields)) o.push(a`${B(n, a)}, ${z(e, n, a)}`);
|
|
873
874
|
if (i !== void 0) {
|
|
874
|
-
let e =
|
|
875
|
-
o.push(a`${
|
|
875
|
+
let e = ur(i.projection, i.source, a);
|
|
876
|
+
o.push(a`${B("_junction", a)}, json_object(${e})`);
|
|
876
877
|
}
|
|
877
878
|
for (let t of n) {
|
|
878
|
-
let n =
|
|
879
|
+
let n = mr(t, e, r);
|
|
879
880
|
if (n === null) return null;
|
|
880
|
-
o.push(a`${
|
|
881
|
+
o.push(a`${B(t.relationName, a)}, ${n}`);
|
|
881
882
|
}
|
|
882
883
|
return a`json_object(${a.csv(o)})`;
|
|
883
|
-
},
|
|
884
|
+
}, ur = (e, t, n) => e.present.length === 0 ? n`` : n.csv(e.present.map((e) => n`${B(e, n)}, ${z(t.alias, t.physical(e), n)}`)), dr = (e, t, n) => e.present.length === 0 ? n`` : n`, ${n.csv(e.present.map((e) => n`${z(t, e, n)} AS ${n(Wn(e))}`))}`, fr = (e) => ({
|
|
884
885
|
alias: e,
|
|
885
|
-
physical:
|
|
886
|
-
}),
|
|
886
|
+
physical: Wn
|
|
887
|
+
}), pr = (e) => ({
|
|
887
888
|
alias: e,
|
|
888
889
|
physical: (e) => e
|
|
889
|
-
}),
|
|
890
|
+
}), mr = (e, t, n) => {
|
|
890
891
|
switch (e.relation.kind) {
|
|
891
|
-
case "one": return
|
|
892
|
-
case "many": return
|
|
893
|
-
case "manyToMany": return
|
|
892
|
+
case "one": return I(e) ? gr(Bn(e), t, n) : hr(e, t, n);
|
|
893
|
+
case "many": return gr(e, t, n);
|
|
894
|
+
case "manyToMany": return _r(e, t, n);
|
|
894
895
|
}
|
|
895
|
-
},
|
|
896
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
896
|
+
}, hr = (e, t, n) => {
|
|
897
|
+
let r = n.sql, i = n.nextAlias(), a = lr(i, e.target, e.children, n);
|
|
897
898
|
if (a === null) return null;
|
|
898
|
-
let o = e.fkSide === "source" ? r`${
|
|
899
|
+
let o = e.fkSide === "source" ? r`${z(i, "id", r)} = ${z(t, e.foreignKey, r)}` : r`${z(i, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`;
|
|
899
900
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
900
|
-
},
|
|
901
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
901
|
+
}, gr = (e, t, n) => {
|
|
902
|
+
let r = n.sql, i = n.nextAlias(), a = lr(i, e.target, e.children, n);
|
|
902
903
|
if (a === null) return null;
|
|
903
|
-
let o = r`${
|
|
904
|
+
let o = r`${z(void 0, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, c = sr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${V(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${V(e.branch.offset, r)}`;
|
|
904
905
|
return r`COALESCE((SELECT json_group_array(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), json('[]'))`;
|
|
905
|
-
},
|
|
906
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
906
|
+
}, _r = (e, t, n) => {
|
|
907
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = lr(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
907
908
|
projection: e.junction,
|
|
908
|
-
source:
|
|
909
|
+
source: fr(o)
|
|
909
910
|
});
|
|
910
911
|
if (c === null) return null;
|
|
911
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
912
|
-
return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${
|
|
913
|
-
},
|
|
914
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
912
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, u = U(e, s, r, !0), d = L(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${V(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${V(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : dr(e.junction, s, r);
|
|
913
|
+
return r`COALESCE((SELECT json_group_array(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${z(o, "id", r)} = ${z(s, i.targetKey, r)} WHERE ${z(s, i.sourceKey, r)} = ${z(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), json('[]'))`;
|
|
914
|
+
}, vr = (e, t, n) => {
|
|
915
|
+
let r = n.sql, i = n.nextAlias(), a = R(i, t.table, t.children, n);
|
|
915
916
|
if (a === null) return null;
|
|
916
|
-
let o = e.predicate ? r` WHERE ${
|
|
917
|
+
let o = e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${z(i, e.column, r)} DESC` : r`${z(i, e.column, r)} ASC`))}` : r``, c = e.take === void 0 ? r`` : r` LIMIT ${V(e.take, r)}`, l = e.skip === void 0 ? r`` : r` OFFSET ${V(e.skip, r)}`;
|
|
917
918
|
return r`SELECT ${a} AS \`__row\` FROM ${r(t.table.tableName)} AS ${r(i)}${o}${s}${c}${l}`;
|
|
918
|
-
},
|
|
919
|
+
}, R = (e, t, n, r, i) => {
|
|
919
920
|
let a = r.sql, o = [];
|
|
920
|
-
for (let n of Object.keys(t.fields)) o.push(a`${
|
|
921
|
+
for (let n of Object.keys(t.fields)) o.push(a`${B(n, a)}, ${z(e, n, a)}`);
|
|
921
922
|
if (i !== void 0) {
|
|
922
|
-
let e =
|
|
923
|
-
o.push(a`${
|
|
923
|
+
let e = ur(i.projection, i.source, a);
|
|
924
|
+
o.push(a`${B("_junction", a)}, JSON_OBJECT(${e})`);
|
|
924
925
|
}
|
|
925
926
|
for (let t of n) {
|
|
926
|
-
let n =
|
|
927
|
+
let n = yr(t, e, r);
|
|
927
928
|
if (n === null) return null;
|
|
928
|
-
o.push(a`${
|
|
929
|
+
o.push(a`${B(t.relationName, a)}, ${n}`);
|
|
929
930
|
}
|
|
930
931
|
return a`JSON_OBJECT(${a.csv(o)})`;
|
|
931
|
-
},
|
|
932
|
+
}, yr = (e, t, n) => {
|
|
932
933
|
switch (e.relation.kind) {
|
|
933
934
|
case "one":
|
|
934
|
-
if (
|
|
935
|
-
let r =
|
|
936
|
-
return n.dialect === "mariadb" ?
|
|
935
|
+
if (I(e)) {
|
|
936
|
+
let r = Bn(e);
|
|
937
|
+
return n.dialect === "mariadb" ? Cr(r, t, n) : xr(r, t, n);
|
|
937
938
|
}
|
|
938
|
-
return
|
|
939
|
-
case "many": return n.dialect === "mariadb" ?
|
|
940
|
-
case "manyToMany": return n.dialect === "mariadb" ?
|
|
939
|
+
return br(e, t, n);
|
|
940
|
+
case "many": return n.dialect === "mariadb" ? Cr(e, t, n) : xr(e, t, n);
|
|
941
|
+
case "manyToMany": return n.dialect === "mariadb" ? wr(e, t, n) : Sr(e, t, n);
|
|
941
942
|
}
|
|
942
|
-
},
|
|
943
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
943
|
+
}, br = (e, t, n) => {
|
|
944
|
+
let r = n.sql, i = n.nextAlias(), a = R(i, e.target, e.children, n);
|
|
944
945
|
if (a === null) return null;
|
|
945
|
-
let o = e.fkSide === "source" ? r`${
|
|
946
|
+
let o = e.fkSide === "source" ? r`${z(i, "id", r)} = ${z(t, e.foreignKey, r)}` : r`${z(i, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`;
|
|
946
947
|
return r`(SELECT ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} LIMIT 1)`;
|
|
947
|
-
},
|
|
948
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
948
|
+
}, xr = (e, t, n) => {
|
|
949
|
+
let r = n.sql, i = n.nextAlias(), a = R(i, e.target, e.children, n);
|
|
949
950
|
if (a === null) return null;
|
|
950
|
-
let o = r`${
|
|
951
|
+
let o = r`${z(void 0, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, c = sr(e.branch.orderBy, r), l = e.branch.limit === void 0 ? r`` : r` LIMIT ${V(e.branch.limit, r)}`, u = e.branch.offset === void 0 ? r`` : r` OFFSET ${V(e.branch.offset, r)}`;
|
|
951
952
|
return r`COALESCE((SELECT JSON_ARRAYAGG(${a}) FROM (SELECT * FROM ${r(e.target.tableName)} WHERE ${o}${s}${c}${l}${u}) AS ${r(i)}), JSON_ARRAY())`;
|
|
952
|
-
},
|
|
953
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
953
|
+
}, Sr = (e, t, n) => {
|
|
954
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = R(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
954
955
|
projection: e.junction,
|
|
955
|
-
source:
|
|
956
|
+
source: fr(o)
|
|
956
957
|
});
|
|
957
958
|
if (c === null) return null;
|
|
958
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
959
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${
|
|
960
|
-
},
|
|
961
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
959
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, u = U(e, s, r, !0), d = L(o, e.branch.orderBy, r), f = e.branch.limit === void 0 ? r`` : r` LIMIT ${V(e.branch.limit, r)}`, p = e.branch.offset === void 0 ? r`` : r` OFFSET ${V(e.branch.offset, r)}`, m = e.junction === void 0 ? r`` : dr(e.junction, s, r);
|
|
960
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${c}) FROM (SELECT ${r(o)}.*${m} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${z(o, "id", r)} = ${z(s, i.targetKey, r)} WHERE ${z(s, i.sourceKey, r)} = ${z(t, "id", r)}${u}${l}${d}${f}${p}) AS ${r(o)}), JSON_ARRAY())`;
|
|
961
|
+
}, Cr = (e, t, n) => {
|
|
962
|
+
let r = n.sql, i = n.nextAlias(), a = R(i, e.target, e.children, n);
|
|
962
963
|
if (a === null) return null;
|
|
963
|
-
let o = r`${
|
|
964
|
-
if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${
|
|
965
|
-
let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${
|
|
966
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${
|
|
967
|
-
},
|
|
964
|
+
let o = r`${z(i, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`, s = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, c = e.branch.orderBy ?? [];
|
|
965
|
+
if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) return r`COALESCE((SELECT JSON_ARRAYAGG(${a}${c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${z(i, e.column, r)} DESC` : r`${z(i, e.column, r)} ASC`))}` : r``}) FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o}${s}), JSON_ARRAY())`;
|
|
966
|
+
let l = c.length > 0 ? r` ORDER BY ${r.csv(c.map((e) => e.direction === "desc" ? r`${r(e.column)} DESC` : r`${r(e.column)} ASC`))}` : r` ORDER BY ${r("id")}`, u = e.branch.limit, d = e.branch.offset, f = u !== void 0 && d !== void 0 ? r` AND ${z(i, "rn", r)} > ${V(d, r)} AND ${z(i, "rn", r)} <= ${V(d + u, r)}` : u === void 0 ? r` AND ${z(i, "rn", r)} > ${V(d, r)}` : r` AND ${z(i, "rn", r)} <= ${V(u, r)}`;
|
|
967
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${a} ORDER BY ${z(i, "rn", r)}) FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY ${r(e.foreignKey)}${l}) AS rn FROM ${r(e.target.tableName)}) AS ${r(i)} WHERE ${o}${s}${f}), JSON_ARRAY())`;
|
|
968
|
+
}, wr = (e, t, n) => {
|
|
968
969
|
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = (t) => e.junction === void 0 ? void 0 : {
|
|
969
970
|
projection: e.junction,
|
|
970
971
|
source: t
|
|
971
|
-
}, l = r`${
|
|
972
|
+
}, l = r`${z(s, i.sourceKey, r)} = ${z(t, "id", r)}`, u = r`${z(o, "id", r)} = ${z(s, i.targetKey, r)}`, d = e.branch.where === void 0 ? r`` : r` AND ${P(W(e.branch.where), r)}`, f = U(e, s, r, !0), p = e.branch.orderBy ?? [];
|
|
972
973
|
if (!(e.branch.limit !== void 0 || e.branch.offset !== void 0)) {
|
|
973
|
-
let t =
|
|
974
|
-
return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${
|
|
974
|
+
let t = R(o, e.target, e.children, n, c(pr(s)));
|
|
975
|
+
return t === null ? null : r`COALESCE((SELECT JSON_ARRAYAGG(${t}${p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${z(o, e.column, r)} DESC` : r`${z(o, e.column, r)} ASC`))}` : r``}) FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u} WHERE ${l}${f}${d}), JSON_ARRAY())`;
|
|
975
976
|
}
|
|
976
|
-
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${
|
|
977
|
+
let m = p.length > 0 ? r` ORDER BY ${r.csv(p.map((e) => e.direction === "desc" ? r`${z(o, e.column, r)} DESC` : r`${z(o, e.column, r)} ASC`))}` : r` ORDER BY ${z(o, "id", r)}`, h = e.branch.limit, g = e.branch.offset, ee = h !== void 0 && g !== void 0 ? r` AND ${z(o, "rn", r)} > ${V(g, r)} AND ${z(o, "rn", r)} <= ${V(g + h, r)}` : h === void 0 ? r` AND ${z(o, "rn", r)} > ${V(g, r)}` : r` AND ${z(o, "rn", r)} <= ${V(h, r)}`, _ = e.branch.onJunction === void 0 ? r`` : r` WHERE ${H(W(e.branch.onJunction), s, r)}`, v = R(o, e.target, e.children, n, c(fr(o)));
|
|
977
978
|
if (v === null) return null;
|
|
978
|
-
let y = e.junction === void 0 ? r`` :
|
|
979
|
-
return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${
|
|
980
|
-
},
|
|
981
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
979
|
+
let y = e.junction === void 0 ? r`` : dr(e.junction, s, r);
|
|
980
|
+
return r`COALESCE((SELECT JSON_ARRAYAGG(${v} ORDER BY ${z(o, "rn", r)}) FROM (SELECT ${r(o)}.*${y}, ${z(s, i.sourceKey, r)} AS ${r(`__src_${i.sourceKey}`)}, ROW_NUMBER() OVER (PARTITION BY ${z(s, i.sourceKey, r)}${m}) AS rn FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${u}${_}) AS ${r(o)} WHERE ${z(o, `__src_${i.sourceKey}`, r)} = ${z(t, "id", r)}${d}${ee}), JSON_ARRAY())`;
|
|
981
|
+
}, Tr = (e, t, n) => {
|
|
982
|
+
let r = n.sql, i = n.nextAlias(), a = Er(i, t.table, t.children, n);
|
|
982
983
|
if (a === null) return null;
|
|
983
|
-
let o = e.predicate ? r` WHERE ${
|
|
984
|
+
let o = e.predicate ? r` WHERE ${H(e.predicate, i, r)}` : r``, s = e.order.length > 0 ? r` ORDER BY ${r.csv(e.order.map((e) => e.direction === "desc" ? r`${z(i, e.column, r)} DESC` : r`${z(i, e.column, r)} ASC`))}` : r``, c = r``, l = r``;
|
|
984
985
|
if (e.skip !== void 0) {
|
|
985
986
|
let t = e.order.length > 0 ? s : r` ORDER BY (SELECT NULL)`;
|
|
986
|
-
l = e.take === void 0 ? r`${t} OFFSET ${
|
|
987
|
-
} else e.take !== void 0 && (c = r`TOP ${
|
|
987
|
+
l = e.take === void 0 ? r`${t} OFFSET ${V(e.skip, r)} ROWS` : r`${t} OFFSET ${V(e.skip, r)} ROWS FETCH NEXT ${V(e.take, r)} ROWS ONLY`;
|
|
988
|
+
} else e.take !== void 0 && (c = r`TOP ${V(e.take, r)} `);
|
|
988
989
|
let u = e.skip === void 0 ? s : r``;
|
|
989
990
|
return r`SELECT ${c}(SELECT ${a} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER) AS ${r("__row")} FROM ${r(t.table.tableName)} AS ${r(i)}${o}${u}${l}`;
|
|
990
|
-
},
|
|
991
|
+
}, Er = (e, t, n, r, i) => {
|
|
991
992
|
let a = r.sql, o = [];
|
|
992
|
-
for (let n of Object.keys(t.fields)) o.push(a`${
|
|
993
|
-
if (i !== void 0) for (let e of i.projection.present) o.push(a`${
|
|
993
|
+
for (let n of Object.keys(t.fields)) o.push(a`${z(e, n, a)} AS ${a(n)}`);
|
|
994
|
+
if (i !== void 0) for (let e of i.projection.present) o.push(a`${z(i.source.alias, i.source.physical(e), a)} AS ${Dr(`_junction.${e}`, a)}`);
|
|
994
995
|
for (let t of n) {
|
|
995
|
-
let n =
|
|
996
|
+
let n = Or(t, e, r);
|
|
996
997
|
if (n === null) return null;
|
|
997
998
|
o.push(n);
|
|
998
999
|
}
|
|
999
1000
|
return a.csv(o);
|
|
1000
|
-
},
|
|
1001
|
+
}, Dr = (e, t) => t.unsafe(`[${e.replace(/]/g, "]]")}]`), Or = (e, t, n) => {
|
|
1001
1002
|
switch (e.relation.kind) {
|
|
1002
|
-
case "one": return
|
|
1003
|
-
case "many": return
|
|
1004
|
-
case "manyToMany": return
|
|
1003
|
+
case "one": return I(e) ? jr(Bn(e), t, n) : kr(e, t, n);
|
|
1004
|
+
case "many": return jr(e, t, n);
|
|
1005
|
+
case "manyToMany": return Mr(e, t, n);
|
|
1005
1006
|
}
|
|
1006
|
-
},
|
|
1007
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1007
|
+
}, kr = (e, t, n) => {
|
|
1008
|
+
let r = n.sql, i = n.nextAlias(), a = Er(i, e.target, e.children, n);
|
|
1008
1009
|
if (a === null) return null;
|
|
1009
|
-
let o = e.fkSide === "source" ? r`${
|
|
1010
|
+
let o = e.fkSide === "source" ? r`${z(i, "id", r)} = ${z(t, e.foreignKey, r)}` : r`${z(i, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}`;
|
|
1010
1011
|
return r`JSON_QUERY((SELECT TOP 1 ${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${o} FOR JSON PATH, INCLUDE_NULL_VALUES, WITHOUT_ARRAY_WRAPPER)) AS ${r(e.relationName)}`;
|
|
1011
|
-
},
|
|
1012
|
+
}, Ar = (e, t, n) => {
|
|
1012
1013
|
if (e.offset !== void 0) {
|
|
1013
|
-
let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${
|
|
1014
|
+
let r = e.orderBy && e.orderBy.length > 0 ? t : n` ORDER BY (SELECT NULL)`, i = e.limit === void 0 ? n`${r} OFFSET ${V(e.offset, n)} ROWS` : n`${r} OFFSET ${V(e.offset, n)} ROWS FETCH NEXT ${V(e.limit, n)} ROWS ONLY`;
|
|
1014
1015
|
return {
|
|
1015
1016
|
top: n``,
|
|
1016
1017
|
pagination: i,
|
|
@@ -1018,33 +1019,33 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1018
1019
|
};
|
|
1019
1020
|
}
|
|
1020
1021
|
return {
|
|
1021
|
-
top: e.limit === void 0 ? n`` : n`TOP ${
|
|
1022
|
+
top: e.limit === void 0 ? n`` : n`TOP ${V(e.limit, n)} `,
|
|
1022
1023
|
pagination: n``,
|
|
1023
1024
|
finalOrder: t
|
|
1024
1025
|
};
|
|
1025
|
-
},
|
|
1026
|
-
let r = n.sql, i = n.nextAlias(), a =
|
|
1026
|
+
}, jr = (e, t, n) => {
|
|
1027
|
+
let r = n.sql, i = n.nextAlias(), a = Er(i, e.target, e.children, n);
|
|
1027
1028
|
if (a === null) return null;
|
|
1028
|
-
let o = e.branch.where === void 0 ? r`` : r` AND ${
|
|
1029
|
-
return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${
|
|
1030
|
-
},
|
|
1031
|
-
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c =
|
|
1029
|
+
let o = e.branch.where === void 0 ? r`` : r` AND ${H(e.branch.where, i, r)}`, s = L(i, e.branch.orderBy, r), { top: c, pagination: l, finalOrder: u } = Ar(e.branch, s, r);
|
|
1030
|
+
return r`ISNULL(JSON_QUERY((SELECT ${c}${a} FROM ${r(e.target.tableName)} AS ${r(i)} WHERE ${z(i, e.foreignKey, r)} = ${z(t, e.sourceKey, r)}${o}${u}${l} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
1031
|
+
}, Mr = (e, t, n) => {
|
|
1032
|
+
let r = n.sql, i = e.relation, a = i.through(), o = n.nextAlias(), s = n.nextAlias(), c = Er(o, e.target, e.children, n, e.junction === void 0 ? void 0 : {
|
|
1032
1033
|
projection: e.junction,
|
|
1033
|
-
source:
|
|
1034
|
+
source: pr(s)
|
|
1034
1035
|
});
|
|
1035
1036
|
if (c === null) return null;
|
|
1036
|
-
let l = e.branch.where === void 0 ? r`` : r` AND ${
|
|
1037
|
-
return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${
|
|
1038
|
-
},
|
|
1037
|
+
let l = e.branch.where === void 0 ? r`` : r` AND ${H(e.branch.where, o, r)}`, u = U(e, s, r), d = L(o, e.branch.orderBy, r), { top: f, pagination: p, finalOrder: m } = Ar(e.branch, d, r);
|
|
1038
|
+
return r`ISNULL(JSON_QUERY((SELECT ${f}${c} FROM ${r(a.tableName)} AS ${r(s)} INNER JOIN ${r(e.target.tableName)} AS ${r(o)} ON ${z(o, "id", r)} = ${z(s, i.targetKey, r)} WHERE ${z(s, i.sourceKey, r)} = ${z(t, "id", r)}${u}${l}${m}${p} FOR JSON PATH, INCLUDE_NULL_VALUES)), JSON_QUERY('[]')) AS ${r(e.relationName)}`;
|
|
1039
|
+
}, z = (e, t, n) => e === void 0 ? n`${n(t)}` : n`${n(e)}.${n(t)}`, B = (e, t) => t.unsafe(`'${e.replace(/'/g, "''")}'`), V = (e, t) => {
|
|
1039
1040
|
if (!Number.isFinite(e) || !Number.isInteger(e) || e < 0) throw Error(`literalInt: expected non-negative integer, got ${e}`);
|
|
1040
1041
|
return t.unsafe(String(e));
|
|
1041
|
-
},
|
|
1042
|
+
}, H = (e, t, n) => P(Nr(e, t), n), U = (e, t, n, r = !1) => {
|
|
1042
1043
|
let i = e.branch.onJunction;
|
|
1043
|
-
return i === void 0 ? n`` : n` AND ${
|
|
1044
|
-
},
|
|
1045
|
-
if ("not" in e) return { not:
|
|
1046
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
1047
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
1044
|
+
return i === void 0 ? n`` : n` AND ${H(r ? W(i) : i, t, n)}`;
|
|
1045
|
+
}, Nr = (e, t) => {
|
|
1046
|
+
if ("not" in e) return { not: Nr(e.not, t) };
|
|
1047
|
+
if ("and" in e) return { and: e.and.map((e) => Nr(e, t)) };
|
|
1048
|
+
if ("or" in e) return { or: e.or.map((e) => Nr(e, t)) };
|
|
1048
1049
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
1049
1050
|
let n = e;
|
|
1050
1051
|
return {
|
|
@@ -1058,23 +1059,23 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1058
1059
|
...n,
|
|
1059
1060
|
column: `${t}.${n.column}`
|
|
1060
1061
|
};
|
|
1061
|
-
},
|
|
1062
|
-
if ("not" in e) return { not:
|
|
1063
|
-
if ("and" in e) return { and: e.and.map((e) =>
|
|
1064
|
-
if ("or" in e) return { or: e.or.map((e) =>
|
|
1062
|
+
}, W = (e) => {
|
|
1063
|
+
if ("not" in e) return { not: W(e.not) };
|
|
1064
|
+
if ("and" in e) return { and: e.and.map((e) => W(e)) };
|
|
1065
|
+
if ("or" in e) return { or: e.or.map((e) => W(e)) };
|
|
1065
1066
|
if (e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists") return e;
|
|
1066
1067
|
let t = e;
|
|
1067
1068
|
return {
|
|
1068
1069
|
...t,
|
|
1069
|
-
value:
|
|
1070
|
+
value: Pr(t.value)
|
|
1070
1071
|
};
|
|
1071
|
-
},
|
|
1072
|
-
e.actors !== void 0 && (
|
|
1073
|
-
},
|
|
1072
|
+
}, Pr = (e) => e == null ? e : e instanceof Date ? e.toISOString() : typeof e == "boolean" ? +!!e : Array.isArray(e) ? e.map((e) => Pr(e)) : e, Fr = Symbol.for("@voltro/database/coreTablesRegistry"), Ir = globalThis, Lr = Ir[Fr] ?? (Ir[Fr] = {}), Rr = (e) => {
|
|
1073
|
+
e.actors !== void 0 && (Lr.actors = e.actors), e.tenants !== void 0 && (Lr.tenants = e.tenants);
|
|
1074
|
+
}, zr = (e, t) => () => {
|
|
1074
1075
|
let n = e();
|
|
1075
1076
|
if (n === void 0) throw Error(`core '${t}' table not registered; expected the framework CLI or your migrate step to call registerCoreTables({ ${t}: () => ${t}Table }) before the database handle is constructed`);
|
|
1076
1077
|
return n();
|
|
1077
|
-
},
|
|
1078
|
+
}, Br = () => zr(() => Lr.actors, "actors"), Vr = () => zr(() => Lr.tenants, "tenants"), Hr = w("actors", {
|
|
1078
1079
|
id: O(),
|
|
1079
1080
|
kind: E().oneOf([
|
|
1080
1081
|
"user",
|
|
@@ -1084,69 +1085,73 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1084
1085
|
]),
|
|
1085
1086
|
displayName: E().nullable(),
|
|
1086
1087
|
createdAt: _().default("now")
|
|
1087
|
-
}),
|
|
1088
|
+
}), Ur = (e, t) => ({
|
|
1088
1089
|
column: e,
|
|
1089
1090
|
op: "eq",
|
|
1090
1091
|
value: t
|
|
1091
|
-
}),
|
|
1092
|
+
}), Wr = (e, t) => ({
|
|
1092
1093
|
column: e,
|
|
1093
1094
|
op: "neq",
|
|
1094
1095
|
value: t
|
|
1095
|
-
}),
|
|
1096
|
+
}), Gr = (e, t) => ({
|
|
1096
1097
|
column: e,
|
|
1097
1098
|
op: "gt",
|
|
1098
1099
|
value: t
|
|
1099
|
-
}),
|
|
1100
|
+
}), Kr = (e, t) => ({
|
|
1100
1101
|
column: e,
|
|
1101
1102
|
op: "gte",
|
|
1102
1103
|
value: t
|
|
1103
|
-
}),
|
|
1104
|
+
}), qr = (e, t) => ({
|
|
1104
1105
|
column: e,
|
|
1105
1106
|
op: "lt",
|
|
1106
1107
|
value: t
|
|
1107
|
-
}),
|
|
1108
|
+
}), Jr = (e, t) => ({
|
|
1108
1109
|
column: e,
|
|
1109
1110
|
op: "lte",
|
|
1110
1111
|
value: t
|
|
1111
|
-
}),
|
|
1112
|
+
}), Yr = (e, t) => ({
|
|
1112
1113
|
column: e,
|
|
1113
1114
|
op: "in",
|
|
1114
1115
|
value: t
|
|
1115
|
-
}),
|
|
1116
|
+
}), Xr = (e, t) => ({
|
|
1116
1117
|
column: e,
|
|
1117
1118
|
op: "notIn",
|
|
1118
1119
|
value: t
|
|
1119
|
-
}),
|
|
1120
|
+
}), Zr = (e, t) => ({
|
|
1120
1121
|
column: e,
|
|
1121
1122
|
op: "contains",
|
|
1122
1123
|
value: t
|
|
1123
|
-
}),
|
|
1124
|
+
}), Qr = (e, t) => ({
|
|
1124
1125
|
column: e,
|
|
1125
1126
|
op: "startsWith",
|
|
1126
1127
|
value: t
|
|
1127
|
-
}),
|
|
1128
|
+
}), $r = (e, t) => ({
|
|
1128
1129
|
column: e,
|
|
1129
1130
|
op: "arrayContains",
|
|
1130
1131
|
value: t
|
|
1131
|
-
}),
|
|
1132
|
+
}), ei = (e, t) => ({
|
|
1132
1133
|
column: e,
|
|
1133
1134
|
op: "arrayOverlaps",
|
|
1134
1135
|
value: t
|
|
1135
|
-
}),
|
|
1136
|
+
}), ti = (e, t) => ({
|
|
1136
1137
|
column: e,
|
|
1137
1138
|
op: "arrayHas",
|
|
1138
1139
|
value: t
|
|
1139
|
-
}),
|
|
1140
|
+
}), ni = {
|
|
1141
|
+
column: "id",
|
|
1142
|
+
op: "in",
|
|
1143
|
+
value: []
|
|
1144
|
+
}, ri = (e) => ({
|
|
1140
1145
|
column: e,
|
|
1141
1146
|
op: "isNull"
|
|
1142
|
-
}),
|
|
1147
|
+
}), ii = (e) => ({
|
|
1143
1148
|
column: e,
|
|
1144
1149
|
op: "isNotNull"
|
|
1145
|
-
}),
|
|
1150
|
+
}), ai = (e, t) => ({
|
|
1146
1151
|
column: e,
|
|
1147
1152
|
op: "spatial",
|
|
1148
1153
|
value: t
|
|
1149
|
-
}),
|
|
1154
|
+
}), oi = (...e) => ({ and: e }), si = (...e) => ({ or: e }), ci = (e) => ({ not: e }), li = (e, ...t) => {
|
|
1150
1155
|
if (t.length === 0) throw Error(`jsonField("${e}"): at least one path segment is required`);
|
|
1151
1156
|
let n = (n, r) => ({
|
|
1152
1157
|
column: e,
|
|
@@ -1168,29 +1173,29 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1168
1173
|
isNull: () => n("isNull"),
|
|
1169
1174
|
isNotNull: () => n("isNotNull")
|
|
1170
1175
|
};
|
|
1171
|
-
},
|
|
1176
|
+
}, ui = (e) => "descriptor" in e ? e.descriptor : e, di = (e, t) => ({
|
|
1172
1177
|
column: e,
|
|
1173
1178
|
op: "subquery-in",
|
|
1174
|
-
subquery:
|
|
1175
|
-
}),
|
|
1179
|
+
subquery: ui(t)
|
|
1180
|
+
}), fi = (e, t) => ({
|
|
1176
1181
|
column: e,
|
|
1177
1182
|
op: "subquery-not-in",
|
|
1178
|
-
subquery:
|
|
1179
|
-
}),
|
|
1183
|
+
subquery: ui(t)
|
|
1184
|
+
}), pi = (e) => ({
|
|
1180
1185
|
op: "exists",
|
|
1181
|
-
subquery:
|
|
1182
|
-
}),
|
|
1186
|
+
subquery: ui(e)
|
|
1187
|
+
}), mi = (e) => ({
|
|
1183
1188
|
op: "not-exists",
|
|
1184
|
-
subquery:
|
|
1185
|
-
}),
|
|
1189
|
+
subquery: ui(e)
|
|
1190
|
+
}), hi = (e, t) => e == null || t == null ? null : typeof e == typeof t ? e === t ? 0 : e > t ? 1 : -1 : null, gi = (e, t, n = null) => {
|
|
1186
1191
|
if (!t) return !1;
|
|
1187
|
-
if ("not" in e) return !
|
|
1192
|
+
if ("not" in e) return !gi(e.not, t, n);
|
|
1188
1193
|
if ("and" in e) {
|
|
1189
|
-
for (let r of e.and) if (!
|
|
1194
|
+
for (let r of e.and) if (!gi(r, t, n)) return !1;
|
|
1190
1195
|
return !0;
|
|
1191
1196
|
}
|
|
1192
1197
|
if ("or" in e) {
|
|
1193
|
-
for (let r of e.or) if (
|
|
1198
|
+
for (let r of e.or) if (gi(r, t, n)) return !0;
|
|
1194
1199
|
return !1;
|
|
1195
1200
|
}
|
|
1196
1201
|
if (e.op === "subquery-in" || e.op === "subquery-not-in") {
|
|
@@ -1209,10 +1214,10 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1209
1214
|
switch (r.op) {
|
|
1210
1215
|
case "eq": return i === r.value;
|
|
1211
1216
|
case "neq": return i !== r.value;
|
|
1212
|
-
case "gt": return (
|
|
1213
|
-
case "gte": return (
|
|
1214
|
-
case "lt": return (
|
|
1215
|
-
case "lte": return (
|
|
1217
|
+
case "gt": return (hi(i, r.value) ?? -1) > 0;
|
|
1218
|
+
case "gte": return (hi(i, r.value) ?? -1) >= 0;
|
|
1219
|
+
case "lt": return (hi(i, r.value) ?? 1) < 0;
|
|
1220
|
+
case "lte": return (hi(i, r.value) ?? 1) <= 0;
|
|
1216
1221
|
case "in": return Array.isArray(r.value) && r.value.includes(i);
|
|
1217
1222
|
case "notIn": return Array.isArray(r.value) && !r.value.includes(i);
|
|
1218
1223
|
case "contains": return typeof i == "string" && typeof r.value == "string" && i.toLowerCase().includes(r.value.toLowerCase());
|
|
@@ -1230,17 +1235,17 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1230
1235
|
case "isNotNull": return i != null;
|
|
1231
1236
|
case "spatial": throw Error("@voltro/plugin-postgis: spatial predicates (ST_DWithin / ST_Contains / ST_Within / ST_Intersects / bbox &&) are not evaluable in-memory — use them in one-shot ctx.store.query reads, not reactive subscriptions.");
|
|
1232
1237
|
}
|
|
1233
|
-
},
|
|
1238
|
+
}, _i = function* (e) {
|
|
1234
1239
|
if ("not" in e) {
|
|
1235
|
-
yield*
|
|
1240
|
+
yield* _i(e.not);
|
|
1236
1241
|
return;
|
|
1237
1242
|
}
|
|
1238
1243
|
if ("and" in e) {
|
|
1239
|
-
for (let t of e.and) yield*
|
|
1244
|
+
for (let t of e.and) yield* _i(t);
|
|
1240
1245
|
return;
|
|
1241
1246
|
}
|
|
1242
1247
|
if ("or" in e) {
|
|
1243
|
-
for (let t of e.or) yield*
|
|
1248
|
+
for (let t of e.or) yield* _i(t);
|
|
1244
1249
|
return;
|
|
1245
1250
|
}
|
|
1246
1251
|
e.op === "subquery-in" || e.op === "subquery-not-in" ? yield {
|
|
@@ -1250,27 +1255,71 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1250
1255
|
kind: "exists",
|
|
1251
1256
|
descriptor: e.subquery
|
|
1252
1257
|
});
|
|
1253
|
-
},
|
|
1258
|
+
}, vi = function* (e, t = !0) {
|
|
1254
1259
|
if ("not" in e) {
|
|
1255
|
-
yield*
|
|
1260
|
+
yield* vi(e.not, !1);
|
|
1256
1261
|
return;
|
|
1257
1262
|
}
|
|
1258
1263
|
if ("and" in e) {
|
|
1259
|
-
for (let n of e.and) yield*
|
|
1264
|
+
for (let n of e.and) yield* vi(n, t);
|
|
1260
1265
|
return;
|
|
1261
1266
|
}
|
|
1262
1267
|
if ("or" in e) {
|
|
1263
|
-
for (let t of e.or) yield*
|
|
1268
|
+
for (let t of e.or) yield* vi(t, !1);
|
|
1264
1269
|
return;
|
|
1265
1270
|
}
|
|
1266
1271
|
e.op === "subquery-in" || e.op === "subquery-not-in" || e.op === "exists" || e.op === "not-exists" || (yield {
|
|
1267
1272
|
...e,
|
|
1268
1273
|
conjunctive: t
|
|
1269
1274
|
});
|
|
1270
|
-
},
|
|
1275
|
+
}, yi = new ut(), bi = (e, t) => yi.run(e, t), xi = () => yi.getStore(), Si = () => {
|
|
1276
|
+
let e = yi.getStore();
|
|
1277
|
+
return e === void 0 ? {} : {
|
|
1278
|
+
...e.traceId === void 0 ? {} : { traceId: e.traceId },
|
|
1279
|
+
...e.subjectId === void 0 ? {} : { subjectId: e.subjectId }
|
|
1280
|
+
};
|
|
1281
|
+
}, Ci = 3e4, wi = 1e4, G = /* @__PURE__ */ new Map(), K = 0, Ti = (e, t, n) => `${e}${t}${String(n)}`, Ei = (e) => {
|
|
1282
|
+
for (let [t, n] of G) {
|
|
1283
|
+
let r = n.filter((t) => e - t.at < Ci);
|
|
1284
|
+
K -= n.length - r.length, r.length === 0 ? G.delete(t) : r.length !== n.length && G.set(t, r);
|
|
1285
|
+
}
|
|
1286
|
+
}, Di = (e, t) => {
|
|
1287
|
+
if (t.traceId === void 0 && t.subjectId === void 0) return;
|
|
1288
|
+
let n = Date.now();
|
|
1289
|
+
if (K >= wi && Ei(n), K >= wi) return;
|
|
1290
|
+
let r = G.get(e);
|
|
1291
|
+
r === void 0 ? G.set(e, [{
|
|
1292
|
+
attribution: t,
|
|
1293
|
+
at: n
|
|
1294
|
+
}]) : r.push({
|
|
1295
|
+
attribution: t,
|
|
1296
|
+
at: n
|
|
1297
|
+
}), K += 1;
|
|
1298
|
+
}, Oi = (e) => {
|
|
1299
|
+
let t = G.get(e);
|
|
1300
|
+
if (t === void 0 || t.length === 0) return;
|
|
1301
|
+
let n = t.shift();
|
|
1302
|
+
if (--K, t.length === 0 && G.delete(e), !(Date.now() - n.at >= Ci)) return n.attribution;
|
|
1303
|
+
}, ki = () => {
|
|
1304
|
+
G.clear(), K = 0;
|
|
1305
|
+
}, Ai = () => K, q = /* @__PURE__ */ new Map(), ji = (e, t) => {
|
|
1306
|
+
q.set(e, {
|
|
1307
|
+
recorder: t.recorder,
|
|
1308
|
+
tables: new Set(t.tables),
|
|
1309
|
+
ownTables: new Set(t.ownTables)
|
|
1310
|
+
});
|
|
1311
|
+
}, Mi = (e) => {
|
|
1312
|
+
q.delete(e);
|
|
1313
|
+
}, Ni = () => q.clear(), Pi = (e) => {
|
|
1314
|
+
if (q.size === 0) return !1;
|
|
1315
|
+
for (let t of q.values()) if (!t.ownTables.has(e) && t.tables.has(e)) return !0;
|
|
1316
|
+
return !1;
|
|
1317
|
+
}, Fi = async (e, t) => {
|
|
1318
|
+
if (q.size !== 0) for (let n of q.values()) n.ownTables.has(t.table) || n.tables.has(t.table) && await n.recorder(e, t);
|
|
1319
|
+
}, Ii = class extends st.TaggedError("TableStreamError") {}, Li = 1e3, Ri = (e, t, n, r) => {
|
|
1271
1320
|
let i = k.match(r, {
|
|
1272
1321
|
onNone: () => e.where,
|
|
1273
|
-
onSome: (n) => e.where ?
|
|
1322
|
+
onSome: (n) => e.where ? oi(e.where, Gr(t, n)) : Gr(t, n)
|
|
1274
1323
|
});
|
|
1275
1324
|
return {
|
|
1276
1325
|
table: e.table,
|
|
@@ -1285,19 +1334,19 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1285
1334
|
...e.includeDeleted === void 0 ? {} : { includeDeleted: e.includeDeleted },
|
|
1286
1335
|
...e.crossTenant === void 0 ? {} : { crossTenant: e.crossTenant }
|
|
1287
1336
|
};
|
|
1288
|
-
},
|
|
1289
|
-
let n = t.pk ?? "id", r = t.chunkSize ??
|
|
1337
|
+
}, zi = (e, t) => {
|
|
1338
|
+
let n = t.pk ?? "id", r = t.chunkSize ?? Li;
|
|
1290
1339
|
return lt.paginateChunkEffect(k.none(), (i) => {
|
|
1291
1340
|
let a = ct.tryPromise({
|
|
1292
|
-
try: () => e.query(
|
|
1293
|
-
catch: (e) => new
|
|
1341
|
+
try: () => e.query(Ri(t, n, r, i)),
|
|
1342
|
+
catch: (e) => new Ii({
|
|
1294
1343
|
table: t.table,
|
|
1295
1344
|
cause: e
|
|
1296
1345
|
})
|
|
1297
1346
|
});
|
|
1298
1347
|
return (t.retry ? a.pipe(ct.retry(t.retry)) : a).pipe(ct.map((e) => [ot.fromIterable(e), e.length === r && e.length > 0 ? k.some(k.some(e[e.length - 1][n])) : k.none()]));
|
|
1299
1348
|
});
|
|
1300
|
-
},
|
|
1349
|
+
}, Bi = (e) => {
|
|
1301
1350
|
let t = e.alpha ?? .5;
|
|
1302
1351
|
if (t < 0 || t > 1) throw Error(`hybridSearch: alpha must be in [0, 1], got ${t}`);
|
|
1303
1352
|
return (n) => {
|
|
@@ -1324,14 +1373,14 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1324
1373
|
}
|
|
1325
1374
|
};
|
|
1326
1375
|
};
|
|
1327
|
-
},
|
|
1376
|
+
}, Vi = async (e, t) => {
|
|
1328
1377
|
let n = e.as ?? "embedding", r = t.row[e.from];
|
|
1329
1378
|
if (typeof r != "string" || r.length === 0) return {};
|
|
1330
1379
|
let i = await t.embed(r);
|
|
1331
1380
|
return { [n]: i };
|
|
1332
|
-
},
|
|
1381
|
+
}, Hi = (e) => {
|
|
1333
1382
|
if (!Number.isInteger(e.dimensions) || e.dimensions <= 0) throw Error(`vectorEmbedding: dimensions must be a positive integer, got ${String(e.dimensions)}.`);
|
|
1334
|
-
let t = e.as ?? "embedding", n = (t) =>
|
|
1383
|
+
let t = e.as ?? "embedding", n = (t) => Vi(e, t);
|
|
1335
1384
|
return d({
|
|
1336
1385
|
id: "voltro/vectorEmbedding",
|
|
1337
1386
|
fields: { [t]: y(e.dimensions) },
|
|
@@ -1349,19 +1398,19 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1349
1398
|
beforeUpdate: n
|
|
1350
1399
|
}
|
|
1351
1400
|
});
|
|
1352
|
-
},
|
|
1401
|
+
}, Ui = 63, Wi = "br_pr", J = class extends Error {
|
|
1353
1402
|
_tag = "BranchNameInvalid";
|
|
1354
1403
|
constructor(e) {
|
|
1355
1404
|
super(e), this.name = "BranchNameInvalid";
|
|
1356
1405
|
}
|
|
1357
|
-
},
|
|
1406
|
+
}, Gi = (e, t) => {
|
|
1358
1407
|
if (!Number.isInteger(t) || t < 0) throw new J(`prNumber must be a non-negative integer, got ${String(t)}`);
|
|
1359
|
-
let n =
|
|
1408
|
+
let n = xn(e);
|
|
1360
1409
|
if (n.replace(/_/g, "") === "") throw new J(`app slug '${e}' has no usable identifier characters`);
|
|
1361
|
-
let r = `${
|
|
1362
|
-
if (r.length >
|
|
1410
|
+
let r = `${Wi}${t}_${n}`;
|
|
1411
|
+
if (r.length > Ui) throw new J(`branch namespace '${r}' exceeds the ${Ui}-byte identifier limit — use a shorter app slug`);
|
|
1363
1412
|
return r;
|
|
1364
|
-
},
|
|
1413
|
+
}, Ki = (e) => e.startsWith(Wi), qi = {
|
|
1365
1414
|
requested: {
|
|
1366
1415
|
provision: "provisioning",
|
|
1367
1416
|
destroy: "destroying"
|
|
@@ -1380,18 +1429,18 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1380
1429
|
fail: "failed"
|
|
1381
1430
|
},
|
|
1382
1431
|
destroyed: {}
|
|
1383
|
-
},
|
|
1432
|
+
}, Ji = class extends Error {
|
|
1384
1433
|
from;
|
|
1385
1434
|
event;
|
|
1386
1435
|
_tag = "BranchTransitionInvalid";
|
|
1387
1436
|
constructor(e, t) {
|
|
1388
1437
|
super(`invalid branch transition: ${e} --${t}-->`), this.from = e, this.event = t, this.name = "BranchTransitionInvalid";
|
|
1389
1438
|
}
|
|
1390
|
-
},
|
|
1391
|
-
let n =
|
|
1392
|
-
if (n === void 0) throw new
|
|
1439
|
+
}, Yi = (e, t) => {
|
|
1440
|
+
let n = qi[e][t];
|
|
1441
|
+
if (n === void 0) throw new Ji(e, t);
|
|
1393
1442
|
return n;
|
|
1394
|
-
},
|
|
1443
|
+
}, Xi = (e, t, n, r) => {
|
|
1395
1444
|
if (n === "copy" && (r === void 0 || r === "")) throw new J("seed 'copy' requires a parentNamespace to snapshot from");
|
|
1396
1445
|
let i = [{
|
|
1397
1446
|
kind: "create-namespace",
|
|
@@ -1412,13 +1461,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1412
1461
|
detail: `run boot seeds into ${e}`
|
|
1413
1462
|
});
|
|
1414
1463
|
return i;
|
|
1415
|
-
},
|
|
1416
|
-
if (!
|
|
1464
|
+
}, Zi = (e) => {
|
|
1465
|
+
if (!Ki(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1417
1466
|
return [{
|
|
1418
1467
|
kind: "drop-namespace",
|
|
1419
1468
|
detail: e
|
|
1420
1469
|
}];
|
|
1421
|
-
},
|
|
1470
|
+
}, Qi = (e) => {
|
|
1422
1471
|
if (e === void 0 || e === "") return !1;
|
|
1423
1472
|
try {
|
|
1424
1473
|
let t = new URL(e).hostname.toLowerCase();
|
|
@@ -1426,27 +1475,27 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1426
1475
|
} catch {
|
|
1427
1476
|
return /\bneon\.(tech|build)\b/i.test(e);
|
|
1428
1477
|
}
|
|
1429
|
-
},
|
|
1478
|
+
}, $i = (e) => e.prefer === void 0 ? e.seed === "copy" && Qi(e.dbUrl) ? "neon-cow" : "namespace" : e.prefer, ea = (e, t = {}) => [{
|
|
1430
1479
|
kind: "neon-branch-create",
|
|
1431
1480
|
detail: `${t.parentBranch ?? "main"} → ${e} (copy-on-write)`
|
|
1432
|
-
}],
|
|
1433
|
-
if (!
|
|
1481
|
+
}], ta = (e) => {
|
|
1482
|
+
if (!Ki(e)) throw new J(`refusing to plan teardown of '${e}' — not a branch namespace`);
|
|
1434
1483
|
return [{
|
|
1435
1484
|
kind: "neon-branch-delete",
|
|
1436
1485
|
detail: e
|
|
1437
1486
|
}];
|
|
1438
|
-
},
|
|
1487
|
+
}, na = (e) => e.mechanism === "neon-cow" ? ea(e.branchId, e.neonParentBranch === void 0 ? {} : { parentBranch: e.neonParentBranch }) : Xi(e.branchId, e.tableNames, e.seed, e.parentNamespace), ra = (e, t) => e === "neon-cow" ? ta(t) : Zi(t), ia = (e, t, n) => {
|
|
1439
1488
|
let r = e.filter((e) => e.state !== "destroyed" && e.state !== "destroying"), i = r.filter((e) => n - e.createdAtMs > t.ttlMs).map((e) => e.namespace), a = new Set(i);
|
|
1440
1489
|
return {
|
|
1441
1490
|
evict: i,
|
|
1442
1491
|
rejectNew: r.filter((e) => !a.has(e.namespace)).length >= t.maxBranches
|
|
1443
1492
|
};
|
|
1444
|
-
},
|
|
1445
|
-
let n =
|
|
1493
|
+
}, aa = async (e, t) => {
|
|
1494
|
+
let n = Gi(e.appSlug, e.prNumber), r = $i({
|
|
1446
1495
|
seed: e.seed,
|
|
1447
1496
|
...e.dbUrl === void 0 ? {} : { dbUrl: e.dbUrl },
|
|
1448
1497
|
...e.prefer === void 0 ? {} : { prefer: e.prefer }
|
|
1449
|
-
}), i =
|
|
1498
|
+
}), i = na({
|
|
1450
1499
|
mechanism: r,
|
|
1451
1500
|
branchId: n,
|
|
1452
1501
|
tableNames: e.tableNames,
|
|
@@ -1471,10 +1520,10 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1471
1520
|
mechanism: r,
|
|
1472
1521
|
steps: i
|
|
1473
1522
|
};
|
|
1474
|
-
},
|
|
1475
|
-
let r =
|
|
1523
|
+
}, oa = async (e, t, n) => {
|
|
1524
|
+
let r = ra(t, e);
|
|
1476
1525
|
return t === "neon-cow" ? await n.neonBranchDelete(e) : await n.dropNamespace(e), r;
|
|
1477
|
-
},
|
|
1526
|
+
}, sa = (e, t, n) => ia(e, t, n), Y = (e) => `"${e.replace(/"/g, "\"\"")}"`, ca = (e) => {
|
|
1478
1527
|
let t = () => {
|
|
1479
1528
|
throw Error("namespace branch executor: Neon ops require a neon-cow executor (use a Neon connection for copy-on-write branches)");
|
|
1480
1529
|
};
|
|
@@ -1486,18 +1535,18 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1486
1535
|
neonBranchCreate: t,
|
|
1487
1536
|
neonBranchDelete: t
|
|
1488
1537
|
};
|
|
1489
|
-
},
|
|
1538
|
+
}, la = class extends Error {
|
|
1490
1539
|
_tag = "TenantResidencyUnresolved";
|
|
1491
1540
|
constructor(e) {
|
|
1492
1541
|
super(e), this.name = "TenantResidencyUnresolved";
|
|
1493
1542
|
}
|
|
1494
|
-
},
|
|
1543
|
+
}, ua = class extends Error {
|
|
1495
1544
|
region;
|
|
1496
1545
|
_tag = "TenantRegionUnavailable";
|
|
1497
1546
|
constructor(e, t) {
|
|
1498
1547
|
super(t), this.region = e, this.name = "TenantRegionUnavailable";
|
|
1499
1548
|
}
|
|
1500
|
-
},
|
|
1549
|
+
}, da, fa = (e) => {
|
|
1501
1550
|
if (e.homes === void 0) throw Error("setResidencyConfig: `homes` is required");
|
|
1502
1551
|
if (e.servableRegions === void 0 || e.servableRegions.length === 0) throw Error("setResidencyConfig: `servableRegions` must be non-empty (which regions this deployment serves)");
|
|
1503
1552
|
let t = /* @__PURE__ */ new Map();
|
|
@@ -1506,32 +1555,32 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1506
1555
|
if (e !== void 0 && e !== n.region) throw Error(`residency: tenant '${n.tenantId}' is mapped to two regions ('${e}' and '${n.region}')`);
|
|
1507
1556
|
t.set(n.tenantId, n.region);
|
|
1508
1557
|
}
|
|
1509
|
-
return
|
|
1510
|
-
},
|
|
1511
|
-
|
|
1512
|
-
},
|
|
1513
|
-
if (e == null || e === "") throw new
|
|
1558
|
+
return da = e, e;
|
|
1559
|
+
}, pa = () => da, ma = () => {
|
|
1560
|
+
da = void 0;
|
|
1561
|
+
}, ha = (e, t) => {
|
|
1562
|
+
if (e == null || e === "") throw new la("residency is on but the request has no resolvable tenant — refusing to bind a store");
|
|
1514
1563
|
let n = t.homes.find((t) => t.tenantId === e);
|
|
1515
|
-
if (n === void 0) throw new
|
|
1564
|
+
if (n === void 0) throw new la(`no residency home is mapped for tenant '${e}' — refusing to fall back to a default store (would be a residency violation)`);
|
|
1516
1565
|
return n;
|
|
1517
|
-
},
|
|
1518
|
-
let n =
|
|
1566
|
+
}, ga = (e, t) => t.servableRegions.includes(e), _a = (e, t) => {
|
|
1567
|
+
let n = ha(e.tenantId, t), r = Sn(n.tenantId);
|
|
1519
1568
|
return {
|
|
1520
1569
|
region: n.region,
|
|
1521
1570
|
namespace: r,
|
|
1522
1571
|
...n.connectionKey === void 0 ? {} : { connectionKey: n.connectionKey }
|
|
1523
1572
|
};
|
|
1524
|
-
},
|
|
1525
|
-
let r =
|
|
1526
|
-
if (!
|
|
1573
|
+
}, va = (e, t, n) => {
|
|
1574
|
+
let r = _a(e, t);
|
|
1575
|
+
if (!ga(r.region, t)) throw new ua(r.region, `tenant homed in region '${r.region}', which this deployment does not serve — route to the home region`);
|
|
1527
1576
|
let i = n.get(r.region);
|
|
1528
|
-
if (i === void 0) throw new
|
|
1577
|
+
if (i === void 0) throw new ua(r.region, `no store handle for home region '${r.region}' (declared servable but not wired) — failing closed`);
|
|
1529
1578
|
return {
|
|
1530
1579
|
store: i,
|
|
1531
1580
|
placement: r
|
|
1532
1581
|
};
|
|
1533
|
-
},
|
|
1534
|
-
let { store: i, placement: a } =
|
|
1582
|
+
}, ya = async (e, t, n, r) => {
|
|
1583
|
+
let { store: i, placement: a } = va(e, t, n);
|
|
1535
1584
|
return await r(i, a), a;
|
|
1536
1585
|
}, X = (e) => {
|
|
1537
1586
|
if (typeof e == "string") return e;
|
|
@@ -1540,21 +1589,21 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1540
1589
|
return `(json:${t}->${n.join(".")}${r ? "::num" : ""})`;
|
|
1541
1590
|
}
|
|
1542
1591
|
return `(${e.expr})`;
|
|
1543
|
-
}, Z = (e) => e.map(X),
|
|
1592
|
+
}, Z = (e) => e.map(X), ba = (e, t) => {
|
|
1544
1593
|
if (e.length !== t.length) return !1;
|
|
1545
1594
|
for (let n = 0; n < e.length; n++) if (X(e[n]) !== X(t[n])) return !1;
|
|
1546
1595
|
return !0;
|
|
1547
|
-
},
|
|
1596
|
+
}, xa = (e, t) => {
|
|
1548
1597
|
if (e.length >= t.length) return !1;
|
|
1549
1598
|
for (let n = 0; n < e.length; n++) if (X(e[n]) !== X(t[n])) return !1;
|
|
1550
1599
|
return !0;
|
|
1551
|
-
},
|
|
1600
|
+
}, Sa = (e) => {
|
|
1552
1601
|
let t = [], n = e.appliedIndexes, r = e.tableName;
|
|
1553
1602
|
for (let e = 0; e < n.length; e++) {
|
|
1554
1603
|
let i = n[e];
|
|
1555
1604
|
for (let a = e + 1; a < n.length; a++) {
|
|
1556
1605
|
let e = n[a];
|
|
1557
|
-
if (
|
|
1606
|
+
if (ba(i.fields, e.fields)) {
|
|
1558
1607
|
let [n, a] = i.name < e.name ? [i, e] : [e, i];
|
|
1559
1608
|
t.push({
|
|
1560
1609
|
kind: "duplicate-fields",
|
|
@@ -1565,13 +1614,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1565
1614
|
});
|
|
1566
1615
|
continue;
|
|
1567
1616
|
}
|
|
1568
|
-
|
|
1617
|
+
xa(i.fields, e.fields) ? t.push({
|
|
1569
1618
|
kind: "redundant-prefix",
|
|
1570
1619
|
table: r,
|
|
1571
1620
|
redundant: i,
|
|
1572
1621
|
coveredBy: e,
|
|
1573
1622
|
message: `'${r}' index '${i.name}' on [${Z(i.fields).join(", ")}] is a leading prefix of '${e.name}' on [${Z(e.fields).join(", ")}]. Every B-tree dialect we support (Postgres / MySQL / MariaDB / MSSQL / SQLite) can serve a [${Z(i.fields).join(", ")}] query from '${e.name}' too via the leading-prefix rule, so '${i.name}' adds write cost without read benefit. Drop '${i.name}' — unless you specifically need a smaller index for cache locality on a write-heavy table (rare; profile first).`
|
|
1574
|
-
}) :
|
|
1623
|
+
}) : xa(e.fields, i.fields) && t.push({
|
|
1575
1624
|
kind: "redundant-prefix",
|
|
1576
1625
|
table: r,
|
|
1577
1626
|
redundant: e,
|
|
@@ -1581,23 +1630,23 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1581
1630
|
}
|
|
1582
1631
|
}
|
|
1583
1632
|
return t;
|
|
1584
|
-
},
|
|
1633
|
+
}, Ca = (e) => {
|
|
1585
1634
|
let t = [];
|
|
1586
|
-
for (let n of e) t.push(...
|
|
1635
|
+
for (let n of e) t.push(...Sa(n));
|
|
1587
1636
|
return t;
|
|
1588
|
-
},
|
|
1589
|
-
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n, j.dim, e.padEnd(11)), a = (e) => Q(n, (e) => j.bold(j.brand(e)), e), o = (e) => Q(n, j.brightRed24, e), s = (e) => Q(n,
|
|
1637
|
+
}, wa = "\x1B[", Ta = `${wa}38;2;245;158;11m`, Ea = `${wa}38;2;16;185;129m`, Da = (e, t) => `${e}${t}${j.reset}`, Q = (e, t, n) => e ? typeof t == "function" ? t(n) : Da(t, n) : n, Oa = (e, t = {}) => {
|
|
1638
|
+
let n = t.color ?? !0, r = t.indent ?? " ", i = (e) => Q(n, j.dim, e.padEnd(11)), a = (e) => Q(n, (e) => j.bold(j.brand(e)), e), o = (e) => Q(n, j.brightRed24, e), s = (e) => Q(n, Ea, e), c = (e) => Q(n, Ta, e), l = (e) => Q(n, j.dim, e), u = `${c("index audit")} ${l("·")} ${Q(n, j.bold, e.kind)}`, d = e.redundant.fields.length, f = Z(e.coveredBy.fields.slice(d)), p = (e, t) => {
|
|
1590
1639
|
let n = e.slice(0, t), r = e.slice(t), i = [];
|
|
1591
1640
|
return n.length > 0 && i.push(s(`[${n.join(", ")}]`)), r.length > 0 && i.push(c(`+ [${r.join(", ")}]`)), i.join(" ");
|
|
1592
1641
|
}, m = [];
|
|
1593
1642
|
return m.push(u), m.push(""), m.push(`${i("table")}${a(e.table)}`), m.push(""), m.push(`${i("redundant")}${o(e.redundant.name)}`), m.push(`${i("")}${p(Z(e.redundant.fields), d)}`), m.push(""), m.push(`${i("covered by")}${s(e.coveredBy.name)}`), m.push(`${i("")}${p(Z(e.coveredBy.fields), d)}`), f.length > 0 && m.push(`${i("")}${l(`└ extra columns: ${f.join(", ")}`)}`), m.push(""), e.kind === "redundant-prefix" ? (m.push(`${i("why")}B-tree indexes serve queries that filter on a LEADING PREFIX of`), m.push(`${i("")}their column list. The wider index already covers every`), m.push(`${i("")}query the narrower one can serve.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)) : (m.push(`${i("why")}Two indexes on the same columns under different names.`), m.push(`${i("")}The B-tree engine builds both — same coverage, double cost.`), m.push(`${i("")}${l("Same rule on Postgres / MySQL / MariaDB / MSSQL / SQLite.")}`)), m.push(""), m.push(`${i("cost")}Every ${a("INSERT")} / ${a("UPDATE")} / ${a("DELETE")} on this table writes`), m.push(`${i("")}to ${Q(n, j.bold, "both")} B-trees. Pure write overhead, zero read benefit.`), m.push(""), m.push(`${i("fix")}Drop ${o(e.redundant.name)}`), m.push(`${i("")}${l("Keep only if profiling shows the smaller index gives a")}`), m.push(`${i("")}${l("measurable cache-locality boost on a write-heavy hot path.")}`), m.push(`${i("")}${l("Silence with VOLTRO_INDEX_AUDIT=off if intentional.")}`), m.map((e) => `${r}${e}`).join("\n");
|
|
1594
|
-
},
|
|
1643
|
+
}, ka = (e, t) => ({
|
|
1595
1644
|
name: e,
|
|
1596
1645
|
body: t
|
|
1597
|
-
}),
|
|
1646
|
+
}), Aa = (e) => {
|
|
1598
1647
|
if (e.lifecycle === "cron" && !e.cron) throw Error(`seed "${e.id}": lifecycle 'cron' requires a 'cron' field`);
|
|
1599
1648
|
if (e.lifecycle === "onSchemaChange" && (!e.watchedTables || e.watchedTables.length === 0)) throw Error(`seed "${e.id}": lifecycle 'onSchemaChange' requires at least one entry in 'watchedTables'`);
|
|
1600
|
-
let t = e.steps({ step:
|
|
1649
|
+
let t = e.steps({ step: ka });
|
|
1601
1650
|
if (t.length === 0) throw Error(`seed "${e.id}": at least one step is required`);
|
|
1602
1651
|
return {
|
|
1603
1652
|
__seed: !0,
|
|
@@ -1609,13 +1658,13 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1609
1658
|
...e.fingerprint === void 0 ? {} : { fingerprint: e.fingerprint },
|
|
1610
1659
|
steps: t
|
|
1611
1660
|
};
|
|
1612
|
-
},
|
|
1661
|
+
}, ja = (e) => typeof e == "object" && !!e && "__seed" in e && e.__seed === !0, Ma = (e, { apply: t, undo: n }) => ({
|
|
1613
1662
|
name: e,
|
|
1614
1663
|
apply: t,
|
|
1615
1664
|
undo: n
|
|
1616
|
-
}),
|
|
1665
|
+
}), Na = (e) => {
|
|
1617
1666
|
if (!/^\d{14}_/.test(e.id)) throw Error(`migration "${e.id}": id must start with a 14-digit timestamp followed by "_" (convention: <YYYYMMDDHHMMSS>_<slug>)`);
|
|
1618
|
-
let t = e.steps({ step:
|
|
1667
|
+
let t = e.steps({ step: Ma });
|
|
1619
1668
|
if (t.length === 0) throw Error(`migration "${e.id}": at least one step is required`);
|
|
1620
1669
|
return {
|
|
1621
1670
|
__migration: !0,
|
|
@@ -1623,7 +1672,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1623
1672
|
name: e.name,
|
|
1624
1673
|
steps: t
|
|
1625
1674
|
};
|
|
1626
|
-
},
|
|
1675
|
+
}, Pa = (e) => typeof e == "object" && !!e && "__migration" in e && e.__migration === !0, Fa = w("_voltro_migrations", {
|
|
1627
1676
|
id: O({ prefix: "mig" }),
|
|
1628
1677
|
name: E(),
|
|
1629
1678
|
hash: E(),
|
|
@@ -1635,7 +1684,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1635
1684
|
workflowRunId: E().nullable(),
|
|
1636
1685
|
createdAt: _().default("now"),
|
|
1637
1686
|
updatedAt: _().default("now").onUpdate("now")
|
|
1638
|
-
}).index(["status"]),
|
|
1687
|
+
}).index(["status"]), Ia = w("_voltro_seeds", {
|
|
1639
1688
|
id: O({ prefix: "seed" }),
|
|
1640
1689
|
name: E(),
|
|
1641
1690
|
lifecycle: E(),
|
|
@@ -1651,7 +1700,7 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1651
1700
|
workflowRunId: E().nullable(),
|
|
1652
1701
|
createdAt: _().default("now"),
|
|
1653
1702
|
updatedAt: _().default("now").onUpdate("now")
|
|
1654
|
-
}).index(["lifecycle"]).index(["nextRunAt"]),
|
|
1703
|
+
}).index(["lifecycle"]).index(["nextRunAt"]), La = w("_voltro_migration_plans", {
|
|
1655
1704
|
id: O({ prefix: "plan" }),
|
|
1656
1705
|
fingerprint: E(),
|
|
1657
1706
|
operations: D(),
|
|
@@ -1666,21 +1715,21 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1666
1715
|
appliedAt: _().default("now"),
|
|
1667
1716
|
createdAt: _().default("now"),
|
|
1668
1717
|
updatedAt: _().default("now").onUpdate("now")
|
|
1669
|
-
}).index(["fingerprint"]).index(["environment"]),
|
|
1718
|
+
}).index(["fingerprint"]).index(["environment"]), Ra = w("_voltro_idempotency", {
|
|
1670
1719
|
id: O({ prefix: "idem" }),
|
|
1671
1720
|
scope: E(),
|
|
1672
1721
|
key: E(),
|
|
1673
1722
|
status: E(),
|
|
1674
1723
|
response: D().nullable(),
|
|
1675
1724
|
createdAt: _().default("now")
|
|
1676
|
-
}).unique(["scope", "key"]).index(["createdAt"]),
|
|
1725
|
+
}).unique(["scope", "key"]).index(["createdAt"]), za = w("_voltro_kv", {
|
|
1677
1726
|
id: O({ prefix: "kv" }),
|
|
1678
1727
|
key: E().unique(),
|
|
1679
1728
|
value: E().nullable(),
|
|
1680
1729
|
expiresAt: _().nullable(),
|
|
1681
1730
|
createdAt: _().default("now"),
|
|
1682
1731
|
updatedAt: _().default("now").onUpdate("now")
|
|
1683
|
-
}).index(["expiresAt"]),
|
|
1732
|
+
}).index(["expiresAt"]), Ba = w("_voltro_api_keys", {
|
|
1684
1733
|
id: O({ prefix: "apikey" }),
|
|
1685
1734
|
tenantId: E().nullable(),
|
|
1686
1735
|
name: E(),
|
|
@@ -1695,11 +1744,11 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1695
1744
|
onBehalfOf: E().nullable(),
|
|
1696
1745
|
metadata: D().nullable(),
|
|
1697
1746
|
createdAt: _().default("now")
|
|
1698
|
-
}).index("byTenant", ["tenantId"]),
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
], $ = "id",
|
|
1747
|
+
}).index("byTenant", ["tenantId"]), Va = [
|
|
1748
|
+
Fa,
|
|
1749
|
+
Ia,
|
|
1750
|
+
La
|
|
1751
|
+
], $ = "id", Ha = (e, t) => {
|
|
1703
1752
|
let n = u(e);
|
|
1704
1753
|
if (n === void 0) return t;
|
|
1705
1754
|
let r = n.fields[$]?.idScheme;
|
|
@@ -1714,53 +1763,53 @@ var dt = (e) => e === "mysql" || e === "mariadb" || e === "mssql" || e === "sqli
|
|
|
1714
1763
|
...t,
|
|
1715
1764
|
[$]: i
|
|
1716
1765
|
};
|
|
1717
|
-
},
|
|
1766
|
+
}, Ua = (e, t) => t.map((t) => Ha(e, t)), Wa = (e, t) => {
|
|
1718
1767
|
let n = [], r = t;
|
|
1719
1768
|
for (let [t, i] of Object.entries(e.fields)) {
|
|
1720
1769
|
let e = i;
|
|
1721
1770
|
e.nullable || e.hasDefault || e.idScheme !== void 0 || e.generatedAs !== void 0 || (r[t] === void 0 || r[t] === null) && n.push(t);
|
|
1722
1771
|
}
|
|
1723
1772
|
return n;
|
|
1724
|
-
},
|
|
1773
|
+
}, Ga = (e, t) => {
|
|
1725
1774
|
let n = t;
|
|
1726
1775
|
return e.filter((e) => n[e] === void 0 || n[e] === null);
|
|
1727
|
-
},
|
|
1776
|
+
}, Ka = (e, t, n) => e.insert(t.tableName, n), qa = (e, t, n, r) => e.upsert(t.tableName, n, {
|
|
1728
1777
|
conflictColumns: r.conflictColumns,
|
|
1729
1778
|
...r.update === void 0 ? {} : { update: r.update }
|
|
1730
|
-
}),
|
|
1779
|
+
}), Ja = (e, t, n, r) => e.updateMany(t.tableName, n, { where: r.where }), Ya = 512, Xa = (e) => {
|
|
1731
1780
|
e.setMaxListeners(512);
|
|
1732
|
-
},
|
|
1781
|
+
}, Za = (e, t, n) => ({
|
|
1733
1782
|
_tag: "PrimaryKeyConflictError",
|
|
1734
1783
|
table: e,
|
|
1735
1784
|
key: t,
|
|
1736
1785
|
cause: n
|
|
1737
|
-
}),
|
|
1786
|
+
}), Qa = (e) => typeof e == "object" && !!e && e._tag === "PrimaryKeyConflictError", $a = /* @__PURE__ */ new Map(), eo = (e) => {
|
|
1738
1787
|
if (!e.table || !e.timeColumn) throw Error("registerRetention: table + timeColumn are required");
|
|
1739
1788
|
if (!Number.isFinite(e.ttlMs) || e.ttlMs <= 0) throw Error(`registerRetention(${e.table}): ttlMs must be a positive number`);
|
|
1740
|
-
|
|
1741
|
-
},
|
|
1789
|
+
$a.set(e.table, e);
|
|
1790
|
+
}, to = () => [...$a.values()], no = () => $a.clear(), ro = async (e, t, n, r = 2e4) => {
|
|
1742
1791
|
let i = new Date(t - e.ttlMs), a = 0;
|
|
1743
1792
|
for (;;) {
|
|
1744
1793
|
let t = await n(e.table, e.timeColumn, i, r, e.where);
|
|
1745
1794
|
if (a += t, t < r) break;
|
|
1746
1795
|
}
|
|
1747
1796
|
return a;
|
|
1748
|
-
},
|
|
1797
|
+
}, io = (e, t) => {
|
|
1749
1798
|
let n = Number(e ?? String(t));
|
|
1750
1799
|
return (Number.isFinite(n) && n > 0 ? n : t) * 36e5;
|
|
1751
|
-
},
|
|
1800
|
+
}, ao = "_voltro_cdc_offsets", oo = w(ao, {
|
|
1752
1801
|
id: O({ prefix: "cdcoff" }),
|
|
1753
1802
|
replicaId: E(),
|
|
1754
1803
|
streamName: E(),
|
|
1755
1804
|
binlogFile: E(),
|
|
1756
1805
|
binlogPosition: E(),
|
|
1757
1806
|
updatedAt: _()
|
|
1758
|
-
}).index(["replicaId"]),
|
|
1807
|
+
}).index(["replicaId"]), so = w(ao, {
|
|
1759
1808
|
id: O({ prefix: "cdcoff" }),
|
|
1760
1809
|
replicaId: E(),
|
|
1761
1810
|
streamName: E(),
|
|
1762
1811
|
ctVersion: E(),
|
|
1763
1812
|
updatedAt: _()
|
|
1764
|
-
}).index(["replicaId"]),
|
|
1813
|
+
}).index(["replicaId"]), co = "postgres";
|
|
1765
1814
|
//#endregion
|
|
1766
|
-
export { oe as AUTO_FILLED_COLUMNS, J as BranchNameInvalid,
|
|
1815
|
+
export { oe as AUTO_FILLED_COLUMNS, J as BranchNameInvalid, Ji as BranchTransitionInvalid, ao as CDC_OFFSETS_TABLE, Ya as CHANGE_LISTENER_CEILING, Xe as ColumnBuilder, gt as ENCRYPTED_PREFIX, co as ENGINE, rn as EagerCardinalityError, qe as FILE_MIGRATION_PATTERN, _t as FieldDecryptionError, ni as MATCHES_NO_ROWS, e as MAX_IDENTIFIER_LENGTH, dt as SqlClient, Ii as TableStreamError, vn as TenantNamespaceInvalid, _n as TenantNamespaceUnresolved, ua as TenantRegionUnavailable, la as TenantResidencyUnresolved, xe as WARN_IDENTIFIER_LENGTH, Ba as _voltroApiKeysTable, oo as _voltroCdcOffsetsTable, Ra as _voltroIdempotencyTable, za as _voltroKvTable, La as _voltroMigrationPlansTable, Fa as _voltroMigrationsTable, so as _voltroMssqlCdcOffsetsTable, Ia as _voltroSeedsTable, Hr as actorsTable, sa as admitBranch, ze as allEnumRenames, Kt as allRegisteredRelations, ee as allRegisteredTables, oi as and, be as array, $r as arrayContains, ti as arrayHas, ei as arrayOverlaps, on as attachEagerLoads, Si as attributionFields, Ti as attributionKey, Ca as auditAllTableIndexes, Sa as auditTableIndexes, Me as avg, Ye as avgOver, Ce as bigint, va as bindResidentStore, Ve as boolean, Gi as branchNamespaceName, Fe as bytes, Oi as claimPendingAttribution, Ke as clearEnumRenames, ki as clearPendingAttribution, Jt as clearRelationsRegistry, ma as clearResidencyConfig, no as clearRetentions, v as clearTableRegistry, Ni as clearWriteRecorders, En as coercePredicateValue, Dn as coercePredicateValues, _i as collectSubqueries, ye as column, Ct as columnSchema, zn as compileEagerJson, P as compilePredicate, On as compileRawFragment, F as compileSelect, Vi as computeEmbedding, Zr as contains, Se as count, Be as countDistinct, xi as currentWriteAttribution, Pe as databaseHandle, De as date, Te as dbEnum, fe as decimal, ve as declareEnumRename, en as decodeRowsFromSchema, St as decryptFieldsOnRead, Na as defineMigration, d as defineMixin, Aa as defineSeed, Ee as denseRank, m as deriveTypeIdPrefix, ht as deserializeArraysOnRead, Je as drainIdentifierWarnings, Qe as dropped, nn as encodeRowForSchema, xt as encryptFieldsForWrite, bt as encryptedColumnsOf, ia as enforceBranchLimits, te as ensureTableRegistered, Ur as eq, N as escapeLike, gi as evaluatePredicate, we as except, pi as exists, Oa as formatIndexAuditIssue, Va as frameworkTables, le as generateId, ue as generateSnowflake, nt as geography, ge as geometry, Ne as getEnumRenames, Gt as getRelation, Wt as getRelations, pa as getResidencyConfig, u as getTable, Gr as gt, Kr as gte, gn as hasEagerLoads, Bi as hybridSearch, O as id, Yr as inSet, di as inSubquery, Ft as inferForeignKey, Ka as insertRow, C as integer, de as intersect, a as interval, Ki as isBranchNamespace, yt as isEncrypted, vt as isFieldDecryptionError, Ie as isFileMigration, Pa as isMigrationDefinition, Qi as isNeonConnection, ii as isNotNull, ri as isNull, Qa as isPrimaryKeyConflictError, ga as isRegionServable, jt as isRelationsSpec, ja as isSeedDefinition, rt as isSqliteFamily, p as isTableReactive, pe as isView, D as json, li as jsonField, f as jsonIndex, Ze as lag, tt as lead, to as listRetentions, qr as lt, Jr as lte, ca as makeNamespaceBranchExecutor, Nt as many, Pt as manyToMany, ae as materializeFields, he as max, Ue as migration, et as min, Ga as missingConflictColumns, Wa as missingRequiredColumns, h as mixin, Wr as neq, Yi as nextBranchState, ci as not, mi as notExists, Xr as notInSet, fi as notInSubquery, l as numeric, Mt as one, an as oneCardinalityMessage, si as or, re as paginateBy, i as paginateById, Ai as pendingAttributionCount, na as planBranch, Xi as planBranchProvision, Zi as planBranchTeardown, ra as planBranchTeardownFor, ea as planNeonBranchProvision, ta as planNeonBranchTeardown, Za as primaryKeyConflictError, aa as provisionBranch, ya as provisionResidentTenant, Cn as qualifyTable, $e as queryFor, Re as queryForView, r as quoteIdent, Xa as raiseChangeListenerCeiling, ie as rank, s as raw, x as real, Pi as recordsTable, je as reference, Rr as registerCoreTables, Ut as registerDiscoveredRelations, Di as registerPendingAttribution, Ht as registerRelations, eo as registerRetention, g as registerTable, ji as registerWriteRecorder, At as relations, Br as requireActors, ne as requireTable, Vr as requireTenants, S as resetSnowflake, _a as residentPlacement, $i as resolveBranchMechanism, c as resolveFullTextIndex, ce as resolveIdScheme, He as resolveMixinGraph, ha as resolveTenantHome, Sn as resolveTenantNamespace, io as retentionTtlMsFromEnv, o as rowNumber, wt as rowSchema, bi as runWithWriteAttribution, Fi as runWriteRecorders, xn as sanitizeIdentifierFragment, mt as serializeArraysForWrite, n as serverOnlyColumns, fa as setResidencyConfig, ai as spatialPredicate, Ha as stampGeneratedId, Ua as stampGeneratedIds, Qr as startsWith, zi as streamTable, b as sum, Ae as sumOver, ro as sweepRetention, w as table, oa as teardownBranch, E as text, _ as timestamp, it as timestampMs, at as timestampMsOrNull, t as union, ke as unionAll, Mi as unregisterWriteRecorder, Ja as updateManyRow, qa as upsertRow, Le as validateColumnName, We as validateIndexName, qt as validateRegisteredRelations, zt as validateRelationConfig, Oe as validateTableName, me as validateTypeIdPrefix, y as vector, se as vectorDistanceToOpclass, Hi as vectorEmbedding, Ge as view, _e as viewSql, vi as walkLeaves };
|