@sqlbraid/core 0.1.0-rc.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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/index.d.ts +735 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +475 -0
- package/dist/index.js.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":"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mBAAmB,UAAU,6BAA6B,UAAU,mBAAmB,QAAQ,qBAAqB;EACzI,OAAO,KAAK,UAAU,mBAAmB,UAAU,6BAA6B,UAAU,mBAAmB,cAAc;EAC3H,KAAK,UAAU,mBAAmB,UAAU,6BAA6B,UAAU,mBAAmB,QAAQ;EAC9G,MAAM,MAAM,cAAc,SAAS,wBAAwB,UAAU,mBAAmB,QAAQ;EAChG,OAAO,UAAU,qBAAqB;EACtC,WAAW;EACX,aAAa;EACb,WAAW,eAAe;EAC1B,YAAY,eAAe;EAC3B,kBAAkB,eAAe;;iBAGlB,wBAAwB;EACvC,QAAQ;aAAqB;aAA6B;;iBAG3C;WACN,kBAAkB;WAClB,cAAc;EACvB,WAAW,QAAQ;;iBAGJ;WACN;WACA;WACA,WAAW;WACX,OAAO;;iBAGD;WACN;WACA;WACA;WACA;WACA;WACA;WACA;aACE;aACA;aACA,YAAY;aACZ;;WAEF,2BAA2B;WAC3B,WAAW;WACX,iBAAiB,UAAU,sBAAsB;WACjD,cAAc;WACd;WACA;WACA;WACA;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA,UAAU,SAAS;WACnB;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA,WAAW;WACX,iBAAiB,eAAe,UAAU,sBAAsB;;iBAG1D;WACN;WACA;WACA;WACA;WACA,eAAe;WACf;WACA;WACA;;YAGC;iBAgBK;WACN;WACA;WACA;WACA;WACA;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;aACE;aACA;aACA,YAAY;aACZ;;WAEF,2BAA2B;WAC3B,WAAW;WACX,iBAAiB,UAAU,sBAAsB;WACjD;WACA;WACA;WACA;WACA;;iBAGM;WACN;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;YAGC;iBAQK;WACN;WACA;WACA,OAAO;WACP;WACA;WACA;WACA;WACA;;YAGC,iBACR,kBACA,mBACA,mBACA,iBACA,kBAC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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
//#region src/index.ts
|
|
2
|
+
const SQL_FRAGMENT = Symbol.for("sqlbraid.fragment");
|
|
3
|
+
const SQL_BOUND_PARAMETER = Symbol.for("sqlbraid.bound-parameter");
|
|
4
|
+
const knownBoundParameters = /* @__PURE__ */ new WeakSet();
|
|
5
|
+
const SQL_ROUTINE_PARAMETER = Symbol.for("sqlbraid.routine-parameter");
|
|
6
|
+
const knownRoutineParameters = /* @__PURE__ */ new WeakSet();
|
|
7
|
+
var ResultExactnessError = class extends Error {
|
|
8
|
+
code = "BRAID_RESULT_EXACTNESS";
|
|
9
|
+
constructor(message = "Result value does not have an exact representation.") {
|
|
10
|
+
super(message);
|
|
11
|
+
this.name = "ResultExactnessError";
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
function exactnessFailure(message) {
|
|
15
|
+
throw new ResultExactnessError(message);
|
|
16
|
+
}
|
|
17
|
+
function decodeExactInteger(value, range) {
|
|
18
|
+
let result;
|
|
19
|
+
if (typeof value === "bigint") result = value;
|
|
20
|
+
else if (typeof value === "string" && /^[+-]?\d+$/u.test(value)) try {
|
|
21
|
+
result = BigInt(value);
|
|
22
|
+
} catch {
|
|
23
|
+
return exactnessFailure("Result value does not have an exact integer representation.");
|
|
24
|
+
}
|
|
25
|
+
else if (typeof value === "number" && Number.isSafeInteger(value)) result = BigInt(value);
|
|
26
|
+
else return exactnessFailure("Result value does not have an exact integer representation.");
|
|
27
|
+
if (range !== void 0) {
|
|
28
|
+
if (range.min !== void 0 && typeof range.min !== "bigint" || range.max !== void 0 && typeof range.max !== "bigint" || range.min !== void 0 && range.max !== void 0 && range.min > range.max) throw new TypeError("Exact integer range bounds must be ordered bigint values.");
|
|
29
|
+
if (range.min !== void 0 && result < range.min) return exactnessFailure("Result exact integer is below the configured minimum.");
|
|
30
|
+
if (range.max !== void 0 && result > range.max) return exactnessFailure("Result exact integer is above the configured maximum.");
|
|
31
|
+
}
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Normalize an exact integer at the raw SQLBraid boundary without changing
|
|
36
|
+
* its textual spelling. This is intentionally not a bigint decoder: callers
|
|
37
|
+
* that need arithmetic may opt in to decodeExactInteger().
|
|
38
|
+
*/
|
|
39
|
+
function normalizeExactInteger(value) {
|
|
40
|
+
if (typeof value === "string" && /^[+-]?\d+$/u.test(value)) return value;
|
|
41
|
+
if (typeof value === "bigint") return value.toString(10);
|
|
42
|
+
if (typeof value === "number" && Number.isSafeInteger(value)) return String(value);
|
|
43
|
+
return exactnessFailure("Result value does not have an exact integer representation.");
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Convert a database-reported count to a safe operational Number. Counts are
|
|
47
|
+
* not application values, so unlike exact SQL numerics they remain numbers,
|
|
48
|
+
* but narrowing an unsafe value is never implicit.
|
|
49
|
+
*/
|
|
50
|
+
function safeDatabaseCount(value) {
|
|
51
|
+
if (typeof value === "number") {
|
|
52
|
+
if (Number.isSafeInteger(value) && value >= 0) return value === 0 ? 0 : value;
|
|
53
|
+
return exactnessFailure("Database count is not a safe non-negative integer.");
|
|
54
|
+
}
|
|
55
|
+
if (typeof value === "bigint") {
|
|
56
|
+
if (value < 0n || value > BigInt(Number.MAX_SAFE_INTEGER)) return exactnessFailure("Database count is not a safe non-negative integer.");
|
|
57
|
+
return Number(value);
|
|
58
|
+
}
|
|
59
|
+
if (typeof value === "string" && /^[+]?\d+$/u.test(value)) try {
|
|
60
|
+
const count = BigInt(value);
|
|
61
|
+
if (count >= 0n && count <= BigInt(Number.MAX_SAFE_INTEGER)) return Number(count);
|
|
62
|
+
} catch {}
|
|
63
|
+
return exactnessFailure("Database count is not a safe non-negative integer.");
|
|
64
|
+
}
|
|
65
|
+
function decodeExactDecimal(value, options) {
|
|
66
|
+
if (typeof value === "string") return value;
|
|
67
|
+
if (typeof value === "bigint" && options?.allowBigInt === true) return value.toString();
|
|
68
|
+
return exactnessFailure("Result value does not have an exact decimal representation.");
|
|
69
|
+
}
|
|
70
|
+
function validHintNumber(value) {
|
|
71
|
+
return typeof value === "number" && Number.isFinite(value) && Number.isInteger(value) && value >= 0;
|
|
72
|
+
}
|
|
73
|
+
function validHintInteger(value) {
|
|
74
|
+
return typeof value === "number" && Number.isFinite(value) && Number.isInteger(value);
|
|
75
|
+
}
|
|
76
|
+
function isParameterTypeHint(value) {
|
|
77
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
78
|
+
const candidate = value;
|
|
79
|
+
return typeof candidate.databaseType === "string" && candidate.databaseType.trim().length > 0 && (candidate.length === void 0 || candidate.length === "max" || validHintNumber(candidate.length)) && (candidate.precision === void 0 || validHintNumber(candidate.precision)) && (candidate.scale === void 0 || validHintInteger(candidate.scale));
|
|
80
|
+
}
|
|
81
|
+
function createParameterTypeHint(hint) {
|
|
82
|
+
if (!isParameterTypeHint(hint)) throw new TypeError("sql.bind hint must be an object with valid structural fields.");
|
|
83
|
+
const candidate = hint;
|
|
84
|
+
if (typeof candidate.databaseType !== "string" || !candidate.databaseType.trim()) throw new TypeError("sql.bind hint databaseType must be a non-empty string.");
|
|
85
|
+
if (candidate.length !== void 0 && candidate.length !== "max" && !validHintNumber(candidate.length)) throw new TypeError("sql.bind hint length must be a non-negative integer or \"max\".");
|
|
86
|
+
if (candidate.precision !== void 0 && !validHintNumber(candidate.precision)) throw new TypeError("sql.bind hint precision must be a non-negative integer.");
|
|
87
|
+
if (candidate.scale !== void 0 && !validHintInteger(candidate.scale)) throw new TypeError("sql.bind hint scale must be an integer.");
|
|
88
|
+
const normalized = {
|
|
89
|
+
databaseType: candidate.databaseType,
|
|
90
|
+
...candidate.length === void 0 ? {} : { length: candidate.length },
|
|
91
|
+
...candidate.precision === void 0 ? {} : { precision: candidate.precision },
|
|
92
|
+
...candidate.scale === void 0 ? {} : { scale: candidate.scale }
|
|
93
|
+
};
|
|
94
|
+
return Object.freeze(normalized);
|
|
95
|
+
}
|
|
96
|
+
function createBoundParameter(value, hint) {
|
|
97
|
+
const normalizedHint = createParameterTypeHint(hint);
|
|
98
|
+
const bound = Object.freeze({
|
|
99
|
+
value,
|
|
100
|
+
hint: normalizedHint,
|
|
101
|
+
[SQL_BOUND_PARAMETER]: true
|
|
102
|
+
});
|
|
103
|
+
knownBoundParameters.add(bound);
|
|
104
|
+
return bound;
|
|
105
|
+
}
|
|
106
|
+
function isBoundParameter(value) {
|
|
107
|
+
if (typeof value !== "object" || value === null || !knownBoundParameters.has(value) || !Object.hasOwn(value, SQL_BOUND_PARAMETER)) return false;
|
|
108
|
+
const candidate = value;
|
|
109
|
+
return candidate[SQL_BOUND_PARAMETER] === true && Object.hasOwn(candidate, "value") && isParameterTypeHint(candidate.hint);
|
|
110
|
+
}
|
|
111
|
+
function normalizeOutputName(name) {
|
|
112
|
+
if (typeof name !== "string" || !name.trim()) throw new TypeError("Routine outputName must be a non-empty string.");
|
|
113
|
+
return name;
|
|
114
|
+
}
|
|
115
|
+
function createRoutineOutParameter(name, hint) {
|
|
116
|
+
const normalizedHint = hint === void 0 ? void 0 : createParameterTypeHint(hint);
|
|
117
|
+
const parameter = Object.freeze({
|
|
118
|
+
value: null,
|
|
119
|
+
direction: "out",
|
|
120
|
+
outputName: normalizeOutputName(name),
|
|
121
|
+
...normalizedHint === void 0 ? {} : { hint: normalizedHint },
|
|
122
|
+
[SQL_ROUTINE_PARAMETER]: true
|
|
123
|
+
});
|
|
124
|
+
knownRoutineParameters.add(parameter);
|
|
125
|
+
return parameter;
|
|
126
|
+
}
|
|
127
|
+
function createRoutineInOutParameter(name, value, hint) {
|
|
128
|
+
const normalizedHint = hint === void 0 ? void 0 : createParameterTypeHint(hint);
|
|
129
|
+
const parameter = Object.freeze({
|
|
130
|
+
value,
|
|
131
|
+
direction: "inout",
|
|
132
|
+
outputName: normalizeOutputName(name),
|
|
133
|
+
...normalizedHint === void 0 ? {} : { hint: normalizedHint },
|
|
134
|
+
[SQL_ROUTINE_PARAMETER]: true
|
|
135
|
+
});
|
|
136
|
+
knownRoutineParameters.add(parameter);
|
|
137
|
+
return parameter;
|
|
138
|
+
}
|
|
139
|
+
function isRoutineParameter(value) {
|
|
140
|
+
if (typeof value !== "object" || value === null || Array.isArray(value) || !knownRoutineParameters.has(value)) return false;
|
|
141
|
+
const candidate = value;
|
|
142
|
+
return candidate[SQL_ROUTINE_PARAMETER] === true && Object.hasOwn(candidate, "value") && (candidate.direction === "out" || candidate.direction === "inout") && typeof candidate.outputName === "string" && Boolean(candidate.outputName.trim()) && (candidate.hint === void 0 || isParameterTypeHint(candidate.hint));
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Normalize and snapshot a homogeneous bulk's logical statement and value
|
|
146
|
+
* matrix. Values themselves are application-owned and are not cloned.
|
|
147
|
+
*/
|
|
148
|
+
function createRenderedBulk(bulk) {
|
|
149
|
+
if (bulk === null || typeof bulk !== "object" || Array.isArray(bulk)) throw new TypeError("RenderedBulk must be an object.");
|
|
150
|
+
const statement = createRenderedStatement(bulk.statement);
|
|
151
|
+
if (!Array.isArray(bulk.parameterSets)) throw new TypeError("RenderedBulk parameterSets must be an array.");
|
|
152
|
+
const parameterCount = statement.parameters.length;
|
|
153
|
+
const parameterSets = Object.freeze(bulk.parameterSets.map((values) => {
|
|
154
|
+
if (!Array.isArray(values) || values.length !== parameterCount) throw new TypeError("RenderedBulk parameter sets must match the rendered parameter count.");
|
|
155
|
+
for (let index = 0; index < values.length; index += 1) if (values[index] === void 0 && statement.parameters[index]?.direction !== "out") throw new SqlRenderError("BRAID_BIND_VALUE_UNSUPPORTED", "Undefined bind values are unsupported; use null for SQL NULL.");
|
|
156
|
+
return Object.isFrozen(values) ? values : Object.freeze([...values]);
|
|
157
|
+
}));
|
|
158
|
+
return Object.freeze({
|
|
159
|
+
statement,
|
|
160
|
+
parameterSets
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
const knownRenderedStatements = /* @__PURE__ */ new WeakSet();
|
|
164
|
+
function copyRenderedParameter(parameter) {
|
|
165
|
+
if (typeof parameter !== "object" || parameter === null || Array.isArray(parameter)) throw new TypeError("RenderedStatement parameters must be parameter records.");
|
|
166
|
+
const candidate = parameter;
|
|
167
|
+
if (!Object.hasOwn(candidate, "value")) throw new TypeError("RenderedStatement parameters must contain a value.");
|
|
168
|
+
const interpolation = candidate.interpolation;
|
|
169
|
+
if (interpolation !== void 0 && !validHintNumber(interpolation)) throw new TypeError("RenderedStatement parameter interpolation must be a non-negative integer.");
|
|
170
|
+
const hint = candidate.hint === void 0 ? void 0 : createParameterTypeHint(candidate.hint);
|
|
171
|
+
const direction = candidate.direction;
|
|
172
|
+
if (direction !== void 0 && direction !== "in" && direction !== "out" && direction !== "inout") throw new TypeError("RenderedStatement parameter direction is unsupported.");
|
|
173
|
+
const outputName = candidate.outputName;
|
|
174
|
+
if (outputName !== void 0 && (typeof outputName !== "string" || !outputName.trim())) throw new TypeError("RenderedStatement parameter outputName must be a non-empty string.");
|
|
175
|
+
if ((direction === "out" || direction === "inout") && outputName === void 0) throw new TypeError("RenderedStatement OUT and INOUT parameters require an outputName.");
|
|
176
|
+
if (outputName !== void 0 && (direction === void 0 || direction === "in")) throw new TypeError("RenderedStatement parameter outputName requires an OUT or INOUT direction.");
|
|
177
|
+
if (candidate.value === void 0 && direction !== "out") throw new SqlRenderError("BRAID_BIND_VALUE_UNSUPPORTED", "Undefined bind values are unsupported; use null for SQL NULL.");
|
|
178
|
+
return Object.freeze({
|
|
179
|
+
value: candidate.value,
|
|
180
|
+
...interpolation === void 0 ? {} : { interpolation },
|
|
181
|
+
...hint === void 0 ? {} : { hint },
|
|
182
|
+
...direction === void 0 ? {} : { direction },
|
|
183
|
+
...outputName === void 0 ? {} : { outputName }
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
function copyRoutineProcedure(procedure) {
|
|
187
|
+
if (procedure === void 0) return void 0;
|
|
188
|
+
if (typeof procedure !== "object" || procedure === null || typeof procedure.name !== "string" || !procedure.name.trim()) throw new TypeError("Routine procedure name must be a non-empty string.");
|
|
189
|
+
if (!Array.isArray(procedure.parameterNames)) throw new TypeError("Routine procedure parameterNames must be an array.");
|
|
190
|
+
const parameterNames = procedure.parameterNames.map((name) => {
|
|
191
|
+
if (typeof name !== "string" || !name.trim()) throw new TypeError("Routine procedure parameterNames must contain non-empty strings.");
|
|
192
|
+
return name;
|
|
193
|
+
});
|
|
194
|
+
if (new Set(parameterNames).size !== parameterNames.length) throw new TypeError("Routine procedure parameterNames must be unique.");
|
|
195
|
+
return Object.freeze({
|
|
196
|
+
name: procedure.name,
|
|
197
|
+
parameterNames: Object.freeze(parameterNames)
|
|
198
|
+
});
|
|
199
|
+
}
|
|
200
|
+
function createRenderedStatement(statement) {
|
|
201
|
+
if (typeof statement !== "object" || statement === null) throw new TypeError("RenderedStatement must be an object.");
|
|
202
|
+
if (knownRenderedStatements.has(statement)) return statement;
|
|
203
|
+
if (!Array.isArray(statement.segments)) throw new TypeError("RenderedStatement segments must be an array of strings.");
|
|
204
|
+
if (!Array.isArray(statement.parameters)) throw new TypeError("RenderedStatement parameters must be an array.");
|
|
205
|
+
if (statement.segments.length !== statement.parameters.length + 1) throw new TypeError("RenderedStatement invariant violated: segments.length must equal parameters.length + 1.");
|
|
206
|
+
if (statement.resultKind !== "call" && statement.routineProcedure !== void 0) throw new TypeError("Routine procedure metadata is only valid for call statements.");
|
|
207
|
+
if (typeof statement.dialectId !== "string" || !statement.dialectId) throw new TypeError("RenderedStatement dialectId must be a non-empty string.");
|
|
208
|
+
const segments = Object.freeze([...statement.segments]);
|
|
209
|
+
if (segments.some((segment) => typeof segment !== "string")) throw new TypeError("RenderedStatement segments must be an array of strings.");
|
|
210
|
+
const parameters = Object.freeze(Array.from(statement.parameters, copyRenderedParameter));
|
|
211
|
+
if (parameters.some((parameter) => parameter.direction === "inout" && statement.resultKind !== "call")) throw new TypeError("INOUT parameters are only valid for call statements.");
|
|
212
|
+
if (parameters.some((parameter) => parameter.direction === "out" && statement.resultKind !== "call" && statement.resultKind !== "rows")) throw new TypeError("OUT parameters are only valid for call and rows statements.");
|
|
213
|
+
const outputNames = /* @__PURE__ */ new Set();
|
|
214
|
+
for (const parameter of parameters) if (parameter.outputName !== void 0) {
|
|
215
|
+
if (outputNames.has(parameter.outputName)) throw new TypeError(`Duplicate routine outputName: ${parameter.outputName}`);
|
|
216
|
+
outputNames.add(parameter.outputName);
|
|
217
|
+
}
|
|
218
|
+
const routineProcedure = copyRoutineProcedure(statement.routineProcedure);
|
|
219
|
+
if (routineProcedure !== void 0 && routineProcedure.parameterNames.length !== parameters.length) throw new TypeError("Routine procedure parameterNames must match the rendered parameter count.");
|
|
220
|
+
const rendered = Object.freeze({
|
|
221
|
+
segments,
|
|
222
|
+
parameters,
|
|
223
|
+
dialectId: statement.dialectId,
|
|
224
|
+
resultKind: statement.resultKind,
|
|
225
|
+
...routineProcedure === void 0 ? {} : { routineProcedure },
|
|
226
|
+
...statement.fingerprint === void 0 ? {} : { fingerprint: statement.fingerprint },
|
|
227
|
+
...statement.variantFingerprint === void 0 ? {} : { variantFingerprint: statement.variantFingerprint }
|
|
228
|
+
});
|
|
229
|
+
knownRenderedStatements.add(rendered);
|
|
230
|
+
return rendered;
|
|
231
|
+
}
|
|
232
|
+
function parameterizedSql(statement, placeholder) {
|
|
233
|
+
const parts = [statement.segments[0] ?? ""];
|
|
234
|
+
for (let index = 0; index < statement.parameters.length; index += 1) parts.push(placeholder(index + 1), statement.segments[index + 1] ?? "");
|
|
235
|
+
return parts.join("");
|
|
236
|
+
}
|
|
237
|
+
function genericLiteral(parameter, dialectId, binary) {
|
|
238
|
+
const value = parameter.value;
|
|
239
|
+
if (value === null) return "NULL";
|
|
240
|
+
if (value === void 0) return "[undefined]";
|
|
241
|
+
if (typeof value === "string") return `'${value.replaceAll("'", "''")}'`;
|
|
242
|
+
if (typeof value === "boolean") {
|
|
243
|
+
if (/^(?:mysql|sqlite)/i.test(dialectId) || /^(?:oracle|mssql|sqlserver)/i.test(dialectId)) return value ? "1" : "0";
|
|
244
|
+
if (/^(?:postgres|postgresql|cockroach|redshift)/i.test(dialectId)) return value ? "TRUE" : "FALSE";
|
|
245
|
+
return `[boolean ${value ? "true" : "false"}]`;
|
|
246
|
+
}
|
|
247
|
+
if (typeof value === "number") return Number.isFinite(value) ? String(value) : `[unsupported ${String(value)}]`;
|
|
248
|
+
if (typeof value === "bigint") return value.toString();
|
|
249
|
+
if (value instanceof Date) try {
|
|
250
|
+
const timestamp = Date.prototype.getTime.call(value);
|
|
251
|
+
return Number.isNaN(timestamp) ? "[unsupported date]" : `[date ${Date.prototype.toISOString.call(value)}]`;
|
|
252
|
+
} catch {
|
|
253
|
+
return "[unsupported date]";
|
|
254
|
+
}
|
|
255
|
+
if (value instanceof Uint8Array) try {
|
|
256
|
+
if (binary === "full") {
|
|
257
|
+
let hex = "";
|
|
258
|
+
for (const byte of value) hex += byte.toString(16).padStart(2, "0");
|
|
259
|
+
return `X'${hex}'`;
|
|
260
|
+
}
|
|
261
|
+
return `[binary ${value.byteLength} bytes]`;
|
|
262
|
+
} catch {
|
|
263
|
+
return "[unsupported binary]";
|
|
264
|
+
}
|
|
265
|
+
if (typeof value === "object") return "[unsupported object]";
|
|
266
|
+
return `[unsupported ${typeof value}]`;
|
|
267
|
+
}
|
|
268
|
+
function literalized(statement, dialectId, formatLiteral, options) {
|
|
269
|
+
const resolved = options ?? {};
|
|
270
|
+
const valuesMode = resolved.values ?? "redacted";
|
|
271
|
+
const maxLength = resolved.maxValueLength;
|
|
272
|
+
if (valuesMode !== "inline" && valuesMode !== "redacted") throw new TypeError("literalizedSql values must be \"inline\" or \"redacted\".");
|
|
273
|
+
if (maxLength !== void 0 && (!Number.isSafeInteger(maxLength) || maxLength < 0)) throw new TypeError("literalizedSql maxValueLength must be a non-negative integer.");
|
|
274
|
+
const binary = resolved.binary ?? "summary";
|
|
275
|
+
if (binary !== "summary" && binary !== "full") throw new TypeError("literalizedSql binary must be \"summary\" or \"full\".");
|
|
276
|
+
if (resolved.redact !== void 0 && typeof resolved.redact !== "function") throw new TypeError("literalizedSql redact must be a function.");
|
|
277
|
+
const parts = [statement.segments[0] ?? ""];
|
|
278
|
+
let redactedParameters = 0;
|
|
279
|
+
let truncatedParameters = 0;
|
|
280
|
+
for (let index = 0; index < statement.parameters.length; index += 1) {
|
|
281
|
+
const parameter = statement.parameters[index];
|
|
282
|
+
const redact = valuesMode === "redacted" || resolved.redact?.(parameter, index) === true;
|
|
283
|
+
let valueText;
|
|
284
|
+
if (redact) {
|
|
285
|
+
valueText = "[REDACTED]";
|
|
286
|
+
redactedParameters += 1;
|
|
287
|
+
} else valueText = formatLiteral?.(parameter, index, resolved) ?? genericLiteral(parameter, dialectId, binary);
|
|
288
|
+
if (maxLength !== void 0 && valueText.length > maxLength) {
|
|
289
|
+
valueText = maxLength === 0 ? "" : valueText.slice(0, maxLength);
|
|
290
|
+
truncatedParameters += 1;
|
|
291
|
+
}
|
|
292
|
+
parts.push(valueText, statement.segments[index + 1] ?? "");
|
|
293
|
+
}
|
|
294
|
+
return Object.freeze({
|
|
295
|
+
text: parts.join(""),
|
|
296
|
+
complete: truncatedParameters === 0,
|
|
297
|
+
redactedParameters,
|
|
298
|
+
truncatedParameters
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
function createStatementBindingDescription(statement, context, options) {
|
|
302
|
+
const logical = createRenderedStatement(statement);
|
|
303
|
+
const adapterId = options.adapterId;
|
|
304
|
+
const transport = options.transport;
|
|
305
|
+
const placeholder = options.placeholder;
|
|
306
|
+
const formatLiteral = options.formatLiteral;
|
|
307
|
+
const effective = options.reuse.effective;
|
|
308
|
+
const owner = options.reuse.owner;
|
|
309
|
+
const capacity = options.reuse.capacity;
|
|
310
|
+
const dialectId = context.dialectId;
|
|
311
|
+
const requestedReuse = context.requestedReuse;
|
|
312
|
+
if (logical.dialectId !== dialectId) throw new TypeError(`BRAID_DIALECT: statement binding dialect ${dialectId} does not match rendered statement dialect ${logical.dialectId}.`);
|
|
313
|
+
if (typeof adapterId !== "string" || !adapterId) throw new TypeError("Statement binding adapterId must be a non-empty string.");
|
|
314
|
+
if (typeof dialectId !== "string" || !dialectId) throw new TypeError("Statement binding dialectId must be a non-empty string.");
|
|
315
|
+
if (![
|
|
316
|
+
"native-value-template",
|
|
317
|
+
"text-positional",
|
|
318
|
+
"text-named",
|
|
319
|
+
"typed-request"
|
|
320
|
+
].includes(transport)) throw new TypeError("Statement binding transport is unsupported.");
|
|
321
|
+
if (transport !== "native-value-template" && placeholder === void 0) throw new TypeError("Text and typed statement transports require a placeholder function.");
|
|
322
|
+
if (![
|
|
323
|
+
"auto",
|
|
324
|
+
"simple",
|
|
325
|
+
"reuse"
|
|
326
|
+
].includes(requestedReuse)) throw new TypeError("Statement binding requestedReuse is unsupported.");
|
|
327
|
+
if (!["simple", "reuse"].includes(effective) || ![
|
|
328
|
+
"sqlbraid",
|
|
329
|
+
"driver",
|
|
330
|
+
"server"
|
|
331
|
+
].includes(owner)) throw new TypeError("Statement binding reuse policy is unsupported.");
|
|
332
|
+
if (capacity !== void 0 && (!Number.isSafeInteger(capacity) || capacity < 0)) throw new TypeError("Statement binding reuse capacity must be a non-negative safe integer.");
|
|
333
|
+
if (placeholder !== void 0 && typeof placeholder !== "function") throw new TypeError("Statement binding placeholder must be a function.");
|
|
334
|
+
const bindings = Object.freeze(logical.parameters.map((parameter, offset) => Object.freeze({
|
|
335
|
+
index: offset + 1,
|
|
336
|
+
...parameter.outputName === void 0 ? {} : {
|
|
337
|
+
name: parameter.outputName,
|
|
338
|
+
outputName: parameter.outputName
|
|
339
|
+
},
|
|
340
|
+
...parameter.interpolation === void 0 ? {} : { interpolation: parameter.interpolation },
|
|
341
|
+
...parameter.hint === void 0 ? {} : { hint: createParameterTypeHint(parameter.hint) },
|
|
342
|
+
...parameter.direction === void 0 ? {} : { direction: parameter.direction }
|
|
343
|
+
})));
|
|
344
|
+
const reuse = Object.freeze({
|
|
345
|
+
requested: requestedReuse,
|
|
346
|
+
effective,
|
|
347
|
+
owner,
|
|
348
|
+
...capacity === void 0 ? {} : { capacity }
|
|
349
|
+
});
|
|
350
|
+
let parameterizedReady = false;
|
|
351
|
+
let parameterized;
|
|
352
|
+
const literalCache = /* @__PURE__ */ new Map();
|
|
353
|
+
let defaultLiteralized;
|
|
354
|
+
const description = {
|
|
355
|
+
adapterId,
|
|
356
|
+
dialectId,
|
|
357
|
+
transport,
|
|
358
|
+
bindings,
|
|
359
|
+
reuse,
|
|
360
|
+
literalizedSql: (literalOptions) => {
|
|
361
|
+
if (literalOptions === void 0) {
|
|
362
|
+
if (defaultLiteralized === void 0) defaultLiteralized = literalized(logical, dialectId, formatLiteral, void 0);
|
|
363
|
+
return defaultLiteralized;
|
|
364
|
+
}
|
|
365
|
+
if (typeof literalOptions !== "object" || literalOptions === null) throw new TypeError("literalizedSql options must be an object.");
|
|
366
|
+
const values = literalOptions.values;
|
|
367
|
+
const binary = literalOptions.binary;
|
|
368
|
+
const maxValueLength = literalOptions.maxValueLength;
|
|
369
|
+
const redact = literalOptions.redact;
|
|
370
|
+
const snapshot = Object.freeze({
|
|
371
|
+
...values === void 0 ? {} : { values },
|
|
372
|
+
...binary === void 0 ? {} : { binary },
|
|
373
|
+
...maxValueLength === void 0 ? {} : { maxValueLength },
|
|
374
|
+
...redact === void 0 ? {} : { redact }
|
|
375
|
+
});
|
|
376
|
+
const cacheKey = redact === void 0 ? `${values ?? ""}\u0000${binary ?? ""}\u0000${maxValueLength ?? ""}` : void 0;
|
|
377
|
+
if (cacheKey !== void 0) {
|
|
378
|
+
const cached = literalCache.get(cacheKey);
|
|
379
|
+
if (cached) return cached;
|
|
380
|
+
}
|
|
381
|
+
const result = literalized(logical, dialectId, formatLiteral, snapshot);
|
|
382
|
+
if (cacheKey !== void 0) literalCache.set(cacheKey, result);
|
|
383
|
+
return result;
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
if (placeholder !== void 0) Object.defineProperty(description, "parameterizedSql", {
|
|
387
|
+
enumerable: true,
|
|
388
|
+
configurable: false,
|
|
389
|
+
get: () => {
|
|
390
|
+
if (!parameterizedReady) {
|
|
391
|
+
parameterized = parameterizedSql(logical, placeholder);
|
|
392
|
+
parameterizedReady = true;
|
|
393
|
+
}
|
|
394
|
+
return parameterized;
|
|
395
|
+
}
|
|
396
|
+
});
|
|
397
|
+
return Object.freeze(description);
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Build one binding description for a logical bulk statement. The statement
|
|
401
|
+
* metadata is shared by every parameter set; values and diagnostics are
|
|
402
|
+
* addressed only when requested for a particular item.
|
|
403
|
+
*/
|
|
404
|
+
function createBulkBindingDescription(bulk, context, options) {
|
|
405
|
+
const logical = createRenderedBulk(bulk);
|
|
406
|
+
const statementBinding = createStatementBindingDescription(logical.statement, context, options);
|
|
407
|
+
const parameterSets = logical.parameterSets;
|
|
408
|
+
const itemCount = parameterSets.length;
|
|
409
|
+
const valuesAt = (index) => {
|
|
410
|
+
if (!Number.isSafeInteger(index) || index < 0 || index >= itemCount) throw new RangeError(`Bulk item index ${String(index)} is outside [0, ${itemCount}).`);
|
|
411
|
+
return parameterSets[index];
|
|
412
|
+
};
|
|
413
|
+
const literalizedSqlFor = (index, literalOptions) => {
|
|
414
|
+
const values = valuesAt(index);
|
|
415
|
+
const optionsSnapshot = literalOptions === void 0 ? void 0 : {
|
|
416
|
+
...literalOptions.values === void 0 ? {} : { values: literalOptions.values },
|
|
417
|
+
...literalOptions.binary === void 0 ? {} : { binary: literalOptions.binary },
|
|
418
|
+
...literalOptions.maxValueLength === void 0 ? {} : { maxValueLength: literalOptions.maxValueLength },
|
|
419
|
+
...literalOptions.redact === void 0 ? {} : { redact: literalOptions.redact }
|
|
420
|
+
};
|
|
421
|
+
return createStatementBindingDescription({
|
|
422
|
+
...logical.statement,
|
|
423
|
+
parameters: logical.statement.parameters.map((parameter, parameterIndex) => ({
|
|
424
|
+
...parameter,
|
|
425
|
+
value: values[parameterIndex]
|
|
426
|
+
}))
|
|
427
|
+
}, context, options).literalizedSql(optionsSnapshot);
|
|
428
|
+
};
|
|
429
|
+
const description = {
|
|
430
|
+
adapterId: statementBinding.adapterId,
|
|
431
|
+
dialectId: statementBinding.dialectId,
|
|
432
|
+
transport: statementBinding.transport,
|
|
433
|
+
bindings: statementBinding.bindings,
|
|
434
|
+
itemCount,
|
|
435
|
+
valuesAt,
|
|
436
|
+
literalizedSql: literalizedSqlFor
|
|
437
|
+
};
|
|
438
|
+
if ("parameterizedSql" in statementBinding) Object.defineProperty(description, "parameterizedSql", {
|
|
439
|
+
enumerable: true,
|
|
440
|
+
configurable: false,
|
|
441
|
+
get: () => statementBinding.parameterizedSql
|
|
442
|
+
});
|
|
443
|
+
return Object.freeze(description);
|
|
444
|
+
}
|
|
445
|
+
var UnsupportedFeatureError = class extends Error {
|
|
446
|
+
feature;
|
|
447
|
+
code;
|
|
448
|
+
constructor(feature, code, message, options) {
|
|
449
|
+
super(`${code}: ${message}`, options);
|
|
450
|
+
this.feature = feature;
|
|
451
|
+
this.code = code;
|
|
452
|
+
this.name = "UnsupportedFeatureError";
|
|
453
|
+
}
|
|
454
|
+
};
|
|
455
|
+
var RoutineMappingError = class extends Error {
|
|
456
|
+
code = "BRAID_CALL_MAP";
|
|
457
|
+
location;
|
|
458
|
+
constructor(message, location, options) {
|
|
459
|
+
super(message, options);
|
|
460
|
+
this.name = "RoutineMappingError";
|
|
461
|
+
this.location = Object.freeze(location);
|
|
462
|
+
}
|
|
463
|
+
};
|
|
464
|
+
var SqlRenderError = class extends Error {
|
|
465
|
+
code;
|
|
466
|
+
constructor(code, message) {
|
|
467
|
+
super(message);
|
|
468
|
+
this.name = "SqlRenderError";
|
|
469
|
+
this.code = code;
|
|
470
|
+
}
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
//#endregion
|
|
474
|
+
export { ResultExactnessError, RoutineMappingError, SQL_FRAGMENT, SqlRenderError, UnsupportedFeatureError, createBoundParameter, createBulkBindingDescription, createParameterTypeHint, createRenderedBulk, createRenderedStatement, createRoutineInOutParameter, createRoutineOutParameter, createStatementBindingDescription, decodeExactDecimal, decodeExactInteger, isBoundParameter, isRoutineParameter, normalizeExactInteger, parameterizedSql, safeDatabaseCount };
|
|
475
|
+
//# sourceMappingURL=index.js.map
|