@minnowdb/core 0.2.0 → 0.3.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.
Files changed (146) hide show
  1. package/README.md +21 -32
  2. package/dist/engine/artifact-cache.d.ts +2 -0
  3. package/dist/engine/artifact-cache.d.ts.map +1 -1
  4. package/dist/engine/artifact-cache.js +5 -0
  5. package/dist/engine/artifact-cache.js.map +1 -1
  6. package/dist/engine/batch.d.ts +6 -1
  7. package/dist/engine/batch.d.ts.map +1 -1
  8. package/dist/engine/batch.js +17 -6
  9. package/dist/engine/batch.js.map +1 -1
  10. package/dist/engine/catalog.d.ts +22 -2
  11. package/dist/engine/catalog.d.ts.map +1 -1
  12. package/dist/engine/catalog.js +30 -3
  13. package/dist/engine/catalog.js.map +1 -1
  14. package/dist/engine/client.d.ts +3 -0
  15. package/dist/engine/client.d.ts.map +1 -1
  16. package/dist/engine/client.js +21 -10
  17. package/dist/engine/client.js.map +1 -1
  18. package/dist/engine/database.d.ts +71 -5
  19. package/dist/engine/database.d.ts.map +1 -1
  20. package/dist/engine/database.js +3619 -421
  21. package/dist/engine/database.js.map +1 -1
  22. package/dist/engine/defaults.d.ts +4 -7
  23. package/dist/engine/defaults.d.ts.map +1 -1
  24. package/dist/engine/defaults.js +47 -21
  25. package/dist/engine/defaults.js.map +1 -1
  26. package/dist/engine/fts.d.ts.map +1 -1
  27. package/dist/engine/fts.js +2 -0
  28. package/dist/engine/fts.js.map +1 -1
  29. package/dist/engine/index.d.ts +1 -0
  30. package/dist/engine/index.d.ts.map +1 -1
  31. package/dist/engine/index.js +1 -0
  32. package/dist/engine/index.js.map +1 -1
  33. package/dist/engine/live.d.ts +6 -2
  34. package/dist/engine/live.d.ts.map +1 -1
  35. package/dist/engine/live.js +10 -2
  36. package/dist/engine/live.js.map +1 -1
  37. package/dist/engine/optimizer.d.ts.map +1 -1
  38. package/dist/engine/optimizer.js +258 -23
  39. package/dist/engine/optimizer.js.map +1 -1
  40. package/dist/engine/query-cache.d.ts +1 -1
  41. package/dist/engine/query-cache.d.ts.map +1 -1
  42. package/dist/engine/query-cache.js +3 -1
  43. package/dist/engine/query-cache.js.map +1 -1
  44. package/dist/engine/query.d.ts +132 -22
  45. package/dist/engine/query.d.ts.map +1 -1
  46. package/dist/engine/query.js +1368 -246
  47. package/dist/engine/query.js.map +1 -1
  48. package/dist/engine/schema-wire.d.ts +6 -2
  49. package/dist/engine/schema-wire.d.ts.map +1 -1
  50. package/dist/engine/schema-wire.js +40 -33
  51. package/dist/engine/schema-wire.js.map +1 -1
  52. package/dist/engine/schema.d.ts +157 -76
  53. package/dist/engine/schema.d.ts.map +1 -1
  54. package/dist/engine/schema.js +548 -103
  55. package/dist/engine/schema.js.map +1 -1
  56. package/dist/engine/sort-keys.d.ts +4 -3
  57. package/dist/engine/sort-keys.d.ts.map +1 -1
  58. package/dist/engine/sort-keys.js +42 -27
  59. package/dist/engine/sort-keys.js.map +1 -1
  60. package/dist/engine/sql-domains.d.ts +26 -0
  61. package/dist/engine/sql-domains.d.ts.map +1 -0
  62. package/dist/engine/sql-domains.js +421 -0
  63. package/dist/engine/sql-domains.js.map +1 -0
  64. package/dist/engine/sql-driver.d.ts +19 -0
  65. package/dist/engine/sql-driver.d.ts.map +1 -0
  66. package/dist/engine/sql-driver.js +2 -0
  67. package/dist/engine/sql-driver.js.map +1 -0
  68. package/dist/engine/sql-json.d.ts +7 -8
  69. package/dist/engine/sql-json.d.ts.map +1 -1
  70. package/dist/engine/sql-json.js +28 -14
  71. package/dist/engine/sql-json.js.map +1 -1
  72. package/dist/engine/sql-semantics.d.ts +2 -0
  73. package/dist/engine/sql-semantics.d.ts.map +1 -1
  74. package/dist/engine/sql-semantics.js +69 -3
  75. package/dist/engine/sql-semantics.js.map +1 -1
  76. package/dist/engine/vector.d.ts +5 -1
  77. package/dist/engine/vector.d.ts.map +1 -1
  78. package/dist/engine/vector.js +433 -61
  79. package/dist/engine/vector.js.map +1 -1
  80. package/dist/engine/worker-host.d.ts +1 -0
  81. package/dist/engine/worker-host.d.ts.map +1 -1
  82. package/dist/engine/worker-host.js +8 -0
  83. package/dist/engine/worker-host.js.map +1 -1
  84. package/dist/plan/index.d.ts +3 -3
  85. package/dist/plan/index.js +3 -3
  86. package/dist/storage/indexeddb.d.ts +44 -5
  87. package/dist/storage/indexeddb.d.ts.map +1 -1
  88. package/dist/storage/indexeddb.js +738 -175
  89. package/dist/storage/indexeddb.js.map +1 -1
  90. package/dist/storage/memory.d.ts +27 -10
  91. package/dist/storage/memory.d.ts.map +1 -1
  92. package/dist/storage/memory.js +67 -18
  93. package/dist/storage/memory.js.map +1 -1
  94. package/dist/storage/opfs/leader.d.ts +28 -6
  95. package/dist/storage/opfs/leader.d.ts.map +1 -1
  96. package/dist/storage/opfs/leader.js +301 -34
  97. package/dist/storage/opfs/leader.js.map +1 -1
  98. package/dist/storage/opfs/rpc.d.ts.map +1 -1
  99. package/dist/storage/opfs/rpc.js +2 -1
  100. package/dist/storage/opfs/rpc.js.map +1 -1
  101. package/dist/storage/opfs/store.d.ts +34 -5
  102. package/dist/storage/opfs/store.d.ts.map +1 -1
  103. package/dist/storage/opfs/store.js +41 -0
  104. package/dist/storage/opfs/store.js.map +1 -1
  105. package/dist/storage/snapshot.d.ts +14 -0
  106. package/dist/storage/snapshot.d.ts.map +1 -1
  107. package/dist/storage/snapshot.js +44 -0
  108. package/dist/storage/snapshot.js.map +1 -1
  109. package/dist/storage/toolkit/index.d.ts +1 -1
  110. package/dist/storage/toolkit/index.d.ts.map +1 -1
  111. package/dist/storage/toolkit/index.js +1 -1
  112. package/dist/storage/toolkit/index.js.map +1 -1
  113. package/dist/storage/toolkit/record-core.d.ts +19 -5
  114. package/dist/storage/toolkit/record-core.d.ts.map +1 -1
  115. package/dist/storage/toolkit/record-core.js +353 -78
  116. package/dist/storage/toolkit/record-core.js.map +1 -1
  117. package/dist/storage/toolkit/wire.d.ts +15 -0
  118. package/dist/storage/toolkit/wire.d.ts.map +1 -1
  119. package/dist/storage/toolkit/wire.js +134 -0
  120. package/dist/storage/toolkit/wire.js.map +1 -1
  121. package/dist/storage/types.d.ts +213 -31
  122. package/dist/storage/types.d.ts.map +1 -1
  123. package/dist/storage/types.js +291 -20
  124. package/dist/storage/types.js.map +1 -1
  125. package/dist/testing/block-store-conformance.d.ts.map +1 -1
  126. package/dist/testing/block-store-conformance.js +153 -2
  127. package/dist/testing/block-store-conformance.js.map +1 -1
  128. package/dist/testing/index.d.ts +9 -0
  129. package/dist/testing/index.d.ts.map +1 -1
  130. package/dist/testing/index.js +23 -0
  131. package/dist/testing/index.js.map +1 -1
  132. package/dist/testing/simulator.d.ts +98 -0
  133. package/dist/testing/simulator.d.ts.map +1 -0
  134. package/dist/testing/simulator.js +560 -0
  135. package/dist/testing/simulator.js.map +1 -0
  136. package/dist/testing/sqllogictest.d.ts +90 -0
  137. package/dist/testing/sqllogictest.d.ts.map +1 -0
  138. package/dist/testing/sqllogictest.js +435 -0
  139. package/dist/testing/sqllogictest.js.map +1 -0
  140. package/dist/transactions/index.d.ts +18 -3
  141. package/dist/transactions/index.d.ts.map +1 -1
  142. package/dist/transactions/index.js +64 -8
  143. package/dist/transactions/index.js.map +1 -1
  144. package/package.json +5 -3
  145. package/postgres-feature-profile.json +223 -0
  146. package/sql-feature-matrix.json +179 -251
