mssql 12.2.2 → 12.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const { EventEmitter } = require('node:events')
|
|
4
4
|
const debug = require('debug')('mssql:base')
|
|
5
|
-
const {
|
|
5
|
+
const { parse, MSSQL_SCHEMA } = require('@tediousjs/connection-string')
|
|
6
6
|
const tarn = require('tarn')
|
|
7
7
|
const { IDS } = require('../utils')
|
|
8
8
|
const ConnectionError = require('../error/connection-error')
|
|
@@ -99,6 +99,7 @@ class ConnectionPool extends EventEmitter {
|
|
|
99
99
|
}
|
|
100
100
|
|
|
101
101
|
static _parseAuthenticationType (type, entries) {
|
|
102
|
+
if (!type) return 'default'
|
|
102
103
|
switch (type.toLowerCase()) {
|
|
103
104
|
case 'active directory integrated':
|
|
104
105
|
if (entries.includes('token')) {
|
|
@@ -121,7 +122,15 @@ class ConnectionPool extends EventEmitter {
|
|
|
121
122
|
}
|
|
122
123
|
|
|
123
124
|
static _parseConnectionString (connectionString) {
|
|
124
|
-
const
|
|
125
|
+
const result = parse(connectionString)
|
|
126
|
+
const parsed = result.toSchema(MSSQL_SCHEMA)
|
|
127
|
+
// Include non-standard keys (client id, tenant id, token, msi endpoint, msi secret)
|
|
128
|
+
// that are used for authentication but not part of the MSSQL schema
|
|
129
|
+
for (const [key, value] of result) {
|
|
130
|
+
if (!(key in parsed)) {
|
|
131
|
+
parsed[key] = value
|
|
132
|
+
}
|
|
133
|
+
}
|
|
125
134
|
return Object.entries(parsed).reduce((config, [key, value]) => {
|
|
126
135
|
switch (key) {
|
|
127
136
|
case 'application name':
|
|
@@ -18,12 +18,6 @@ class ConnectionError extends MSSQLError {
|
|
|
18
18
|
super(message, code)
|
|
19
19
|
|
|
20
20
|
this.name = 'ConnectionError'
|
|
21
|
-
|
|
22
|
-
let err = message?.details
|
|
23
|
-
if (err instanceof Array && (err = err.at(-1))) {
|
|
24
|
-
this.message = err.message
|
|
25
|
-
this.originalError = err
|
|
26
|
-
}
|
|
27
21
|
}
|
|
28
22
|
}
|
|
29
23
|
|
|
@@ -7,7 +7,7 @@ const { IDS, INCREMENT } = require('../utils')
|
|
|
7
7
|
const shared = require('../shared')
|
|
8
8
|
const ConnectionError = require('../error/connection-error')
|
|
9
9
|
const { platform } = require('node:os')
|
|
10
|
-
const {
|
|
10
|
+
const { build } = require('@tediousjs/connection-string')
|
|
11
11
|
|
|
12
12
|
const DEFAULT_CONNECTION_DRIVER = ['darwin', 'linux'].includes(platform()) ? 'ODBC Driver 17 for SQL Server' : 'SQL Server Native Client 11.0'
|
|
13
13
|
|
|
@@ -22,7 +22,7 @@ class ConnectionPool extends BaseConnectionPool {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
if (!this.config.connectionString) {
|
|
25
|
-
cfg.conn_str =
|
|
25
|
+
cfg.conn_str = build({
|
|
26
26
|
Driver: this.config.driver && this.config.driver !== 'msnodesqlv8' ? this.config.driver : DEFAULT_CONNECTION_DRIVER,
|
|
27
27
|
Server: this.config.options.instanceName ? `${this.config.server}\\${this.config.options.instanceName}` : `${this.config.server},${this.config.port}`,
|
|
28
28
|
Database: this.config.database,
|
|
@@ -43,10 +43,18 @@ class ConnectionPool extends BaseConnectionPool {
|
|
|
43
43
|
|
|
44
44
|
msnodesql.open(cfg, (err, tds) => {
|
|
45
45
|
if (err) {
|
|
46
|
+
let customErr = err?.details
|
|
47
|
+
if (customErr instanceof Array && (customErr = customErr.at(-1))) {
|
|
48
|
+
err.message = customErr.message
|
|
49
|
+
err.code = customErr.code
|
|
50
|
+
}
|
|
51
|
+
|
|
46
52
|
err = new ConnectionError(err.message, err.code)
|
|
47
53
|
return reject(err)
|
|
48
54
|
}
|
|
49
55
|
|
|
56
|
+
tds.setUseNumericString(true)
|
|
57
|
+
|
|
50
58
|
IDS.add(tds, 'Connection', connedtionId)
|
|
51
59
|
tds.setUseUTC(this.config.options.useUTC)
|
|
52
60
|
debug('connection(%d): established', IDS.get(tds))
|
|
@@ -31,6 +31,7 @@ const castParameter = function (value, type) {
|
|
|
31
31
|
case TYPES.NChar:
|
|
32
32
|
case TYPES.Xml:
|
|
33
33
|
case TYPES.Text:
|
|
34
|
+
case TYPES.BigInt:
|
|
34
35
|
case TYPES.NText:
|
|
35
36
|
if ((typeof value !== 'string') && !(value instanceof String)) {
|
|
36
37
|
value = value.toString()
|
|
@@ -39,7 +40,6 @@ const castParameter = function (value, type) {
|
|
|
39
40
|
|
|
40
41
|
case TYPES.Int:
|
|
41
42
|
case TYPES.TinyInt:
|
|
42
|
-
case TYPES.BigInt:
|
|
43
43
|
case TYPES.SmallInt:
|
|
44
44
|
if ((typeof value !== 'number') && !(value instanceof Number)) {
|
|
45
45
|
value = parseInt(value)
|
|
@@ -122,6 +122,8 @@ const createColumns = function (metadata, arrayRowMode) {
|
|
|
122
122
|
return out
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
+
const numericStringSqlTypes = new Set(['int', 'smallint', 'tinyint', 'float', 'real', 'numeric', 'decimal', 'money', 'smallmoney'])
|
|
126
|
+
|
|
125
127
|
const valueCorrection = function (value, metadata) {
|
|
126
128
|
const type = metadata && objectHasProperty(metadata, 'sqlType') && objectHasProperty(DECLARATIONS, metadata.sqlType)
|
|
127
129
|
? DECLARATIONS[metadata.sqlType]
|
|
@@ -137,6 +139,10 @@ const valueCorrection = function (value, metadata) {
|
|
|
137
139
|
} else {
|
|
138
140
|
return value
|
|
139
141
|
}
|
|
142
|
+
} else if (typeof value === 'string' && numericStringSqlTypes.has(metadata.sqlType)) {
|
|
143
|
+
return Number(value)
|
|
144
|
+
} else if (typeof value === 'string' && metadata.sqlType === 'sql_variant' && value !== '' && !isNaN(Number(value))) {
|
|
145
|
+
return Number(value)
|
|
140
146
|
} else {
|
|
141
147
|
return value
|
|
142
148
|
}
|
|
@@ -177,6 +183,10 @@ class Request extends BaseRequest {
|
|
|
177
183
|
return callback(new RequestError('Canceled.', 'ECANCEL'))
|
|
178
184
|
}
|
|
179
185
|
|
|
186
|
+
// Disable useNumericString during bulk operations to avoid
|
|
187
|
+
// msnodesqlv8 SQL generation bugs with its table manager
|
|
188
|
+
connection.setUseNumericString(false)
|
|
189
|
+
|
|
180
190
|
const done = (err, rowCount) => {
|
|
181
191
|
if (hasReturned) {
|
|
182
192
|
return
|
|
@@ -184,6 +194,8 @@ class Request extends BaseRequest {
|
|
|
184
194
|
|
|
185
195
|
hasReturned = true
|
|
186
196
|
|
|
197
|
+
connection.setUseNumericString(true)
|
|
198
|
+
|
|
187
199
|
if (err) {
|
|
188
200
|
if ((typeof err.sqlstate === 'string') && (err.sqlstate.toLowerCase() === '08s01')) {
|
|
189
201
|
connection.hasError = true
|
package/package.json
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"azure",
|
|
22
22
|
"node-mssql"
|
|
23
23
|
],
|
|
24
|
-
"version": "12.2.
|
|
24
|
+
"version": "12.2.3",
|
|
25
25
|
"main": "index.js",
|
|
26
26
|
"type": "commonjs",
|
|
27
27
|
"repository": {
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
},
|
|
35
35
|
"license": "MIT",
|
|
36
36
|
"dependencies": {
|
|
37
|
-
"@tediousjs/connection-string": "^0.
|
|
37
|
+
"@tediousjs/connection-string": "^1.0.0",
|
|
38
38
|
"commander": "^11.0.0",
|
|
39
39
|
"debug": "^4.3.3",
|
|
40
40
|
"tarn": "^3.0.2",
|