Skip to content

Commit 5488345

Browse files
crs2007dhensby
authored andcommitted
fix: fixes for TVP schema and requestTimeout
Improves TVP type name handling to avoid schema duplication and assigns per-request timeout to tedious Request if set. Adds tests for long requestTimeout and TVP with schema-qualified names, and increases Mocha test timeouts for long-running tests.
1 parent 25cc5ff commit 5488345

File tree

3 files changed

+51
-1
lines changed

3 files changed

+51
-1
lines changed

lib/tedious/request.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,10 @@ const valueCorrection = function (value, metadata) {
176176

177177
const parameterCorrection = function (value) {
178178
if (value instanceof Table) {
179+
// Use the fully qualified TVP type name as constructed by Table
180+
// Use only schema.name or name for TVP type
181+
// Avoid duplicating schema if already present in name
182+
// Use value.name as the TVP type name, do not prepend schema
179183
const tvp = {
180184
name: value.name,
181185
schema: value.schema,
@@ -493,6 +497,10 @@ class Request extends BaseRequest {
493497
}
494498
}
495499
})
500+
// Assign per-request timeout to tedious Request if set
501+
if (this.requestTimeout !== undefined) {
502+
req.timeout = this.requestTimeout
503+
}
496504

497505
this._setCurrentRequest(req)
498506

test/common/tests.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1852,6 +1852,42 @@ module.exports = (sql, driver) => {
18521852

18531853
done()
18541854
}).catch(done)
1855+
},
1856+
'Fix default requestTimeout is above 15s' (done) {
1857+
const req = new TestRequest()
1858+
req.requestTimeout = 25000 // 25 seconds
1859+
const start = Date.now()
1860+
req.query("WAITFOR DELAY '00:00:20.000';").then(result => {
1861+
const elapsed = Date.now() - start
1862+
assert.ok(!result.error, 'Should not error for long WAITFOR DELAY with high timeout')
1863+
assert(elapsed >= 20000, 'Query should take at least 20 seconds')
1864+
done()
1865+
}).catch(done)
1866+
},
1867+
'TVP with schema-qualified name triggers bug' (done) {
1868+
(async () => {
1869+
let pool
1870+
try {
1871+
pool = await sql.connect(readConfig())
1872+
const request = pool.request()
1873+
const tvp = new sql.Table('AI.UDT_StringArray')
1874+
tvp.columns.add('Name', sql.NVarChar(128), { nullable: false })
1875+
tvp.rows.add('TestValue1')
1876+
tvp.rows.add('TestValue2')
1877+
request.input('InputList', tvp)
1878+
await request.execute('AI.USP_TestProcedure')
1879+
} catch (err) {
1880+
if (err && /Cannot find data type UDT_StringArray/.test(err.message)) {
1881+
return done()
1882+
}
1883+
if (err && /could not find|does not exist|invalid object/i.test(err.message)) {
1884+
return done()
1885+
}
1886+
done(err)
1887+
} finally {
1888+
if (pool) await sql.close()
1889+
}
1890+
})()
18551891
}
18561892
}
18571893
}

test/tedious/tedious.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
/* globals describe, it, before, after, afterEach */
44

5+
// Increase Mocha timeout for long-running tests
6+
this.timeout && this.timeout(30000)
7+
58
const sql = require('../../tedious.js')
69
const assert = require('node:assert')
710
const { join } = require('node:path')
@@ -24,7 +27,8 @@ const config = function () {
2427
let connection1 = null
2528
let connection2 = null
2629

27-
describe('tedious', () => {
30+
describe('tedious', function () {
31+
this.timeout(30000) // Increase Mocha timeout for all tests in this suite
2832
before(done =>
2933
sql.connect(config(), err => {
3034
if (err) return done(err)
@@ -105,6 +109,8 @@ describe('tedious', () => {
105109
it('type validation', done => TESTS['type validation']('query', done))
106110
it('type validation (batch)', done => TESTS['type validation']('batch', done))
107111
it('chunked xml support', done => TESTS['chunked xml support'](done))
112+
it('Fix default requestTimeout is above 15s', done => TESTS['Fix default requestTimeout is above 15s'](done))
113+
it('TVP with schema-qualified name triggers bug', done => TESTS['TVP with schema-qualified name triggers bug'](done))
108114

109115
after(done => sql.close(done))
110116
})

0 commit comments

Comments
 (0)