@@ -0,0 +1,421 @@
1
+ /** Internal string encodings for PostgreSQL value domains carried by string vectors. */
2
+ const PREFIX = "\u0000minnow-domain:";
3
+ const TEXT_VALUE = `${PREFIX}text:`;
4
+ const NUMERIC = `${PREFIX}numeric:`;
5
+ const JSON_VALUE = `${PREFIX}json:`;
6
+ const JSONB_VALUE = `${PREFIX}jsonb:`;
7
+ const UUID_VALUE = `${PREFIX}uuid:`;
8
+ const TIME_VALUE = `${PREFIX}time:`;
9
+ const INTERVAL_VALUE = `${PREFIX}interval:`;
10
+ const ARRAY_VALUE = `${PREFIX}array:`;
11
+ const COLLATION_VALUE = `${PREFIX}collation:`;
12
+ const ENUM_VALUE = `${PREFIX}enum:`;
13
+ /**
14
+ * Protects an ordinary SQL string that happens to use the internal domain namespace. Physical
15
+ * TEXT remains unchanged on disk; this wrapper is applied at execution boundaries so a user
16
+ * value can never be mistaken for NUMERIC, INTERVAL, enum, or another tagged logical value.
17
+ */
18
+ export function protectedSqlTextValue(value) {
19
+ return value.startsWith(PREFIX) ? TEXT_VALUE + value : value;
20
+ }
21
+ /** Removes only the ordinary-TEXT wrapper, leaving real domain values tagged. */
22
+ export function externalSqlTextValue(value) {
23
+ return typeof value === "string" && value.startsWith(TEXT_VALUE)
24
+ ? value.slice(TEXT_VALUE.length)
25
+ : value;
26
+ }
27
+ const powersOfTen = [1n];
28
+ function pow10(exponent) {
29
+ if (!Number.isSafeInteger(exponent) || exponent < 0 || exponent > 100_000) {
30
+ throw new RangeError(`Decimal scale is outside the supported range: ${String(exponent)}`);
31
+ }
32
+ for (let index = powersOfTen.length; index <= exponent; index += 1) {
33
+ powersOfTen.push((powersOfTen[index - 1] ?? 1n) * 10n);
34
+ }
35
+ return powersOfTen[exponent] ?? 1n;
36
+ }
37
+ function decimalParts(value) {
38
+ const source = String(value).trim();
39
+ const match = /^([+-]?)(?:(\d+)(?:\.(\d*))?|\.(\d+))(?:[eE]([+-]?\d+))?$/.exec(source);
40
+ if (match === null)
41
+ throw new TypeError(`Invalid NUMERIC value: ${String(value)}`);
42
+ const fraction = match[3] ?? match[4] ?? "";
43
+ const digits = `${match[2] ?? "0"}${fraction}`.replace(/^0+(?=\d)/, "");
44
+ const exponent = Number(match[5] ?? 0);
45
+ if (!Number.isSafeInteger(exponent))
46
+ throw new RangeError(`Invalid NUMERIC exponent: ${source}`);
47
+ let coefficient = BigInt(digits || "0") * (match[1] === "-" ? -1n : 1n);
48
+ let scale = fraction.length - exponent;
49
+ if (scale < 0) {
50
+ coefficient *= pow10(-scale);
51
+ scale = 0;
52
+ }
53
+ return { coefficient, scale };
54
+ }
55
+ function normalizeDecimal(parts) {
56
+ let { coefficient, scale } = parts;
57
+ while (scale > 0 && coefficient % 10n === 0n) {
58
+ coefficient /= 10n;
59
+ scale -= 1;
60
+ }
61
+ return { coefficient, scale };
62
+ }
63
+ function rescaleDecimal(parts, scale) {
64
+ if (!Number.isSafeInteger(scale) || scale < 0 || scale > 100_000) {
65
+ throw new RangeError(`NUMERIC scale is outside the supported range: ${String(scale)}`);
66
+ }
67
+ if (parts.scale <= scale) {
68
+ return { coefficient: parts.coefficient * pow10(scale - parts.scale), scale };
69
+ }
70
+ const divisor = pow10(parts.scale - scale);
71
+ let quotient = parts.coefficient / divisor;
72
+ const remainder = parts.coefficient % divisor;
73
+ if ((remainder < 0n ? -remainder : remainder) * 2n >= divisor) {
74
+ quotient += parts.coefficient < 0n ? -1n : 1n;
75
+ }
76
+ return { coefficient: quotient, scale };
77
+ }
78
+ function formatDecimal(parts) {
79
+ const negative = parts.coefficient < 0n;
80
+ const digits = (negative ? -parts.coefficient : parts.coefficient).toString();
81
+ if (parts.scale === 0)
82
+ return `${negative ? "-" : ""}${digits}`;
83
+ const padded = digits.padStart(parts.scale + 1, "0");
84
+ const split = padded.length - parts.scale;
85
+ return `${negative ? "-" : ""}${padded.slice(0, split)}.${padded.slice(split)}`;
86
+ }
87
+ function taggedDecimalParts(value) {
88
+ if (typeof value !== "string" || !value.startsWith(NUMERIC))
89
+ return undefined;
90
+ return decimalParts(value.slice(NUMERIC.length));
91
+ }
92
+ export function isExactNumeric(value) {
93
+ return taggedDecimalParts(value) !== undefined;
94
+ }
95
+ export function exactNumericValue(value, precision, scale) {
96
+ if (value === null || value === undefined)
97
+ return null;
98
+ const raw = taggedDecimalParts(value) ??
99
+ (typeof value === "number" || typeof value === "string" ? decimalParts(value) : undefined);
100
+ if (raw === undefined)
101
+ throw new TypeError("NUMERIC accepts a number or decimal string");
102
+ const adjusted = scale === undefined ? normalizeDecimal(raw) : rescaleDecimal(raw, scale);
103
+ if (precision !== undefined) {
104
+ if (!Number.isSafeInteger(precision) || precision < 1 || precision > 100_000) {
105
+ throw new RangeError(`NUMERIC precision is outside the supported range: ${String(precision)}`);
106
+ }
107
+ const declaredScale = scale ?? 0;
108
+ if (declaredScale > precision) {
109
+ throw new TypeError("NUMERIC scale cannot exceed its precision");
110
+ }
111
+ const integer = adjusted.coefficient < 0n ? -adjusted.coefficient : adjusted.coefficient;
112
+ const integerDigits = (integer / pow10(adjusted.scale)).toString().length;
113
+ if (integer !== 0n && integerDigits > precision - declaredScale) {
114
+ throw new RangeError(`NUMERIC(${String(precision)}, ${String(declaredScale)}) overflow`);
115
+ }
116
+ }
117
+ return NUMERIC + formatDecimal(normalizeDecimal(adjusted));
118
+ }
119
+ export function exactNumericBinary(operator, left, right) {
120
+ const leftTagged = taggedDecimalParts(left);
121
+ const rightTagged = taggedDecimalParts(right);
122
+ if (leftTagged === undefined && rightTagged === undefined)
123
+ return undefined;
124
+ const a = leftTagged ?? decimalParts(typeof left === "number" ? left : String(left));
125
+ const b = rightTagged ?? decimalParts(typeof right === "number" ? right : String(right));
126
+ if ((operator === "/" || operator === "%") && b.coefficient === 0n)
127
+ return null;
128
+ let result;
129
+ if (operator === "+" || operator === "-") {
130
+ const scale = Math.max(a.scale, b.scale);
131
+ const ac = a.coefficient * pow10(scale - a.scale);
132
+ const bc = b.coefficient * pow10(scale - b.scale);
133
+ result = { coefficient: operator === "+" ? ac + bc : ac - bc, scale };
134
+ }
135
+ else if (operator === "*") {
136
+ result = { coefficient: a.coefficient * b.coefficient, scale: a.scale + b.scale };
137
+ }
138
+ else if (operator === "%") {
139
+ const scale = Math.max(a.scale, b.scale);
140
+ result = {
141
+ coefficient: (a.coefficient * pow10(scale - a.scale)) % (b.coefficient * pow10(scale - b.scale)),
142
+ scale,
143
+ };
144
+ }
145
+ else {
146
+ // PostgreSQL NUMERIC division is arbitrary precision. Twenty fractional digits gives a
147
+ // deterministic exact decimal rounding boundary without ever crossing binary Float64.
148
+ const scale = Math.max(20, a.scale, b.scale);
149
+ const numerator = a.coefficient * pow10(scale + b.scale);
150
+ const denominator = b.coefficient * pow10(a.scale);
151
+ let coefficient = numerator / denominator;
152
+ const remainder = numerator % denominator;
153
+ const magnitude = denominator < 0n ? -denominator : denominator;
154
+ if ((remainder < 0n ? -remainder : remainder) * 2n >= magnitude) {
155
+ coefficient += numerator < 0n !== denominator < 0n ? -1n : 1n;
156
+ }
157
+ result = { coefficient, scale };
158
+ }
159
+ return NUMERIC + formatDecimal(normalizeDecimal(result));
160
+ }
161
+ export function exactNumericCompare(left, right) {
162
+ const leftTagged = taggedDecimalParts(left);
163
+ const rightTagged = taggedDecimalParts(right);
164
+ if (leftTagged === undefined && rightTagged === undefined)
165
+ return undefined;
166
+ const a = leftTagged ??
167
+ (typeof left === "number" || typeof left === "string" ? decimalParts(left) : undefined);
168
+ const b = rightTagged ??
169
+ (typeof right === "number" || typeof right === "string" ? decimalParts(right) : undefined);
170
+ if (a === undefined || b === undefined)
171
+ return undefined;
172
+ const scale = Math.max(a.scale, b.scale);
173
+ const ac = a.coefficient * pow10(scale - a.scale);
174
+ const bc = b.coefficient * pow10(scale - b.scale);
175
+ return ac === bc ? 0 : ac < bc ? -1 : 1;
176
+ }
177
+ function canonicalJson(value) {
178
+ const normalize = (item) => {
179
+ if (item === null || typeof item === "boolean" || typeof item === "string")
180
+ return item;
181
+ if (typeof item === "number") {
182
+ if (!Number.isFinite(item))
183
+ throw new TypeError("JSON numbers must be finite");
184
+ return item;
185
+ }
186
+ if (Array.isArray(item))
187
+ return item.map(normalize);
188
+ if (typeof item === "object") {
189
+ return Object.fromEntries(Object.keys(item)
190
+ .sort()
191
+ .map((key) => [key, normalize(item[key])]));
192
+ }
193
+ throw new TypeError("Value cannot be represented as JSON");
194
+ };
195
+ return JSON.stringify(normalize(value));
196
+ }
197
+ export function jsonDomainValue(value, binary) {
198
+ if (value === null || value === undefined)
199
+ return null;
200
+ let parsed = value;
201
+ if (typeof value === "string") {
202
+ const prefix = value.startsWith(JSONB_VALUE)
203
+ ? JSONB_VALUE
204
+ : value.startsWith(JSON_VALUE)
205
+ ? JSON_VALUE
206
+ : undefined;
207
+ const source = prefix === undefined ? value : value.slice(prefix.length);
208
+ try {
209
+ parsed = JSON.parse(source);
210
+ }
211
+ catch {
212
+ throw new TypeError("Invalid JSON value");
213
+ }
214
+ }
215
+ const text = binary ? canonicalJson(parsed) : JSON.stringify(parsed);
216
+ return (binary ? JSONB_VALUE : JSON_VALUE) + text;
217
+ }
218
+ export function uuidDomainValue(value) {
219
+ if (value === null || value === undefined)
220
+ return null;
221
+ if (typeof value !== "string")
222
+ throw new TypeError("UUID accepts a string value");
223
+ const source = (value.startsWith(UUID_VALUE) ? value.slice(UUID_VALUE.length) : value).toLowerCase();
224
+ if (!/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.test(source)) {
225
+ throw new TypeError(`Invalid UUID value: ${value}`);
226
+ }
227
+ return UUID_VALUE + source;
228
+ }
229
+ export function timeDomainValue(value) {
230
+ if (value === null || value === undefined)
231
+ return null;
232
+ if (typeof value !== "string")
233
+ throw new TypeError("TIME accepts a string value");
234
+ const source = value.startsWith(TIME_VALUE) ? value.slice(TIME_VALUE.length) : value;
235
+ const match = /^(\d{2}):(\d{2})(?::(\d{2})(\.\d{1,6})?)?$/.exec(source);
236
+ const hours = match?.[1];
237
+ const minutes = match?.[2];
238
+ if (match === null ||
239
+ hours === undefined ||
240
+ minutes === undefined ||
241
+ Number(hours) > 23 ||
242
+ Number(minutes) > 59 ||
243
+ Number(match[3] ?? 0) > 59) {
244
+ throw new TypeError(`Invalid TIME value: ${value}`);
245
+ }
246
+ return TIME_VALUE + `${hours}:${minutes}:${match[3] ?? "00"}${match[4] ?? ""}`;
247
+ }
248
+ export function intervalDomainValue(value) {
249
+ if (value === null || value === undefined)
250
+ return null;
251
+ if (typeof value === "string" && value.startsWith(INTERVAL_VALUE))
252
+ return value;
253
+ if (typeof value !== "string")
254
+ throw new TypeError("INTERVAL accepts a string value");
255
+ const source = value.trim();
256
+ let months = 0;
257
+ let days = 0;
258
+ let microseconds = 0;
259
+ let matched = 0;
260
+ const partPattern = /([+-]?\d+(?:\.\d+)?)\s*([a-zA-Z]+)/g;
261
+ const units = new Map([
262
+ ["year", (amount) => (months += amount * 12)],
263
+ ["month", (amount) => (months += amount)],
264
+ ["week", (amount) => (days += amount * 7)],
265
+ ["day", (amount) => (days += amount)],
266
+ ["hour", (amount) => (microseconds += amount * 3_600_000_000)],
267
+ ["minute", (amount) => (microseconds += amount * 60_000_000)],
268
+ ["second", (amount) => (microseconds += amount * 1_000_000)],
269
+ ]);
270
+ for (const part of source.matchAll(partPattern)) {
271
+ const unit = (part[2] ?? "").toLowerCase().replace(/s$/, "");
272
+ const apply = units.get(unit);
273
+ if (apply === undefined)
274
+ throw new TypeError(`Unknown INTERVAL unit: ${unit}`);
275
+ const amount = Number(part[1]);
276
+ if ((unit === "year" || unit === "month" || unit === "week" || unit === "day") &&
277
+ !Number.isInteger(amount)) {
278
+ throw new TypeError(`INTERVAL ${unit} must be a whole number`);
279
+ }
280
+ apply(amount);
281
+ matched += 1;
282
+ }
283
+ const residue = source.replace(partPattern, "").trim();
284
+ if (matched === 0 ||
285
+ residue !== "" ||
286
+ !Number.isSafeInteger(months) ||
287
+ !Number.isSafeInteger(days) ||
288
+ !Number.isSafeInteger(microseconds)) {
289
+ throw new TypeError(`Invalid INTERVAL value: ${value}`);
290
+ }
291
+ return INTERVAL_VALUE + JSON.stringify([months, days, microseconds]);
292
+ }
293
+ export function arrayDomainValue(values) {
294
+ return ARRAY_VALUE + canonicalJson(values.map(externalSqlDomainValue));
295
+ }
296
+ export function enumDomainValue(value, name, values) {
297
+ if (value === null || value === undefined)
298
+ return null;
299
+ if (typeof value !== "string")
300
+ throw new TypeError(`Enum ${name} accepts a string value`);
301
+ const source = value.startsWith(ENUM_VALUE)
302
+ ? JSON.parse(value.slice(ENUM_VALUE.length))[2]
303
+ : value;
304
+ const index = values.indexOf(source);
305
+ if (index === -1)
306
+ throw new TypeError(`${source} is not a value of enum ${name}`);
307
+ return ENUM_VALUE + JSON.stringify([name, index, source]);
308
+ }
309
+ export function enumDomainCompare(left, right) {
310
+ if (typeof left !== "string" ||
311
+ typeof right !== "string" ||
312
+ !left.startsWith(ENUM_VALUE) ||
313
+ !right.startsWith(ENUM_VALUE)) {
314
+ return undefined;
315
+ }
316
+ const a = JSON.parse(left.slice(ENUM_VALUE.length));
317
+ const b = JSON.parse(right.slice(ENUM_VALUE.length));
318
+ if (a[0] !== b[0])
319
+ throw new TypeError("Cannot compare values of different enum types");
320
+ return a[1] - b[1];
321
+ }
322
+ export function normalizeSqlDomainValue(domain, value) {
323
+ if (domain.kind === "numeric") {
324
+ return exactNumericValue(value, domain.precision, domain.scale);
325
+ }
326
+ if (domain.kind === "json")
327
+ return jsonDomainValue(value, false);
328
+ if (domain.kind === "jsonb")
329
+ return jsonDomainValue(value, true);
330
+ if (domain.kind === "uuid")
331
+ return uuidDomainValue(value);
332
+ if (domain.kind === "time")
333
+ return timeDomainValue(value);
334
+ if (domain.kind === "interval")
335
+ return intervalDomainValue(value);
336
+ if (domain.kind === "enum")
337
+ return enumDomainValue(value, domain.name, domain.values);
338
+ if (value === null || value === undefined)
339
+ return null;
340
+ if (typeof value !== "string")
341
+ throw new TypeError("ARRAY columns accept JSON array text");
342
+ const source = value.startsWith(ARRAY_VALUE) ? value.slice(ARRAY_VALUE.length) : value;
343
+ let parsed;
344
+ try {
345
+ parsed = JSON.parse(source);
346
+ }
347
+ catch {
348
+ throw new TypeError("Invalid ARRAY value");
349
+ }
350
+ if (!Array.isArray(parsed))
351
+ throw new TypeError("ARRAY value must be an array");
352
+ return arrayDomainValue(parsed);
353
+ }
354
+ const collators = new Map();
355
+ export function collatedDomainValue(value, collation) {
356
+ if (value === null || value === undefined)
357
+ return null;
358
+ value = externalSqlDomainValue(value);
359
+ if (typeof value !== "string" || typeof collation !== "string") {
360
+ throw new TypeError("COLLATE requires a string value and collation name");
361
+ }
362
+ const locale = collation === "POSIX" ? "C" : collation;
363
+ if (locale !== "C" && !collators.has(locale)) {
364
+ try {
365
+ collators.set(locale, new Intl.Collator(locale, { usage: "sort", sensitivity: "variant" }));
366
+ }
367
+ catch {
368
+ throw new TypeError(`Unsupported collation: ${collation}`);
369
+ }
370
+ }
371
+ return COLLATION_VALUE + JSON.stringify([locale, value]);
372
+ }
373
+ export function collatedDomainCompare(left, right) {
374
+ const decode = (value) => typeof value === "string" && value.startsWith(COLLATION_VALUE)
375
+ ? JSON.parse(value.slice(COLLATION_VALUE.length))
376
+ : undefined;
377
+ const a = decode(left);
378
+ const b = decode(right);
379
+ if (a === undefined && b === undefined)
380
+ return undefined;
381
+ if (a === undefined && typeof left !== "string")
382
+ return undefined;
383
+ if (b === undefined && typeof right !== "string")
384
+ return undefined;
385
+ const locale = a?.[0] ?? b?.[0] ?? "C";
386
+ if ((a !== undefined && a[0] !== locale) || (b !== undefined && b[0] !== locale)) {
387
+ throw new TypeError("Cannot compare values with different collations");
388
+ }
389
+ const leftValue = a?.[1] ?? left;
390
+ const rightValue = b?.[1] ?? right;
391
+ if (locale === "C")
392
+ return leftValue === rightValue ? 0 : leftValue < rightValue ? -1 : 1;
393
+ return (collators.get(locale) ?? new Intl.Collator(locale)).compare(leftValue, rightValue);
394
+ }
395
+ export function externalSqlDomainValue(value) {
396
+ if (typeof value !== "string")
397
+ return value;
398
+ if (value.startsWith(TEXT_VALUE))
399
+ return value.slice(TEXT_VALUE.length);
400
+ for (const prefix of [NUMERIC, JSON_VALUE, JSONB_VALUE, UUID_VALUE, TIME_VALUE]) {
401
+ if (value.startsWith(prefix))
402
+ return value.slice(prefix.length);
403
+ }
404
+ if (value.startsWith(INTERVAL_VALUE)) {
405
+ const decoded = JSON.parse(value.slice(INTERVAL_VALUE.length));
406
+ return `${String(decoded[0])} mons ${String(decoded[1])} days ${String(decoded[2])} usecs`;
407
+ }
408
+ if (value.startsWith(ARRAY_VALUE))
409
+ return value.slice(ARRAY_VALUE.length);
410
+ if (value.startsWith(COLLATION_VALUE)) {
411
+ return JSON.parse(value.slice(COLLATION_VALUE.length))[1];
412
+ }
413
+ if (value.startsWith(ENUM_VALUE)) {
414
+ return JSON.parse(value.slice(ENUM_VALUE.length))[2];
415
+ }
416
+ return value;
417
+ }
418
+ export function isSqlDomainValue(value) {
419
+ return typeof value === "string" && value.startsWith(PREFIX);
420
+ }
421
+ //# sourceMappingURL=sql-domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-domains.js","sourceRoot":"","sources":["../../src/engine/sql-domains.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Catalog } from "./catalog.js";
2
+ import type { ExecuteResult, QueryOptions } from "./database.js";
3
+ import type { QueryResult, QueryValue } from "./query.js";
4
+ /**
5
+ * The stable SQL boundary used by clients and third-party adapters.
6
+ *
7
+ * It is structural: both `MinnowDatabase` and `MinnowDatabaseClient` implement it without a
8
+ * wrapper. Adapters should emit PostgreSQL-style SQL and keep engine-specific APIs outside
9
+ * this small contract.
10
+ */
11
+ export interface MinnowSqlExecutor {
12
+ query(sql: string, options?: QueryOptions): Promise<QueryResult>;
13
+ execute(sql: string, params?: readonly QueryValue[]): Promise<ExecuteResult>;
14
+ }
15
+ /** SQL execution plus the catalog surface schema-aware adapters need. */
16
+ export interface MinnowSqlDriver extends MinnowSqlExecutor {
17
+ introspect(): Promise<Catalog>;
18
+ }
19
+ //# sourceMappingURL=sql-driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-driver.d.ts","sourceRoot":"","sources":["../../src/engine/sql-driver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC9E;AAED,yEAAyE;AACzE,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAChC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sql-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-driver.js","sourceRoot":"","sources":["../../src/engine/sql-driver.ts"],"names":[],"mappings":""}
@@ -1,9 +1,8 @@
1
1
  /**
2
- * The SQL/JSON support the engine keeps (T801 family). Documents are UTF-8 text in ordinary
3
- * string columns, exactly as SQLite stores them: no new logical type, no new storage format,
4
- * and every function below is a scalar over that text. The path language is the subset with an
5
- * unambiguous single result — `$`, member steps, and array subscripts — because the multi-value
6
- * forms need a row-producing operator (JSON_TABLE) the executors do not have.
2
+ * SQL/JSON scalar support (T801 family). Documents may be ordinary JSON text or native JSON/JSONB
3
+ * domain values carried by the string vector representation. Scalar paths take one unambiguous
4
+ * result: `$`, member steps, and array subscripts. JSON_TABLE owns its separate `$`/`$[*]`
5
+ * row-producing subset in the parser.
7
6
  */
