tedious 6.4.0 → 6.6.2
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.
- package/lib/bulk-load.js +17 -22
- package/lib/connection.js +363 -251
- package/lib/connector.js +3 -1
- package/lib/data-type.js +111 -109
- package/lib/data-types/bigint.js +19 -7
- package/lib/data-types/binary.js +19 -10
- package/lib/data-types/bit.js +14 -4
- package/lib/data-types/bitn.js +26 -3
- package/lib/data-types/char.js +26 -13
- package/lib/data-types/date.js +18 -9
- package/lib/data-types/datetime.js +23 -5
- package/lib/data-types/datetime2.js +10 -22
- package/lib/data-types/datetimen.js +26 -3
- package/lib/data-types/datetimeoffset.js +11 -22
- package/lib/data-types/decimal.js +14 -6
- package/lib/data-types/decimaln.js +26 -5
- package/lib/data-types/float.js +14 -4
- package/lib/data-types/floatn.js +26 -3
- package/lib/data-types/image.js +12 -5
- package/lib/data-types/int.js +14 -4
- package/lib/data-types/intn.js +26 -3
- package/lib/data-types/money.js +14 -4
- package/lib/data-types/moneyn.js +26 -3
- package/lib/data-types/nchar.js +17 -6
- package/lib/data-types/ntext.js +26 -5
- package/lib/data-types/null.js +27 -3
- package/lib/data-types/numeric.js +14 -6
- package/lib/data-types/numericn.js +26 -5
- package/lib/data-types/nvarchar.js +20 -11
- package/lib/data-types/real.js +14 -4
- package/lib/data-types/smalldatetime.js +14 -4
- package/lib/data-types/smallint.js +14 -4
- package/lib/data-types/smallmoney.js +14 -4
- package/lib/data-types/sql-variant.js +23 -4
- package/lib/data-types/text.js +13 -7
- package/lib/data-types/time.js +9 -21
- package/lib/data-types/tinyint.js +14 -4
- package/lib/data-types/tvp.js +12 -3
- package/lib/data-types/udt.js +26 -3
- package/lib/data-types/uniqueidentifier.js +12 -5
- package/lib/data-types/varbinary.js +18 -8
- package/lib/data-types/varchar.js +19 -10
- package/lib/data-types/xml.js +26 -3
- package/lib/debug.js +3 -1
- package/lib/guid-parser.js +6 -6
- package/lib/incoming-message-stream.js +10 -7
- package/lib/instance-lookup.js +12 -6
- package/lib/library.js +6 -1
- package/lib/login7-payload.js +2 -3
- package/lib/message-io.js +14 -3
- package/lib/message.js +2 -3
- package/lib/metadata-parser.js +259 -136
- package/lib/ntlm-payload.js +12 -21
- package/lib/outgoing-message-stream.js +7 -6
- package/lib/packet.js +4 -5
- package/lib/prelogin-payload.js +3 -4
- package/lib/request.js +11 -11
- package/lib/rpcrequest-payload.js +28 -22
- package/lib/sender.js +25 -11
- package/lib/special-stored-procedure.js +9 -2
- package/lib/tds-versions.js +8 -2
- package/lib/tedious.js +75 -9
- package/lib/token/colmetadata-token-parser.js +20 -10
- package/lib/token/done-token-parser.js +32 -25
- package/lib/token/env-change-token-parser.js +50 -20
- package/lib/token/feature-ext-ack-parser.js +19 -14
- package/lib/token/fedauth-info-parser.js +17 -11
- package/lib/token/infoerror-token-parser.js +14 -14
- package/lib/token/loginack-token-parser.js +21 -12
- package/lib/token/nbcrow-token-parser.js +35 -23
- package/lib/token/order-token-parser.js +14 -7
- package/lib/token/returnstatus-token-parser.js +14 -7
- package/lib/token/returnvalue-token-parser.js +22 -11
- package/lib/token/row-token-parser.js +34 -22
- package/lib/token/sspi-token-parser.js +14 -8
- package/lib/token/stream-parser.js +95 -36
- package/lib/token/token-stream-parser.js +16 -10
- package/lib/token/token.js +396 -2
- package/lib/tracking-buffer/writable-tracking-buffer.js +37 -5
- package/lib/transaction.js +25 -16
- package/lib/transient-error-lookup.js +6 -1
- package/lib/value-parser.js +412 -315
- package/package.json +24 -21
- package/pull_request_template.md +1 -1
- package/tsconfig.json +1 -1
- package/lib/tracking-buffer/bigint.js +0 -102
package/lib/metadata-parser.js
CHANGED
|
@@ -1,174 +1,297 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.readCollation = readCollation;
|
|
7
|
+
exports.default = void 0;
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
var _collation = require("./collation");
|
|
6
10
|
|
|
7
|
-
|
|
11
|
+
var _dataType = require("./data-type");
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
var _sprintfJs = require("sprintf-js");
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if ((type.id & 0x30) === 0x20) {
|
|
18
|
-
// xx10xxxx - s2.2.4.2.1.3
|
|
19
|
-
// Variable length
|
|
20
|
-
if (type.dataLengthFromScale) {
|
|
21
|
-
return callback(0); // dataLength is resolved from scale
|
|
22
|
-
} else if (type.fixedDataLength) {
|
|
23
|
-
return callback(type.fixedDataLength);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
switch (type.dataLengthLength) {
|
|
27
|
-
case 0:
|
|
28
|
-
return callback(undefined);
|
|
29
|
-
|
|
30
|
-
case 1:
|
|
31
|
-
return parser.readUInt8(callback);
|
|
32
|
-
|
|
33
|
-
case 2:
|
|
34
|
-
return parser.readUInt16LE(callback);
|
|
35
|
-
|
|
36
|
-
case 4:
|
|
37
|
-
return parser.readUInt32LE(callback);
|
|
38
|
-
|
|
39
|
-
default:
|
|
40
|
-
return parser.emit(new Error('Unsupported dataLengthLength ' + type.dataLengthLength + ' for data type ' + type.name));
|
|
41
|
-
}
|
|
42
|
-
} else {
|
|
43
|
-
callback(undefined);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
15
|
+
function readCollation(parser, callback) {
|
|
16
|
+
// s2.2.5.1.2
|
|
17
|
+
parser.readBuffer(5, collationData => {
|
|
18
|
+
let lcid = (collationData[2] & 0x0F) << 16;
|
|
19
|
+
lcid |= collationData[1] << 8;
|
|
20
|
+
lcid |= collationData[0]; // This may not be extracting the correct nibbles in the correct order.
|
|
46
21
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
parser.readUInt8(callback);
|
|
50
|
-
} else {
|
|
51
|
-
callback(undefined);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
function readScale(parser, type, callback) {
|
|
56
|
-
if (type.hasScale) {
|
|
57
|
-
parser.readUInt8(callback);
|
|
58
|
-
} else {
|
|
59
|
-
callback(undefined);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
22
|
+
let flags = collationData[3] >> 4;
|
|
23
|
+
flags |= collationData[2] & 0xF0; // This may not be extracting the correct nibble.
|
|
62
24
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
collation.flags = collationData[3] >> 4;
|
|
73
|
-
collation.flags |= collationData[2] & 0xF0; // This may not be extracting the correct nibble.
|
|
74
|
-
|
|
75
|
-
collation.version = collationData[3] & 0x0F;
|
|
76
|
-
collation.sortId = collationData[4];
|
|
77
|
-
collation.codepage = codepageBySortId[collation.sortId] || codepageByLcid[collation.lcid] || 'CP1252';
|
|
78
|
-
callback(collation);
|
|
25
|
+
const version = collationData[3] & 0x0F;
|
|
26
|
+
const sortId = collationData[4];
|
|
27
|
+
const codepage = _collation.codepageBySortId[sortId] || _collation.codepageByLcid[lcid] || 'CP1252';
|
|
28
|
+
callback({
|
|
29
|
+
lcid,
|
|
30
|
+
flags,
|
|
31
|
+
version,
|
|
32
|
+
sortId,
|
|
33
|
+
codepage
|
|
79
34
|
});
|
|
80
|
-
}
|
|
81
|
-
callback(undefined);
|
|
82
|
-
}
|
|
35
|
+
});
|
|
83
36
|
}
|
|
84
37
|
|
|
85
|
-
function readSchema(parser,
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
parser.readBVarChar(
|
|
91
|
-
parser.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
xmlSchemaCollection: xmlSchemaCollection
|
|
97
|
-
});
|
|
38
|
+
function readSchema(parser, callback) {
|
|
39
|
+
// s2.2.5.5.3
|
|
40
|
+
parser.readUInt8(schemaPresent => {
|
|
41
|
+
if (schemaPresent === 0x01) {
|
|
42
|
+
parser.readBVarChar(dbname => {
|
|
43
|
+
parser.readBVarChar(owningSchema => {
|
|
44
|
+
parser.readUsVarChar(xmlSchemaCollection => {
|
|
45
|
+
callback({
|
|
46
|
+
dbname: dbname,
|
|
47
|
+
owningSchema: owningSchema,
|
|
48
|
+
xmlSchemaCollection: xmlSchemaCollection
|
|
98
49
|
});
|
|
99
50
|
});
|
|
100
51
|
});
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
callback(undefined);
|
|
107
|
-
}
|
|
52
|
+
});
|
|
53
|
+
} else {
|
|
54
|
+
callback(undefined);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
108
57
|
}
|
|
109
58
|
|
|
110
|
-
function readUDTInfo(parser,
|
|
111
|
-
|
|
112
|
-
parser.
|
|
113
|
-
parser.readBVarChar(
|
|
114
|
-
parser.readBVarChar(
|
|
115
|
-
parser.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
assemblyName: assemblyName
|
|
123
|
-
});
|
|
59
|
+
function readUDTInfo(parser, callback) {
|
|
60
|
+
parser.readUInt16LE(maxByteSize => {
|
|
61
|
+
parser.readBVarChar(dbname => {
|
|
62
|
+
parser.readBVarChar(owningSchema => {
|
|
63
|
+
parser.readBVarChar(typeName => {
|
|
64
|
+
parser.readUsVarChar(assemblyName => {
|
|
65
|
+
callback({
|
|
66
|
+
maxByteSize: maxByteSize,
|
|
67
|
+
dbname: dbname,
|
|
68
|
+
owningSchema: owningSchema,
|
|
69
|
+
typeName: typeName,
|
|
70
|
+
assemblyName: assemblyName
|
|
124
71
|
});
|
|
125
72
|
});
|
|
126
73
|
});
|
|
127
74
|
});
|
|
128
75
|
});
|
|
129
|
-
}
|
|
130
|
-
return callback();
|
|
131
|
-
}
|
|
76
|
+
});
|
|
132
77
|
}
|
|
133
78
|
|
|
134
79
|
function metadataParse(parser, options, callback) {
|
|
135
80
|
(options.tdsVersion < '7_2' ? parser.readUInt16LE : parser.readUInt32LE).call(parser, userType => {
|
|
136
81
|
parser.readUInt16LE(flags => {
|
|
137
82
|
parser.readUInt8(typeNumber => {
|
|
138
|
-
const type = TYPE[typeNumber];
|
|
83
|
+
const type = _dataType.TYPE[typeNumber];
|
|
139
84
|
|
|
140
85
|
if (!type) {
|
|
141
|
-
return parser.emit(new Error(sprintf('Unrecognised data type 0x%02X', typeNumber)));
|
|
86
|
+
return parser.emit('error', new Error((0, _sprintfJs.sprintf)('Unrecognised data type 0x%02X', typeNumber)));
|
|
142
87
|
}
|
|
143
88
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
89
|
+
switch (type.name) {
|
|
90
|
+
case 'Null':
|
|
91
|
+
case 'TinyInt':
|
|
92
|
+
case 'SmallInt':
|
|
93
|
+
case 'Int':
|
|
94
|
+
case 'BigInt':
|
|
95
|
+
case 'Real':
|
|
96
|
+
case 'Float':
|
|
97
|
+
case 'SmallMoney':
|
|
98
|
+
case 'Money':
|
|
99
|
+
case 'Bit':
|
|
100
|
+
case 'SmallDateTime':
|
|
101
|
+
case 'DateTime':
|
|
102
|
+
case 'Date':
|
|
103
|
+
return callback({
|
|
104
|
+
userType: userType,
|
|
105
|
+
flags: flags,
|
|
106
|
+
type: type,
|
|
107
|
+
collation: undefined,
|
|
108
|
+
precision: undefined,
|
|
109
|
+
scale: undefined,
|
|
110
|
+
dataLength: undefined,
|
|
111
|
+
schema: undefined,
|
|
112
|
+
udtInfo: undefined
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
case 'IntN':
|
|
116
|
+
case 'FloatN':
|
|
117
|
+
case 'MoneyN':
|
|
118
|
+
case 'BitN':
|
|
119
|
+
case 'UniqueIdentifier':
|
|
120
|
+
case 'DateTimeN':
|
|
121
|
+
return parser.readUInt8(dataLength => {
|
|
122
|
+
callback({
|
|
123
|
+
userType: userType,
|
|
124
|
+
flags: flags,
|
|
125
|
+
type: type,
|
|
126
|
+
collation: undefined,
|
|
127
|
+
precision: undefined,
|
|
128
|
+
scale: undefined,
|
|
129
|
+
dataLength: dataLength,
|
|
130
|
+
schema: undefined,
|
|
131
|
+
udtInfo: undefined
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
|
|
135
|
+
case 'Variant':
|
|
136
|
+
return parser.readUInt32LE(dataLength => {
|
|
137
|
+
callback({
|
|
138
|
+
userType: userType,
|
|
139
|
+
flags: flags,
|
|
140
|
+
type: type,
|
|
141
|
+
collation: undefined,
|
|
142
|
+
precision: undefined,
|
|
143
|
+
scale: undefined,
|
|
144
|
+
dataLength: dataLength,
|
|
145
|
+
schema: undefined,
|
|
146
|
+
udtInfo: undefined
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
case 'VarChar':
|
|
151
|
+
case 'Char':
|
|
152
|
+
case 'NVarChar':
|
|
153
|
+
case 'NChar':
|
|
154
|
+
return parser.readUInt16LE(dataLength => {
|
|
155
|
+
readCollation(parser, collation => {
|
|
156
|
+
callback({
|
|
157
|
+
userType: userType,
|
|
158
|
+
flags: flags,
|
|
159
|
+
type: type,
|
|
160
|
+
collation: collation,
|
|
161
|
+
precision: undefined,
|
|
162
|
+
scale: undefined,
|
|
163
|
+
dataLength: dataLength,
|
|
164
|
+
schema: undefined,
|
|
165
|
+
udtInfo: undefined
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
case 'Text':
|
|
171
|
+
case 'NText':
|
|
172
|
+
return parser.readUInt32LE(dataLength => {
|
|
173
|
+
readCollation(parser, collation => {
|
|
174
|
+
callback({
|
|
175
|
+
userType: userType,
|
|
176
|
+
flags: flags,
|
|
177
|
+
type: type,
|
|
178
|
+
collation: collation,
|
|
179
|
+
precision: undefined,
|
|
180
|
+
scale: undefined,
|
|
181
|
+
dataLength: dataLength,
|
|
182
|
+
schema: undefined,
|
|
183
|
+
udtInfo: undefined
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
case 'VarBinary':
|
|
189
|
+
case 'Binary':
|
|
190
|
+
return parser.readUInt16LE(dataLength => {
|
|
191
|
+
callback({
|
|
192
|
+
userType: userType,
|
|
193
|
+
flags: flags,
|
|
194
|
+
type: type,
|
|
195
|
+
collation: undefined,
|
|
196
|
+
precision: undefined,
|
|
197
|
+
scale: undefined,
|
|
198
|
+
dataLength: dataLength,
|
|
199
|
+
schema: undefined,
|
|
200
|
+
udtInfo: undefined
|
|
201
|
+
});
|
|
202
|
+
});
|
|
203
|
+
|
|
204
|
+
case 'Image':
|
|
205
|
+
return parser.readUInt32LE(dataLength => {
|
|
206
|
+
callback({
|
|
207
|
+
userType: userType,
|
|
208
|
+
flags: flags,
|
|
209
|
+
type: type,
|
|
210
|
+
collation: undefined,
|
|
211
|
+
precision: undefined,
|
|
212
|
+
scale: undefined,
|
|
213
|
+
dataLength: dataLength,
|
|
214
|
+
schema: undefined,
|
|
215
|
+
udtInfo: undefined
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
|
|
219
|
+
case 'Xml':
|
|
220
|
+
return readSchema(parser, schema => {
|
|
221
|
+
callback({
|
|
222
|
+
userType: userType,
|
|
223
|
+
flags: flags,
|
|
224
|
+
type: type,
|
|
225
|
+
collation: undefined,
|
|
226
|
+
precision: undefined,
|
|
227
|
+
scale: undefined,
|
|
228
|
+
dataLength: undefined,
|
|
229
|
+
schema: schema,
|
|
230
|
+
udtInfo: undefined
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
|
|
234
|
+
case 'Time':
|
|
235
|
+
case 'DateTime2':
|
|
236
|
+
case 'DateTimeOffset':
|
|
237
|
+
return parser.readUInt8(scale => {
|
|
238
|
+
callback({
|
|
239
|
+
userType: userType,
|
|
240
|
+
flags: flags,
|
|
241
|
+
type: type,
|
|
242
|
+
collation: undefined,
|
|
243
|
+
precision: undefined,
|
|
244
|
+
scale: scale,
|
|
245
|
+
dataLength: undefined,
|
|
246
|
+
schema: undefined,
|
|
247
|
+
udtInfo: undefined
|
|
248
|
+
});
|
|
249
|
+
});
|
|
250
|
+
|
|
251
|
+
case 'NumericN':
|
|
252
|
+
case 'DecimalN':
|
|
253
|
+
return parser.readUInt8(dataLength => {
|
|
254
|
+
parser.readUInt8(precision => {
|
|
255
|
+
parser.readUInt8(scale => {
|
|
256
|
+
callback({
|
|
257
|
+
userType: userType,
|
|
258
|
+
flags: flags,
|
|
259
|
+
type: type,
|
|
260
|
+
collation: undefined,
|
|
261
|
+
precision: precision,
|
|
262
|
+
scale: scale,
|
|
263
|
+
dataLength: dataLength,
|
|
264
|
+
schema: undefined,
|
|
265
|
+
udtInfo: undefined
|
|
165
266
|
});
|
|
166
267
|
});
|
|
167
268
|
});
|
|
168
269
|
});
|
|
169
|
-
|
|
170
|
-
|
|
270
|
+
|
|
271
|
+
case 'UDT':
|
|
272
|
+
return readUDTInfo(parser, udtInfo => {
|
|
273
|
+
callback({
|
|
274
|
+
userType: userType,
|
|
275
|
+
flags: flags,
|
|
276
|
+
type: type,
|
|
277
|
+
collation: undefined,
|
|
278
|
+
precision: undefined,
|
|
279
|
+
scale: undefined,
|
|
280
|
+
dataLength: undefined,
|
|
281
|
+
schema: undefined,
|
|
282
|
+
udtInfo: udtInfo
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
default:
|
|
287
|
+
return parser.emit('error', new Error((0, _sprintfJs.sprintf)('Unrecognised type %s', type.name)));
|
|
288
|
+
}
|
|
171
289
|
});
|
|
172
290
|
});
|
|
173
291
|
});
|
|
174
|
-
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
var _default = metadataParse;
|
|
295
|
+
exports.default = _default;
|
|
296
|
+
module.exports = metadataParse;
|
|
297
|
+
module.exports.readCollation = readCollation;
|
package/lib/ntlm-payload.js
CHANGED
|
@@ -9,13 +9,13 @@ var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/
|
|
|
9
9
|
|
|
10
10
|
var crypto = _interopRequireWildcard(require("crypto"));
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
var _jsbi = _interopRequireDefault(require("jsbi"));
|
|
13
13
|
|
|
14
|
-
function
|
|
14
|
+
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
19
|
|
|
20
20
|
class NTLMResponsePayload {
|
|
21
21
|
constructor(loginData) {
|
|
@@ -113,25 +113,16 @@ class NTLMResponsePayload {
|
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
createTimestamp(time) {
|
|
116
|
-
const tenthsOfAMicrosecond =
|
|
117
|
-
const hexArray = [];
|
|
118
|
-
let pair = [];
|
|
119
|
-
|
|
120
|
-
while (tenthsOfAMicrosecond.val() !== '0') {
|
|
121
|
-
const idx = tenthsOfAMicrosecond.mod(16);
|
|
122
|
-
pair.unshift(hex[idx]);
|
|
123
|
-
|
|
124
|
-
if (pair.length === 2) {
|
|
125
|
-
hexArray.push(pair.join(''));
|
|
126
|
-
pair = [];
|
|
127
|
-
}
|
|
128
|
-
}
|
|
116
|
+
const tenthsOfAMicrosecond = _jsbi.default.multiply(_jsbi.default.add(_jsbi.default.BigInt(time), _jsbi.default.BigInt(11644473600)), _jsbi.default.BigInt(10000000));
|
|
129
117
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
118
|
+
const lo = _jsbi.default.toNumber(_jsbi.default.bitwiseAnd(tenthsOfAMicrosecond, _jsbi.default.BigInt(0xffffffff)));
|
|
119
|
+
|
|
120
|
+
const hi = _jsbi.default.toNumber(_jsbi.default.bitwiseAnd(_jsbi.default.signedRightShift(tenthsOfAMicrosecond, _jsbi.default.BigInt(32)), _jsbi.default.BigInt(0xffffffff)));
|
|
133
121
|
|
|
134
|
-
|
|
122
|
+
const result = Buffer.alloc(8);
|
|
123
|
+
result.writeUInt32LE(lo, 0);
|
|
124
|
+
result.writeUInt32LE(hi, 4);
|
|
125
|
+
return result;
|
|
135
126
|
}
|
|
136
127
|
|
|
137
128
|
lmv2Response(domain, user, password, serverNonce, clientNonce) {
|
|
@@ -5,14 +5,15 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _bl = _interopRequireDefault(require("bl"));
|
|
9
|
+
|
|
10
|
+
var _readableStream = require("readable-stream");
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
var _packet = require("./packet");
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
Duplex = _require.Duplex;
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
15
|
|
|
15
|
-
class OutgoingMessageStream extends Duplex {
|
|
16
|
+
class OutgoingMessageStream extends _readableStream.Duplex {
|
|
16
17
|
constructor(debug, {
|
|
17
18
|
packetSize
|
|
18
19
|
}) {
|
|
@@ -21,7 +22,7 @@ class OutgoingMessageStream extends Duplex {
|
|
|
21
22
|
});
|
|
22
23
|
this.packetSize = packetSize;
|
|
23
24
|
this.debug = debug;
|
|
24
|
-
this.bl = new
|
|
25
|
+
this.bl = new _bl.default(); // When the writable side is ended, push `null`
|
|
25
26
|
// to also end the readable side.
|
|
26
27
|
|
|
27
28
|
this.on('finish', () => {
|
package/lib/packet.js
CHANGED
|
@@ -7,8 +7,7 @@ exports.isPacketComplete = isPacketComplete;
|
|
|
7
7
|
exports.packetLength = packetLength;
|
|
8
8
|
exports.Packet = exports.OFFSET = exports.TYPE = exports.HEADER_LENGTH = void 0;
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
sprintf = _require.sprintf;
|
|
10
|
+
var _sprintfJs = require("sprintf-js");
|
|
12
11
|
|
|
13
12
|
const HEADER_LENGTH = 8;
|
|
14
13
|
exports.HEADER_LENGTH = HEADER_LENGTH;
|
|
@@ -160,7 +159,7 @@ class Packet {
|
|
|
160
159
|
}
|
|
161
160
|
|
|
162
161
|
headerToString(indent = '') {
|
|
163
|
-
const text = sprintf('type:0x%02X(%s), status:0x%02X(%s), length:0x%04X, spid:0x%04X, packetId:0x%02X, window:0x%02X', this.buffer.readUInt8(OFFSET.Type), typeByValue[this.buffer.readUInt8(OFFSET.Type)], this.buffer.readUInt8(OFFSET.Status), this.statusAsString(), this.buffer.readUInt16BE(OFFSET.Length), this.buffer.readUInt16BE(OFFSET.SPID), this.buffer.readUInt8(OFFSET.PacketID), this.buffer.readUInt8(OFFSET.Window));
|
|
162
|
+
const text = (0, _sprintfJs.sprintf)('type:0x%02X(%s), status:0x%02X(%s), length:0x%04X, spid:0x%04X, packetId:0x%02X, window:0x%02X', this.buffer.readUInt8(OFFSET.Type), typeByValue[this.buffer.readUInt8(OFFSET.Type)], this.buffer.readUInt8(OFFSET.Status), this.statusAsString(), this.buffer.readUInt16BE(OFFSET.Length), this.buffer.readUInt16BE(OFFSET.SPID), this.buffer.readUInt8(OFFSET.PacketID), this.buffer.readUInt8(OFFSET.Window));
|
|
164
163
|
return indent + text;
|
|
165
164
|
}
|
|
166
165
|
|
|
@@ -175,7 +174,7 @@ class Packet {
|
|
|
175
174
|
for (let offset = 0; offset < data.length; offset++) {
|
|
176
175
|
if (offset % BYTES_PER_LINE === 0) {
|
|
177
176
|
dataDump += indent;
|
|
178
|
-
dataDump += sprintf('%04X ', offset);
|
|
177
|
+
dataDump += (0, _sprintfJs.sprintf)('%04X ', offset);
|
|
179
178
|
}
|
|
180
179
|
|
|
181
180
|
if (data[offset] < 0x20 || data[offset] > 0x7E) {
|
|
@@ -189,7 +188,7 @@ class Packet {
|
|
|
189
188
|
}
|
|
190
189
|
|
|
191
190
|
if (data[offset] != null) {
|
|
192
|
-
dataDump += sprintf('%02X', data[offset]);
|
|
191
|
+
dataDump += (0, _sprintfJs.sprintf)('%02X', data[offset]);
|
|
193
192
|
}
|
|
194
193
|
|
|
195
194
|
if ((offset + 1) % BYTES_PER_GROUP === 0 && !((offset + 1) % BYTES_PER_LINE === 0)) {
|
package/lib/prelogin-payload.js
CHANGED
|
@@ -5,13 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
+
var _sprintfJs = require("sprintf-js");
|
|
9
|
+
|
|
8
10
|
var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
|
|
9
11
|
|
|
10
12
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
13
|
|
|
12
|
-
const _require = require('sprintf-js'),
|
|
13
|
-
sprintf = _require.sprintf;
|
|
14
|
-
|
|
15
14
|
const optionBufferSize = 20;
|
|
16
15
|
const VERSION = 0x000000001;
|
|
17
16
|
const SUBBUILD = 0x0001;
|
|
@@ -231,7 +230,7 @@ class PreloginPayload {
|
|
|
231
230
|
}
|
|
232
231
|
|
|
233
232
|
toString(indent = '') {
|
|
234
|
-
return indent + 'PreLogin - ' + sprintf('version:%d.%d.%d.%d %d, encryption:0x%02X(%s), instopt:0x%02X, threadId:0x%08X, mars:0x%02X(%s)', this.version.major, this.version.minor, this.version.patch, this.version.trivial, this.version.subbuild, this.encryption ? this.encryption : 0, this.encryptionString ? this.encryptionString : '', this.instance ? this.instance : 0, this.threadId ? this.threadId : 0, this.mars ? this.mars : 0, this.marsString ? this.marsString : '');
|
|
233
|
+
return indent + 'PreLogin - ' + (0, _sprintfJs.sprintf)('version:%d.%d.%d.%d %d, encryption:0x%02X(%s), instopt:0x%02X, threadId:0x%08X, mars:0x%02X(%s)', this.version.major, this.version.minor, this.version.patch, this.version.trivial, this.version.subbuild, this.encryption ? this.encryption : 0, this.encryptionString ? this.encryptionString : '', this.instance ? this.instance : 0, this.threadId ? this.threadId : 0, this.mars ? this.mars : 0, this.marsString ? this.marsString : '');
|
|
235
234
|
}
|
|
236
235
|
|
|
237
236
|
}
|
package/lib/request.js
CHANGED
|
@@ -7,9 +7,9 @@ exports.default = void 0;
|
|
|
7
7
|
|
|
8
8
|
var _events = require("events");
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
var _dataType = require("./data-type");
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
var _errors = require("./errors");
|
|
13
13
|
|
|
14
14
|
class Request extends _events.EventEmitter {
|
|
15
15
|
constructor(sqlTextOrProcedure, callback) {
|
|
@@ -106,10 +106,10 @@ class Request extends _events.EventEmitter {
|
|
|
106
106
|
|
|
107
107
|
this.originalParameters = this.parameters;
|
|
108
108
|
this.parameters = [];
|
|
109
|
-
this.addParameter('statement',
|
|
109
|
+
this.addParameter('statement', _dataType.typeByName.NVarChar, this.sqlTextOrProcedure);
|
|
110
110
|
|
|
111
111
|
if (this.originalParameters.length) {
|
|
112
|
-
this.addParameter('params',
|
|
112
|
+
this.addParameter('params', _dataType.typeByName.NVarChar, this.makeParamsParameter(this.originalParameters));
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
for (let i = 0, len = this.originalParameters.length; i < len; i++) {
|
|
@@ -123,29 +123,29 @@ class Request extends _events.EventEmitter {
|
|
|
123
123
|
transformIntoPrepareRpc() {
|
|
124
124
|
this.originalParameters = this.parameters;
|
|
125
125
|
this.parameters = [];
|
|
126
|
-
this.addOutputParameter('handle',
|
|
127
|
-
this.addParameter('params',
|
|
128
|
-
this.addParameter('stmt',
|
|
126
|
+
this.addOutputParameter('handle', _dataType.typeByName.Int, undefined);
|
|
127
|
+
this.addParameter('params', _dataType.typeByName.NVarChar, this.makeParamsParameter(this.originalParameters));
|
|
128
|
+
this.addParameter('stmt', _dataType.typeByName.NVarChar, this.sqlTextOrProcedure);
|
|
129
129
|
this.sqlTextOrProcedure = 'sp_prepare';
|
|
130
130
|
this.preparing = true;
|
|
131
131
|
this.on('returnValue', (name, value) => {
|
|
132
132
|
if (name === 'handle') {
|
|
133
133
|
this.handle = value;
|
|
134
134
|
} else {
|
|
135
|
-
this.error = RequestError(`Tedious > Unexpected output parameter ${name} from sp_prepare`);
|
|
135
|
+
this.error = (0, _errors.RequestError)(`Tedious > Unexpected output parameter ${name} from sp_prepare`);
|
|
136
136
|
}
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
transformIntoUnprepareRpc() {
|
|
141
141
|
this.parameters = [];
|
|
142
|
-
this.addParameter('handle',
|
|
142
|
+
this.addParameter('handle', _dataType.typeByName.Int, this.handle);
|
|
143
143
|
this.sqlTextOrProcedure = 'sp_unprepare';
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
transformIntoExecuteRpc(parameters) {
|
|
147
147
|
this.parameters = [];
|
|
148
|
-
this.addParameter('handle',
|
|
148
|
+
this.addParameter('handle', _dataType.typeByName.Int, this.handle);
|
|
149
149
|
|
|
150
150
|
for (let i = 0, len = this.originalParameters.length; i < len; i++) {
|
|
151
151
|
const parameter = this.originalParameters[i];
|
|
@@ -166,7 +166,7 @@ class Request extends _events.EventEmitter {
|
|
|
166
166
|
const value = parameter.type.validate(parameter.value);
|
|
167
167
|
|
|
168
168
|
if (value instanceof TypeError) {
|
|
169
|
-
return this.error = new RequestError('Validation failed for parameter \'' + parameter.name + '\'. ' + value.message, 'EPARAM');
|
|
169
|
+
return this.error = new _errors.RequestError('Validation failed for parameter \'' + parameter.name + '\'. ' + value.message, 'EPARAM');
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
parameter.value = value;
|