Skip to content

Commit e5b3f60

Browse files
committed
Add test for bigint casting
1 parent c4ca070 commit e5b3f60

File tree

5 files changed

+71
-36
lines changed

5 files changed

+71
-36
lines changed

test/cleanup.sql

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ if exists (select * from sys.tables where name = 'bulk_table5')
5252
if exists (select * from sys.tables where name = 'rowsaffected_test')
5353
exec('drop table [dbo].[rowsaffected_test]')
5454

55+
if exists (select * from sys.tables where name = 'bignumbers')
56+
exec('drop table [dbo].[bignumbers]')
57+
5558
if exists (select * from sys.tables where name = 'streaming')
5659
exec('drop table [dbo].[streaming]')
5760

test/common/tests.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1276,6 +1276,30 @@ module.exports = (sql, driver) => {
12761276
}).catch(done)
12771277
},
12781278

1279+
'BigInt parameters' (done) {
1280+
const req = new TestRequest()
1281+
req.input('bignumber', sql.BigInt, '9223372036854775807')
1282+
req.query('INSERT INTO [dbo].[bignumbers] (bignumber) VALUES (@bignumber)')
1283+
.then(() => {
1284+
const req2 = new TestRequest()
1285+
return req2.query('SELECT * FROM [dbo].[bignumbers]')
1286+
})
1287+
.then((result) => {
1288+
assert.strictEqual(result.recordsets.length, 1)
1289+
assert.strictEqual(result.recordset[0].bignumber, '9223372036854775807')
1290+
done()
1291+
})
1292+
.catch(done)
1293+
},
1294+
1295+
'BigInt casted types' (done) {
1296+
const req = new TestRequest()
1297+
req.query('SELECT cast(9223372036854775807 AS BigInt) as bignumber').then(result => {
1298+
assert.strictEqual(result.recordset[0].bignumber, '9223372036854775807')
1299+
done()
1300+
}).catch(done)
1301+
},
1302+
12791303
'dataLength type correction' (done) {
12801304
sql.on('error', err => console.error(err))
12811305
const req = new TestRequest()

test/msnodesqlv8/msnodesqlv8.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,10 @@ const sql = require('../../msnodesqlv8')
88
const TESTS = require('../common/tests.js')(sql, 'msnodesqlv8')
99
const TIMES = require('../common/times.js')(sql, 'msnodesqlv8')
1010
const versionHelper = require('../common/versionhelper')
11+
const { readFileSync } = require('fs')
1112

1213
const config = function () {
13-
const cfg = JSON.parse(require('fs').readFileSync(join(__dirname, '../.mssql.json')))
14+
const cfg = JSON.parse(readFileSync(join(__dirname, '../.mssql.json')))
1415
cfg.driver = 'msnodesqlv8'
1516
return cfg
1617
}
@@ -19,23 +20,22 @@ let connection1 = null
1920
let connection2 = null
2021

2122
describe('msnodesqlv8', function () {
22-
before(done =>
23-
sql.connect(config(), function (err) {
24-
if (err) return done(err)
25-
26-
let req = new sql.Request()
27-
req.batch(require('fs').readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'), function (err) {
28-
if (err) return done(err)
29-
30-
req = new sql.Request()
31-
req.batch(require('fs').readFileSync(join(__dirname, '../prepare.sql'), 'utf8'), function (err) {
32-
if (err) return done(err)
33-
34-
sql.close(done)
23+
before(done => {
24+
try {
25+
sql.connect(config())
26+
.then(() => {
27+
return new sql.Request().query(readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'))
3528
})
36-
})
37-
})
38-
)
29+
.then(() => {
30+
return new sql.Request().query(readFileSync(join(__dirname, '../prepare.sql'), 'utf8'))
31+
})
32+
.catch(done)
33+
.then(() => sql.close())
34+
.then(() => done())
35+
} catch (e) {
36+
done(e)
37+
}
38+
})
3939
afterEach(() => sql.valueHandler.clear())
4040

4141
describe('basic test suite', function () {
@@ -91,6 +91,8 @@ describe('msnodesqlv8', function () {
9191
it('connection healthy works', done => TESTS['connection healthy works'](config(), done))
9292
it('healthy connection goes bad', done => TESTS['healthy connection goes bad'](config(), done))
9393
it('request timeout', done => TESTS['request timeout'](done))
94+
it('BigInt parameters', done => TESTS['BigInt parameters'](done))
95+
it('BigInt casted types', done => TESTS['BigInt casted types'](done))
9496
it('dataLength type correction', done => TESTS['dataLength type correction'](done))
9597
it('chunked xml support', done => TESTS['chunked xml support'](done))
9698

@@ -245,7 +247,7 @@ describe('msnodesqlv8', function () {
245247
if (err) return done(err)
246248

247249
const req = new sql.Request()
248-
req.query(require('fs').readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'), function (err) {
250+
req.query(readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'), function (err) {
249251
if (err) return done(err)
250252

251253
sql.close(done)

test/prepare.sql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,10 @@ exec('create table [dbo].[rowsaffected_test] (
145145
a int not null
146146
)')
147147

148+
exec('create table [dbo].[bignumbers] (
149+
bignumber bigint
150+
)')
151+
148152
;with nums as
149153
(
150154
select 0 AS n

test/tedious/tedious.js

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
const sql = require('../../tedious.js')
66
const assert = require('assert')
77
const { join } = require('path')
8+
const { readFileSync } = require('fs')
89

910
const TESTS = require('../common/tests.js')(sql, 'tedious')
1011
const TIMES = require('../common/times.js')(sql, 'tedious')
@@ -16,7 +17,7 @@ if (parseInt(process.version.match(/^v(\d+)\./)[1]) > 0) {
1617
}
1718

1819
const config = function () {
19-
const cfg = JSON.parse(require('fs').readFileSync(join(__dirname, '../.mssql.json')))
20+
const cfg = JSON.parse(readFileSync(join(__dirname, '../.mssql.json')))
2021
cfg.driver = 'tedious'
2122
return cfg
2223
}
@@ -25,23 +26,22 @@ let connection1 = null
2526
let connection2 = null
2627

2728
describe('tedious', () => {
28-
before(done =>
29-
sql.connect(config(), err => {
30-
if (err) return done(err)
31-
32-
let req = new sql.Request()
33-
req.query(require('fs').readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'), err => {
34-
if (err) return done(err)
35-
36-
req = new sql.Request()
37-
req.query(require('fs').readFileSync(join(__dirname, '../prepare.sql'), 'utf8'), err => {
38-
if (err) return done(err)
39-
40-
sql.close(done)
29+
before(done => {
30+
try {
31+
sql.connect(config())
32+
.then(() => {
33+
return new sql.Request().query(readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'))
4134
})
42-
})
43-
})
44-
)
35+
.then(() => {
36+
return new sql.Request().query(readFileSync(join(__dirname, '../prepare.sql'), 'utf8'))
37+
})
38+
.catch(done)
39+
.then(() => sql.close())
40+
.then(() => done())
41+
} catch (e) {
42+
done(e)
43+
}
44+
})
4545
afterEach(() => sql.valueHandler.clear())
4646

4747
describe('basic test suite', () => {
@@ -100,6 +100,8 @@ describe('tedious', () => {
100100
it('connection healthy works', done => TESTS['connection healthy works'](config(), done))
101101
it('healthy connection goes bad', done => TESTS['healthy connection goes bad'](config(), done))
102102
it('request timeout', done => TESTS['request timeout'](done, 'tedious', /Timeout: Request failed to complete in 1000ms/))
103+
it('BigInt parameters', done => TESTS['BigInt parameters'](done))
104+
it('BigInt casted types', done => TESTS['BigInt casted types'](done))
103105
it('dataLength type correction', done => TESTS['dataLength type correction'](done))
104106
it('type validation', done => TESTS['type validation']('query', done))
105107
it('type validation (batch)', done => TESTS['type validation']('batch', done))
@@ -345,7 +347,7 @@ describe('tedious', () => {
345347
if (err) return done(err)
346348

347349
const req = new sql.Request()
348-
req.query(require('fs').readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'), function (err) {
350+
req.query(readFileSync(join(__dirname, '../cleanup.sql'), 'utf8'), function (err) {
349351
if (err) return done(err)
350352

351353
sql.close(done)

0 commit comments

Comments
 (0)