8
7
  interface JsonPathStep {
9
8
  kind: "member" | "index";
@@ -21,9 +20,9 @@ export declare function jsonIsValid(document: unknown, kind: string): boolean;
21
20
  /** A SQL value as its JSON counterpart: datetimes serialize as ISO text, like every cast. */
22
21
  export declare function jsonValueOf(value: unknown): unknown;
23
22
  /**
24
- * JSON_ARRAY(v, ...) and JSON_OBJECT(k, v, ...) (T811/T812). Both skip NULL members, which is
25
- * the standard's default (ABSENT ON NULL for objects, NULL ON NULL for arrays is the other
26
- * spelling), and both return JSON text.
23
+ * JSON_ARRAY(v, ...) and JSON_OBJECT(k, v, ...) (T811/T812). The omitted null-handling clause is
24
+ * `NULL ON NULL`: SQL NULL becomes a JSON null. `ABSENT ON NULL` is a separate spelling rather
25
+ * than the default. Constructors return JSON text at the JavaScript boundary.
27
26
  */
28
27
  export declare function jsonConstructor(name: "JSON_ARRAY" | "JSON_OBJECT", values: readonly unknown[]): string;
29
28
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"sql-json.d.ts","sourceRoot":"","sources":["../../src/engine/sql-json.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAiC3E;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CACxB,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAwBrC;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAmBpE;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,GAAG,aAAa,EAClC,MAAM,EAAE,SAAS,OAAO,EAAE,GACzB,MAAM,CAeR"}
1
+ {"version":3,"file":"sql-json.d.ts","sourceRoot":"","sources":["../../src/engine/sql-json.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,UAAU,YAAY;IACpB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAiC3E;AAED,8EAA8E;AAC9E,wBAAgB,UAAU,CACxB,QAAQ,EAAE,OAAO,EACjB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,GACb;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAwBrC;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAoBpE;AAED,6FAA6F;AAC7F,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGnD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,YAAY,GAAG,aAAa,EAClC,MAAM,EAAE,SAAS,OAAO,EAAE,GACzB,MAAM,CAsBR"}
@@ -1,4 +1,5 @@
1
1
  import { stringArgument } from "./sql-semantics.js";
2
+ import { externalSqlDomainValue } from "./sql-domains.js";
2
3
  export function parseJsonPath(path, caller) {
3
4
  const text = stringArgument(caller, path).trim();
4
5
  if (!text.startsWith("$"))
@@ -42,7 +43,7 @@ export function jsonAtPath(document, path, caller) {
42
43
  const steps = parseJsonPath(path, caller);
43
44
  let current;
44
45
  try {
45
- current = JSON.parse(stringArgument(caller, document));
46
+ current = JSON.parse(stringArgument(caller, externalSqlDomainValue(document)));
46
47
  }
47
48
  catch {
48
49
  // A document that is not JSON selects nothing rather than failing the whole statement,
@@ -71,6 +72,7 @@ export function jsonAtPath(document, path, caller) {
71
72
  }
72
73
  /** Whether a value is JSON text of the requested shape (T825). */
73
74
  export function jsonIsValid(document, kind) {
75
+ document = externalSqlDomainValue(document);
74
76
  if (typeof document !== "string")
75
77
  return false;
76
78
  let parsed;
@@ -94,27 +96,39 @@ export function jsonIsValid(document, kind) {
94
96
  }
95
97
  /** A SQL value as its JSON counterpart: datetimes serialize as ISO text, like every cast. */
96
98
  export function jsonValueOf(value) {
97
- return value instanceof Date ? value.toISOString() : value;
99
+ const external = externalSqlDomainValue(value);
100
+ return external instanceof Date ? external.toISOString() : external;
98
101
  }
99
102
  /**
100
- * JSON_ARRAY(v, ...) and JSON_OBJECT(k, v, ...) (T811/T812). Both skip NULL members, which is
101
- * the standard's default (ABSENT ON NULL for objects, NULL ON NULL for arrays is the other
102
- * spelling), and both return JSON text.
103
+ * JSON_ARRAY(v, ...) and JSON_OBJECT(k, v, ...) (T811/T812). The omitted null-handling clause is
104
+ * `NULL ON NULL`: SQL NULL becomes a JSON null. `ABSENT ON NULL` is a separate spelling rather
105
+ * than the default. Constructors return JSON text at the JavaScript boundary.
103
106
  */
104
107
  export function jsonConstructor(name, values) {
105
108
  if (name === "JSON_ARRAY") {
106
- return JSON.stringify(values.filter((value) => value !== null && value !== undefined).map(jsonValueOf));
109
+ return JSON.stringify(values.map((value) => jsonValueOf(value ?? null)));
107
110
  }
108
- const entries = {};
111
+ const members = [];
109
112
  for (let index = 0; index + 1 < values.length; index += 2) {
110
- const key = values[index];
111
- if (typeof key !== "string")
112
- throw new TypeError("JSON_OBJECT keys must be strings");
113
+ const rawKey = values[index];
114
+ if (rawKey === null || rawKey === undefined) {
115
+ throw new TypeError("JSON_OBJECT keys cannot be NULL");
116
+ }
117
+ let key;
118
+ if (rawKey instanceof Date)
119
+ key = rawKey.toISOString();
120
+ else if (typeof rawKey === "string")
121
+ key = rawKey;
122
+ else if (typeof rawKey === "number" || typeof rawKey === "boolean")
123
+ key = String(rawKey);
124
+ else
125
+ throw new TypeError("JSON_OBJECT keys must be scalar values");
113
126
  const member = values[index + 1];
114
- if (member === null || member === undefined)
115
- continue;
116
- entries[key] = jsonValueOf(member);
127
+ // Build JSON text directly. WITHOUT UNIQUE KEYS is the default, so duplicate names must be
128
+ // preserved; assigning through a JavaScript object would collapse them and mishandle
129
+ // special names such as "__proto__".
130
+ members.push(`${JSON.stringify(key)}:${JSON.stringify(jsonValueOf(member ?? null))}`);
117
131
  }
118
- return JSON.stringify(entries);
132
+ return `{${members.join(",")}}`;
119
133
  }
120
134
  //# sourceMappingURL=sql-json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sql-json.js","sourceRoot":"","sources":["../../src/engine/sql-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sql-json.js","sourceRoot":"","sources":["../../src/engine/sql-json.ts"],"names":[],"mappings":"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"}
@@ -20,6 +20,8 @@ export declare function encodeSqlEqualityValue(value: unknown): readonly unknown
20
20
  export declare function roundSqlNumber(value: number, precision?: number): number;
21
21
  /** Compiles SQL LIKE (% = any run, _ = one codepoint) into a bounded cached RegExp. */
22
22
  export declare function compileLikePattern(pattern: string, caseInsensitive?: boolean, escape?: string): RegExp;
23
+ /** PostgreSQL SIMILAR TO: SQL wildcards plus the SQL regular-expression operators, whole-string. */
24
+ export declare function compileSimilarPattern(pattern: string, escape?: string): RegExp;
23
25
  /** Defines an own enumerable result-column property, including the special name `__proto__`. */
24
26
  export declare function defineSqlResultProperty(target: Record<string, unknown>, name: string, value: unknown): void;
25
27
  /**