(
procedure: Procedure.ProcedureWithValues<any, any, any>,
transformRows: ((rows: ReadonlyArray<any>) => ReadonlyArray<any>) | undefined
)
| 222 | }) |
| 223 | |
| 224 | const runProcedure = ( |
| 225 | procedure: Procedure.ProcedureWithValues<any, any, any>, |
| 226 | transformRows: ((rows: ReadonlyArray<any>) => ReadonlyArray<any>) | undefined |
| 227 | ) => |
| 228 | Effect.async<any, SqlError>((resume) => { |
| 229 | const result: Record<string, any> = {} |
| 230 | |
| 231 | const req = new Tedious.Request( |
| 232 | escape(procedure.name), |
| 233 | (cause, _, rows) => { |
| 234 | if (cause) { |
| 235 | resume(Effect.fail(new SqlError({ cause, message: "Failed to execute statement" }))) |
| 236 | } else { |
| 237 | rows = rowsToObjects(rows) |
| 238 | if (transformRows) { |
| 239 | rows = transformRows(rows) as any |
| 240 | } |
| 241 | resume( |
| 242 | Effect.succeed({ |
| 243 | params: result, |
| 244 | rows |
| 245 | }) |
| 246 | ) |
| 247 | } |
| 248 | } |
| 249 | ) |
| 250 | |
| 251 | for (const name in procedure.params) { |
| 252 | const param = procedure.params[name] |
| 253 | const value = procedure.values[name] |
| 254 | req.addParameter(name, param.type, value, param.options) |
| 255 | } |
| 256 | |
| 257 | for (const name in procedure.outputParams) { |
| 258 | const param = procedure.outputParams[name] |
| 259 | req.addOutputParameter(name, param.type, undefined, param.options) |
| 260 | } |
| 261 | |
| 262 | req.on("returnValue", (name, value) => { |
| 263 | result[name] = value |
| 264 | }) |
| 265 | |
| 266 | conn.cancel() |
| 267 | conn.callProcedure(req) |
| 268 | }) |
| 269 | |
| 270 | const connection = identity<MssqlConnection>({ |
| 271 | execute(sql, params, transformRows) { |
no test coverage detected