(
procedure: Procedure.ProcedureWithValues<any, any, any>,
transformRows: ((rows: ReadonlyArray<any>) => ReadonlyArray<any>) | undefined
)
| 377 | }) |
| 378 | |
| 379 | const runProcedure = ( |
| 380 | procedure: Procedure.ProcedureWithValues<any, any, any>, |
| 381 | transformRows: ((rows: ReadonlyArray<any>) => ReadonlyArray<any>) | undefined |
| 382 | ) => |
| 383 | Effect.callback<any, SqlError>((resume) => { |
| 384 | const result: Record<string, any> = {} |
| 385 | |
| 386 | const req = new Tedious.Request( |
| 387 | escape(procedure.name), |
| 388 | (cause, _, rows) => { |
| 389 | if (cause) { |
| 390 | resume( |
| 391 | Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })) |
| 392 | ) |
| 393 | } else { |
| 394 | rows = rowsToObjects(rows) |
| 395 | if (transformRows) { |
| 396 | rows = transformRows(rows) as any |
| 397 | } |
| 398 | resume( |
| 399 | Effect.succeed({ |
| 400 | output: result, |
| 401 | rows |
| 402 | }) |
| 403 | ) |
| 404 | } |
| 405 | } |
| 406 | ) |
| 407 | |
| 408 | for (const name in procedure.params) { |
| 409 | const param = procedure.params[name] |
| 410 | const value = procedure.values[name] |
| 411 | req.addParameter(name, param.type, value, param.options) |
| 412 | } |
| 413 | |
| 414 | for (const name in procedure.outputParams) { |
| 415 | const param = procedure.outputParams[name] |
| 416 | req.addOutputParameter(name, param.type, undefined, param.options) |
| 417 | } |
| 418 | |
| 419 | req.on("returnValue", (name, value) => { |
| 420 | Rec.assignProperty(result, name, value) |
| 421 | }) |
| 422 | |
| 423 | conn.cancel() |
| 424 | conn.callProcedure(req) |
| 425 | return Effect.sync(() => conn.cancel()) |
| 426 | }) |
| 427 | |
| 428 | const connection = identity<MssqlConnection>({ |
| 429 | execute(sql, params, transformRows) { |
no test coverage detected