Skip to content

Commit bcb8267

Browse files
authored
Merge pull request #1864 from dhensby/claude/bold-lederberg-d4620a
fix: prevent TypeError in batch with output parameters when sql errors
2 parents 4b7a6de + 0db36a4 commit bcb8267

4 files changed

Lines changed: 19 additions & 1 deletion

File tree

lib/tedious/request.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ class Request extends BaseRequest {
481481

482482
// process batch outputs
483483
if (batchHasOutput) {
484-
if (!this.stream) batchLastRow = recordsets.pop()[0]
484+
if (!this.stream) batchLastRow = recordsets.pop()?.[0]
485485

486486
for (const name in batchLastRow) {
487487
const value = batchLastRow[name]

test/common/tests.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -644,6 +644,22 @@ module.exports = (sql, driver) => {
644644
}).catch(done)
645645
},
646646

647+
'batch with output parameters and sql error' (done) {
648+
const req = new TestRequest()
649+
req.output('out', sql.Int)
650+
req.batch('select * from notexistingtable').then(() => {
651+
done(new Error('expected batch to reject with sql error'))
652+
}).catch(err => {
653+
try {
654+
assert.ok(err instanceof sql.RequestError, `expected RequestError, got ${err && err.constructor.name}: ${err && err.message}`)
655+
assert.strictEqual(err.code, 'EREQUEST')
656+
done()
657+
} catch (assertionError) {
658+
done(assertionError)
659+
}
660+
})
661+
},
662+
647663
'create procedure batch' (done) {
648664
let req = new TestRequest()
649665
req.batch('create procedure #temporary as select 1 as num').then(result => {

test/msnodesqlv8/msnodesqlv8.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ describe('msnodesqlv8', function () {
7474
it('query with pipe and back pressure', (done) => TESTS['query with pipe and back pressure'](done))
7575
it('batch', done => TESTS.batch(done))
7676
it('batch (stream)', done => TESTS.batch(done, true))
77+
it('batch with output parameters and sql error', done => TESTS['batch with output parameters and sql error'](done))
7778
it('create procedure batch', done => TESTS['create procedure batch'](done))
7879
it('prepared statement', done => TESTS['prepared statement'](done))
7980
it('prepared statement that fails to prepare throws', done => TESTS['prepared statement that fails to prepare throws'](done))

test/tedious/tedious.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ describe('tedious', () => {
8181
it('query with pipe and back pressure', (done) => TESTS['query with pipe and back pressure'](done))
8282
it('query with duplicate output column names', done => TESTS['query with duplicate output column names'](done))
8383
it('batch', done => TESTS.batch(done))
84+
it('batch with output parameters and sql error', done => TESTS['batch with output parameters and sql error'](done))
8485
it('create procedure batch', done => TESTS['create procedure batch'](done))
8586
it('prepared statement', done => TESTS['prepared statement'](done))
8687
it('prepared statement that fails to prepare throws', done => TESTS['prepared statement that fails to prepare throws'](done))

0 commit comments

Comments
 (0)