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 { parseSqlConnectionString } = require('@tediousjs/connection-string')
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 parsed = parseSqlConnectionString(connectionString, true, true)
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 { buildConnectionString } = require('@tediousjs/connection-string')
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 = buildConnectionString({
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.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.6.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",