(
sql: string,
values?: ReadonlyArray<any>,
rowsAsArray = false
)
| 334 | }) |
| 335 | |
| 336 | const run = ( |
| 337 | sql: string, |
| 338 | values?: ReadonlyArray<any>, |
| 339 | rowsAsArray = false |
| 340 | ) => |
| 341 | Effect.callback<any, SqlError>((resume) => { |
| 342 | const req = new Tedious.Request(sql, (cause, _rowCount, result) => { |
| 343 | if (cause) { |
| 344 | resume( |
| 345 | Effect.fail(new SqlError({ reason: classifyError(cause, "Failed to execute statement", "execute") })) |
| 346 | ) |
| 347 | return |
| 348 | } |
| 349 | |
| 350 | if (rowsAsArray) { |
| 351 | result = result.map((row: any) => row.map((_: any) => _.value)) |
| 352 | } else { |
| 353 | result = rowsToObjects(result) |
| 354 | } |
| 355 | |
| 356 | resume(Effect.succeed(result)) |
| 357 | }) |
| 358 | |
| 359 | if (values) { |
| 360 | for (let i = 0, len = values.length; i < len; i++) { |
| 361 | const value = values[i] |
| 362 | const name = numberToParamName(i) |
| 363 | |
| 364 | if (isMssqlParam(value)) { |
| 365 | req.addParameter(name, value.paramA, value.paramB, value.paramC) |
| 366 | } else { |
| 367 | const kind = Statement.primitiveKind(value) |
| 368 | const type = parameterTypes[kind] |
| 369 | req.addParameter(name, type, value) |
| 370 | } |
| 371 | } |
| 372 | } |
| 373 | |
| 374 | conn.cancel() |
| 375 | conn.execSql(req) |
| 376 | return Effect.sync(() => conn.cancel()) |
| 377 | }) |
| 378 | |
| 379 | const runProcedure = ( |
| 380 | procedure: Procedure.ProcedureWithValues<any, any, any>, |
no test coverage detected