@zintrust/core 2.5.4 → 2.5.6
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/package.json +1 -1
- package/src/cli/commands/D1MigrateCommand.d.ts.map +1 -1
- package/src/cli/commands/D1MigrateCommand.js +2 -4
- package/src/index.js +3 -3
- package/src/orm/Database.d.ts.map +1 -1
- package/src/orm/Database.js +0 -3
- package/src/orm/adapters/D1Adapter.d.ts.map +1 -1
- package/src/orm/adapters/D1Adapter.js +39 -5
- package/src/proxy/d1/ZintrustD1Proxy.d.ts.map +1 -1
- package/src/proxy/d1/ZintrustD1Proxy.js +37 -10
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1MigrateCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/D1MigrateCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"D1MigrateCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/D1MigrateCommand.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA0IrE;;;GAGG;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B;;OAEG;cACO,YAAY;EAgCtB,CAAC"}
|
|
@@ -37,10 +37,8 @@ const buildExecutionContext = (options) => {
|
|
|
37
37
|
const dbName = getDbName(projectRoot, options);
|
|
38
38
|
const env = typeof options['env'] === 'string' ? options['env'].trim() : undefined;
|
|
39
39
|
const config = (typeof options['config'] === 'string' ? options['config'].trim() : undefined) ??
|
|
40
|
-
(typeof options
|
|
41
|
-
|
|
42
|
-
: undefined) ??
|
|
43
|
-
(typeof options['wc'] === 'string' ? options['wc'].trim() : undefined);
|
|
40
|
+
(typeof options.wranglerConfig === 'string' ? options.wranglerConfig.trim() : undefined) ??
|
|
41
|
+
(typeof options.wc === 'string' ? options.wc.trim() : undefined);
|
|
44
42
|
const migrationsRelDir = isWorkerCommand
|
|
45
43
|
? path.join('database', 'migrations', 'd1')
|
|
46
44
|
: WranglerConfig.getD1MigrationsDir(projectRoot, dbName);
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v2.5.
|
|
2
|
+
* @zintrust/core v2.5.6
|
|
3
3
|
*
|
|
4
4
|
* ZinTrust Framework - Production-Grade TypeScript Backend
|
|
5
5
|
* Built for performance, type safety, and exceptional developer experience
|
|
6
6
|
*
|
|
7
7
|
* Build Information:
|
|
8
|
-
* Built: 2026-06-
|
|
8
|
+
* Built: 2026-06-12T14:17:16.252Z
|
|
9
9
|
* Node: >=20.0.0
|
|
10
10
|
* License: MIT
|
|
11
11
|
*
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Available at runtime for debugging and health checks
|
|
22
22
|
*/
|
|
23
23
|
export const ZINTRUST_VERSION = '0.1.41';
|
|
24
|
-
export const ZINTRUST_BUILD_DATE = '2026-06-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-06-12T14:17:16.216Z'; // Replaced during build
|
|
25
25
|
export { Application } from './boot/Application.js';
|
|
26
26
|
export { AwsSigV4 } from './common/index.js';
|
|
27
27
|
export { SignedRequest } from './security/SignedRequest.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/orm/Database.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Database.d.ts","sourceRoot":"","sources":["../../../src/orm/Database.ts"],"names":[],"mappings":"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"}
|
package/src/orm/Database.js
CHANGED
|
@@ -456,9 +456,6 @@ export function useDatabase(config, connection = 'default') {
|
|
|
456
456
|
connection,
|
|
457
457
|
});
|
|
458
458
|
}
|
|
459
|
-
// Diagnostic logging
|
|
460
|
-
Logger.error('[DEBUG] Database instances keys:', Array.from(databaseInstances.keys()));
|
|
461
|
-
Logger.error('[DEBUG] Requesting connection:', connection);
|
|
462
459
|
throw ErrorFactory.createConfigError(`Database connection '${connection}' is not registered. ` +
|
|
463
460
|
`Call useDatabase(config, '${connection}') during startup to register it.`);
|
|
464
461
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"D1Adapter.d.ts","sourceRoot":"","sources":["../../../../src/orm/adapters/D1Adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,OAAO,KAAK,EAEV,cAAc,EAGd,gBAAgB,EAEjB,MAAM,sBAAsB,CAAC;AAyG9B;;GAEG;AACH,eAAO,MAAM,SAAS;IACpB;;OAEG;oBAEa,cAAc,GAAG,gBAAgB;EAoKjD,CAAC;AAEH,eAAe,SAAS,CAAC"}
|
|
@@ -7,8 +7,8 @@ import { Logger } from '../../config/logger.js';
|
|
|
7
7
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
8
8
|
import { isObject } from '../../helper/index.js';
|
|
9
9
|
import { AdaptersEnum } from '../../migrations/enum/index.js';
|
|
10
|
-
import { BaseAdapter } from '../DatabaseAdapter.js';
|
|
11
10
|
import { createReadSessionScope, openSession } from '../adapters/D1ReadSession.js';
|
|
11
|
+
import { BaseAdapter } from '../DatabaseAdapter.js';
|
|
12
12
|
import { QueryBuilder } from '../QueryBuilder.js';
|
|
13
13
|
const isRecord = (value) => isObject(value);
|
|
14
14
|
const toNumber = (value) => {
|
|
@@ -67,6 +67,37 @@ const extractServedBy = (value) => {
|
|
|
67
67
|
function getD1Binding(_config) {
|
|
68
68
|
return Cloudflare.getD1Binding(_config);
|
|
69
69
|
}
|
|
70
|
+
/**
|
|
71
|
+
* Normalize D1 bind parameters to handle integer-to-TEXT column compatibility.
|
|
72
|
+
*
|
|
73
|
+
* Workerd's D1 API binds every JavaScript number parameter as a float64 (REAL).
|
|
74
|
+
* When SQLite compares a REAL operand against a column with TEXT affinity,
|
|
75
|
+
* the operand is cast using the column's affinity, producing '2.0' — which
|
|
76
|
+
* never equals a stored '2' from PHP/PDO.
|
|
77
|
+
*
|
|
78
|
+
* This function converts integer-valued numbers to their canonical decimal
|
|
79
|
+
* string representation to match PHP/PDO behavior for TEXT columns.
|
|
80
|
+
*
|
|
81
|
+
* @param parameters - The bind parameters array
|
|
82
|
+
* @returns Normalized parameters with integers as strings
|
|
83
|
+
*/
|
|
84
|
+
function normalizeD1BindParameters(parameters) {
|
|
85
|
+
if (!Array.isArray(parameters))
|
|
86
|
+
return parameters;
|
|
87
|
+
return parameters.map((value) => {
|
|
88
|
+
if (typeof value === 'number' && Number.isInteger(value))
|
|
89
|
+
return String(value);
|
|
90
|
+
if (value instanceof Date)
|
|
91
|
+
return value.toISOString();
|
|
92
|
+
if (value !== null &&
|
|
93
|
+
typeof value === 'object' &&
|
|
94
|
+
!(value instanceof ArrayBuffer) &&
|
|
95
|
+
!ArrayBuffer.isView(value)) {
|
|
96
|
+
return JSON.stringify(value);
|
|
97
|
+
}
|
|
98
|
+
return value;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
70
101
|
/**
|
|
71
102
|
* D1 adapter implementation
|
|
72
103
|
*/
|
|
@@ -108,10 +139,11 @@ export const D1Adapter = Object.freeze({
|
|
|
108
139
|
if (!connected)
|
|
109
140
|
throw ErrorFactory.createConnectionError('Database not connected');
|
|
110
141
|
const db = resolveExecutor();
|
|
142
|
+
const normalizedParams = normalizeD1BindParameters(parameters);
|
|
111
143
|
try {
|
|
112
144
|
const stmt = db.prepare(sql);
|
|
113
145
|
if (isMutatingSql(sql)) {
|
|
114
|
-
const runResult = await stmt.bind(...
|
|
146
|
+
const runResult = await stmt.bind(...normalizedParams).run();
|
|
115
147
|
const runRecord = runResult;
|
|
116
148
|
const meta = extractMeta(runRecord.meta);
|
|
117
149
|
return {
|
|
@@ -121,7 +153,7 @@ export const D1Adapter = Object.freeze({
|
|
|
121
153
|
...extractServedBy(runRecord.meta),
|
|
122
154
|
};
|
|
123
155
|
}
|
|
124
|
-
const result = await stmt.bind(...
|
|
156
|
+
const result = await stmt.bind(...normalizedParams).all();
|
|
125
157
|
const rawResult = result;
|
|
126
158
|
const rows = BaseAdapter.normalizeRows(rawResult.results ?? []);
|
|
127
159
|
const metaValue = rawResult.meta;
|
|
@@ -141,9 +173,10 @@ export const D1Adapter = Object.freeze({
|
|
|
141
173
|
if (!connected)
|
|
142
174
|
throw ErrorFactory.createConnectionError('Database not connected');
|
|
143
175
|
const db = resolveExecutor();
|
|
176
|
+
const normalizedParams = normalizeD1BindParameters(parameters);
|
|
144
177
|
try {
|
|
145
178
|
const stmt = db.prepare(sql);
|
|
146
|
-
const result = await stmt.bind(...
|
|
179
|
+
const result = await stmt.bind(...normalizedParams).first();
|
|
147
180
|
return result === null ? null : BaseAdapter.normalizeRow(result);
|
|
148
181
|
}
|
|
149
182
|
catch (error) {
|
|
@@ -204,10 +237,11 @@ export const D1Adapter = Object.freeze({
|
|
|
204
237
|
throw ErrorFactory.createConnectionError('Database not connected');
|
|
205
238
|
}
|
|
206
239
|
const db = resolveExecutor();
|
|
240
|
+
const normalizedParams = normalizeD1BindParameters(parameters ?? []);
|
|
207
241
|
try {
|
|
208
242
|
Logger.warn(`Raw SQL Query executed: ${sql}`, Logger.withTraceSkipContext({ sql, parameters }));
|
|
209
243
|
const stmt = db.prepare(sql);
|
|
210
|
-
const result = await stmt.bind(...
|
|
244
|
+
const result = await stmt.bind(...normalizedParams).all();
|
|
211
245
|
return result.results ?? [];
|
|
212
246
|
}
|
|
213
247
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ZintrustD1Proxy.d.ts","sourceRoot":"","sources":["../../../../src/proxy/d1/ZintrustD1Proxy.ts"],"names":[],"mappings":"AAUA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE;QACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;KAChG,CAAC;IACF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,IAAI;IACpB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;CACf,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,mBAAmB,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;CAC/C,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;
|
|
1
|
+
{"version":3,"file":"ZintrustD1Proxy.d.ts","sourceRoot":"","sources":["../../../../src/proxy/d1/ZintrustD1Proxy.ts"],"names":[],"mappings":"AAUA,KAAK,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAEjD,KAAK,qBAAqB,GAAG;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,GAAG,EAAE;QACH,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;QACtC,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;QACrE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;QAChE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,CAAC;KAChG,CAAC;IACF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrF,CAAC;AAEF,KAAK,WAAW,CAAC,CAAC,IAAI;IACpB,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;CACf,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,IAAI,EAAE,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,mBAAmB,CAAC;IACpD,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,GAAG,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;CACjC,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,mBAAmB,CAAC;CAC/C,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAsWF,eAAO,MAAM,eAAe;;;mBAGL,OAAO,OAAO,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC;EAqB5D,CAAC;AAEH,eAAe,eAAe,CAAC"}
|
|
@@ -151,17 +151,41 @@ const resolveSqlRequest = async (request, env) => {
|
|
|
151
151
|
return { ok: false, response: limit };
|
|
152
152
|
return { ok: true, db: resolved.db, sql: parsed.sql, params: parsed.params };
|
|
153
153
|
};
|
|
154
|
+
/**
|
|
155
|
+
* Normalize bind parameters before passing to D1's bind().
|
|
156
|
+
*
|
|
157
|
+
* D1 rejects JS objects and needs integer-valued numbers serialized for TEXT
|
|
158
|
+
* column compatibility, Dates as ISO strings, while blobs must be untouched.
|
|
159
|
+
*/
|
|
160
|
+
const normalizeParams = (params) => {
|
|
161
|
+
if (!Array.isArray(params))
|
|
162
|
+
return params;
|
|
163
|
+
return params.map((value) => {
|
|
164
|
+
if (typeof value === 'number' && Number.isInteger(value))
|
|
165
|
+
return String(value);
|
|
166
|
+
if (value instanceof Date)
|
|
167
|
+
return value.toISOString();
|
|
168
|
+
if (value !== null &&
|
|
169
|
+
typeof value === 'object' &&
|
|
170
|
+
!(value instanceof ArrayBuffer) &&
|
|
171
|
+
!ArrayBuffer.isView(value)) {
|
|
172
|
+
return JSON.stringify(value);
|
|
173
|
+
}
|
|
174
|
+
return value;
|
|
175
|
+
});
|
|
176
|
+
};
|
|
154
177
|
const handleQuery = async (request, env) => {
|
|
155
178
|
try {
|
|
156
179
|
const resolved = await resolveSqlRequest(request, env);
|
|
157
180
|
if (!resolved.ok)
|
|
158
181
|
return resolved.response;
|
|
182
|
+
const normalizedParams = normalizeParams(resolved.params);
|
|
159
183
|
const startedAt = Date.now();
|
|
160
184
|
const result = await resolved.db
|
|
161
185
|
.prepare(resolved.sql)
|
|
162
|
-
.bind(...
|
|
186
|
+
.bind(...normalizedParams)
|
|
163
187
|
.all();
|
|
164
|
-
SystemTraceWorkerBridge.emitQuery(resolved.sql,
|
|
188
|
+
SystemTraceWorkerBridge.emitQuery(resolved.sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(result.meta));
|
|
165
189
|
const rows = result.results ?? [];
|
|
166
190
|
return json(200, { rows, rowCount: rows.length });
|
|
167
191
|
}
|
|
@@ -175,12 +199,13 @@ const handleQueryOne = async (request, env) => {
|
|
|
175
199
|
const resolved = await resolveSqlRequest(request, env);
|
|
176
200
|
if (!resolved.ok)
|
|
177
201
|
return resolved.response;
|
|
202
|
+
const normalizedParams = normalizeParams(resolved.params);
|
|
178
203
|
const startedAt = Date.now();
|
|
179
204
|
const row = await resolved.db
|
|
180
205
|
.prepare(resolved.sql)
|
|
181
|
-
.bind(...
|
|
206
|
+
.bind(...normalizedParams)
|
|
182
207
|
.first();
|
|
183
|
-
SystemTraceWorkerBridge.emitQuery(resolved.sql,
|
|
208
|
+
SystemTraceWorkerBridge.emitQuery(resolved.sql, normalizedParams, Date.now() - startedAt, 'd1-proxy');
|
|
184
209
|
return json(200, { row: row ?? null });
|
|
185
210
|
}
|
|
186
211
|
catch (error) {
|
|
@@ -193,12 +218,13 @@ const handleExec = async (request, env) => {
|
|
|
193
218
|
const resolved = await resolveSqlRequest(request, env);
|
|
194
219
|
if (!resolved.ok)
|
|
195
220
|
return resolved.response;
|
|
221
|
+
const normalizedParams = normalizeParams(resolved.params);
|
|
196
222
|
const startedAt = Date.now();
|
|
197
223
|
const out = await resolved.db
|
|
198
224
|
.prepare(resolved.sql)
|
|
199
|
-
.bind(...
|
|
225
|
+
.bind(...normalizedParams)
|
|
200
226
|
.run();
|
|
201
|
-
SystemTraceWorkerBridge.emitQuery(resolved.sql,
|
|
227
|
+
SystemTraceWorkerBridge.emitQuery(resolved.sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
|
|
202
228
|
return json(200, { ok: true, meta: out.meta });
|
|
203
229
|
}
|
|
204
230
|
catch (error) {
|
|
@@ -236,20 +262,21 @@ const handleStatement = async (request, env) => {
|
|
|
236
262
|
if (!isString(sql) || sql.trim() === '') {
|
|
237
263
|
return toErrorResponse(404, 'NOT_FOUND', 'Unknown statementId');
|
|
238
264
|
}
|
|
265
|
+
const normalizedParams = normalizeParams(parsed.params);
|
|
239
266
|
const startedAt = Date.now();
|
|
240
267
|
if (isMutatingSql(sql)) {
|
|
241
268
|
const out = await resolved.db
|
|
242
269
|
.prepare(sql)
|
|
243
|
-
.bind(...
|
|
270
|
+
.bind(...normalizedParams)
|
|
244
271
|
.run();
|
|
245
|
-
SystemTraceWorkerBridge.emitQuery(sql,
|
|
272
|
+
SystemTraceWorkerBridge.emitQuery(sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
|
|
246
273
|
return json(200, { ok: true, meta: out.meta });
|
|
247
274
|
}
|
|
248
275
|
const out = await resolved.db
|
|
249
276
|
.prepare(sql)
|
|
250
|
-
.bind(...
|
|
277
|
+
.bind(...normalizedParams)
|
|
251
278
|
.all();
|
|
252
|
-
SystemTraceWorkerBridge.emitQuery(sql,
|
|
279
|
+
SystemTraceWorkerBridge.emitQuery(sql, normalizedParams, Date.now() - startedAt, 'd1-proxy', routingFromMeta(out.meta));
|
|
253
280
|
const rows = out.results ?? [];
|
|
254
281
|
return json(200, { rows, rowCount: rows.length });
|
|
255
282
|
}
|