tedious 1.13.2 → 1.14.0
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/appveyor.yml +2 -0
- package/lib/all-headers.js +2 -5
- package/lib/buffertools.js +1 -1
- package/lib/bulk-load.js +18 -27
- package/lib/collation.js +78 -6
- package/lib/connection.js +120 -159
- package/lib/data-type.js +73 -72
- package/lib/debug.js +5 -17
- package/lib/errors.js +8 -16
- package/lib/guid-parser.js +2 -5
- package/lib/instance-lookup.js +7 -16
- package/lib/library.js +1 -5
- package/lib/login7-payload.js +16 -34
- package/lib/message-io.js +21 -35
- package/lib/metadata-parser.js +22 -18
- package/lib/ntlm-payload.js +9 -24
- package/lib/packet.js +11 -18
- package/lib/prelogin-payload.js +10 -19
- package/lib/request.js +15 -24
- package/lib/rpcrequest-payload.js +7 -16
- package/lib/special-stored-procedure.js +3 -7
- package/lib/sqlbatch-payload.js +7 -16
- package/lib/stream-parser.js +24 -36
- package/lib/tds-versions.js +2 -8
- package/lib/tedious.js +8 -52
- package/lib/token/colmetadata-token-parser.js +4 -14
- package/lib/token/done-token-parser.js +6 -9
- package/lib/token/env-change-token-parser.js +4 -9
- package/lib/token/infoerror-token-parser.js +9 -12
- package/lib/token/loginack-token-parser.js +8 -8
- package/lib/token/nbcrow-token-parser.js +5 -15
- package/lib/token/order-token-parser.js +3 -9
- package/lib/token/returnstatus-token-parser.js +3 -9
- package/lib/token/returnvalue-token-parser.js +7 -20
- package/lib/token/row-token-parser.js +5 -15
- package/lib/token/sspi-token-parser.js +3 -8
- package/lib/token/stream-parser.js +60 -58
- package/lib/token/token-stream-parser.js +14 -23
- package/lib/token/token.js +3 -7
- package/lib/tracking-buffer/bigint.js +2 -5
- package/lib/tracking-buffer/readable-tracking-buffer.js +6 -13
- package/lib/tracking-buffer/tracking-buffer.js +2 -16
- package/lib/tracking-buffer/writable-tracking-buffer.js +3 -15
- package/lib/transaction.js +7 -12
- package/lib/value-parser.js +95 -69
- package/package.json +6 -1
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
Object.defineProperty(exports, '__esModule', {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.convertLEBytesToString = convertLEBytesToString;
|
|
7
|
-
exports.numberToInt64LE = numberToInt64LE;
|
|
8
3
|
function isZero(array) {
|
|
9
4
|
for (var j = 0, len = array.length; j < len; j++) {
|
|
10
5
|
var byte = array[j];
|
|
@@ -46,6 +41,7 @@ function invert(array) {
|
|
|
46
41
|
}
|
|
47
42
|
}
|
|
48
43
|
|
|
44
|
+
module.exports.convertLEBytesToString = convertLEBytesToString;
|
|
49
45
|
function convertLEBytesToString(buffer) {
|
|
50
46
|
var array = Array.prototype.slice.call(buffer, 0, buffer.length);
|
|
51
47
|
if (isZero(array)) {
|
|
@@ -67,6 +63,7 @@ function convertLEBytesToString(buffer) {
|
|
|
67
63
|
}
|
|
68
64
|
}
|
|
69
65
|
|
|
66
|
+
module.exports.numberToInt64LE = numberToInt64LE;
|
|
70
67
|
function numberToInt64LE(num) {
|
|
71
68
|
// adapted from https://github.com/broofa/node-int64
|
|
72
69
|
var negate = num < 0;
|
|
@@ -4,11 +4,7 @@ var _createClass = require('babel-runtime/helpers/create-class')['default'];
|
|
|
4
4
|
|
|
5
5
|
var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
var _bigint = require('./bigint');
|
|
7
|
+
var convertLEBytesToString = require('./bigint').convertLEBytesToString;
|
|
12
8
|
|
|
13
9
|
/*
|
|
14
10
|
A Buffer-like class that tracks position.
|
|
@@ -17,7 +13,7 @@ var _bigint = require('./bigint');
|
|
|
17
13
|
When reading, if the read would pass the end of the buffer, an error object is thrown.
|
|
18
14
|
*/
|
|
19
15
|
|
|
20
|
-
|
|
16
|
+
module.exports = (function () {
|
|
21
17
|
function ReadableTrackingBuffer(buffer, encoding) {
|
|
22
18
|
_classCallCheck(this, ReadableTrackingBuffer);
|
|
23
19
|
|
|
@@ -43,7 +39,7 @@ var ReadableTrackingBuffer = (function () {
|
|
|
43
39
|
this.previousPosition = this.position;
|
|
44
40
|
var available = this.buffer.length - this.position;
|
|
45
41
|
if (available < lengthRequired) {
|
|
46
|
-
var e = new Error(
|
|
42
|
+
var e = new Error('required : ' + lengthRequired + ', available : ' + available);
|
|
47
43
|
e.code = 'oob';
|
|
48
44
|
throw e;
|
|
49
45
|
}
|
|
@@ -180,7 +176,7 @@ var ReadableTrackingBuffer = (function () {
|
|
|
180
176
|
var low = this.readUInt32LE();
|
|
181
177
|
var high = this.readUInt32LE();
|
|
182
178
|
if (high >= 2 << 53 - 32) {
|
|
183
|
-
console.warn(
|
|
179
|
+
console.warn('Read UInt64LE > 53 bits : high=' + high + ', low=' + low);
|
|
184
180
|
}
|
|
185
181
|
return low + 0x100000000 * high;
|
|
186
182
|
}
|
|
@@ -249,7 +245,7 @@ var ReadableTrackingBuffer = (function () {
|
|
|
249
245
|
value: function readAsStringBigIntLE(length) {
|
|
250
246
|
this.assertEnoughLeftFor(length);
|
|
251
247
|
this.position += length;
|
|
252
|
-
return
|
|
248
|
+
return convertLEBytesToString(this.buffer.slice(this.position - length, this.position));
|
|
253
249
|
}
|
|
254
250
|
}, {
|
|
255
251
|
key: 'readAsStringInt64LE',
|
|
@@ -259,7 +255,4 @@ var ReadableTrackingBuffer = (function () {
|
|
|
259
255
|
}]);
|
|
260
256
|
|
|
261
257
|
return ReadableTrackingBuffer;
|
|
262
|
-
})();
|
|
263
|
-
|
|
264
|
-
exports['default'] = ReadableTrackingBuffer;
|
|
265
|
-
module.exports = exports['default'];
|
|
258
|
+
})();
|
|
@@ -1,18 +1,4 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, '__esModule', {
|
|
6
|
-
value: true
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
var _readableTrackingBuffer = require('./readable-tracking-buffer');
|
|
10
|
-
|
|
11
|
-
var _readableTrackingBuffer2 = _interopRequireDefault(_readableTrackingBuffer);
|
|
12
|
-
|
|
13
|
-
var _writableTrackingBuffer = require('./writable-tracking-buffer');
|
|
14
|
-
|
|
15
|
-
var _writableTrackingBuffer2 = _interopRequireDefault(_writableTrackingBuffer);
|
|
16
|
-
|
|
17
|
-
exports.ReadableTrackingBuffer = _readableTrackingBuffer2['default'];
|
|
18
|
-
exports.WritableTrackingBuffer = _writableTrackingBuffer2['default'];
|
|
3
|
+
module.exports.ReadableTrackingBuffer = require('./readable-tracking-buffer');
|
|
4
|
+
module.exports.WritableTrackingBuffer = require('./writable-tracking-buffer');
|
|
@@ -4,15 +4,7 @@ var _createClass = require('babel-runtime/helpers/create-class')['default'];
|
|
|
4
4
|
|
|
5
5
|
var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];
|
|
6
6
|
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
Object.defineProperty(exports, '__esModule', {
|
|
10
|
-
value: true
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
var _bigint = require('./bigint');
|
|
14
|
-
|
|
15
|
-
var bigint = _interopRequireWildcard(_bigint);
|
|
7
|
+
var bigint = require('./bigint');
|
|
16
8
|
|
|
17
9
|
require('../buffertools');
|
|
18
10
|
|
|
@@ -26,8 +18,7 @@ var UNKNOWN_PLP_LEN = new Buffer([0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
|
|
26
18
|
As values are written, the position advances by the size of the written data.
|
|
27
19
|
When writing, automatically allocates new buffers if there's not enough space.
|
|
28
20
|
*/
|
|
29
|
-
|
|
30
|
-
var WritableTrackingBuffer = (function () {
|
|
21
|
+
module.exports = (function () {
|
|
31
22
|
function WritableTrackingBuffer(initialSize, encoding, doubleSizeGrowth) {
|
|
32
23
|
_classCallCheck(this, WritableTrackingBuffer);
|
|
33
24
|
|
|
@@ -322,7 +313,4 @@ var WritableTrackingBuffer = (function () {
|
|
|
322
313
|
}]);
|
|
323
314
|
|
|
324
315
|
return WritableTrackingBuffer;
|
|
325
|
-
})();
|
|
326
|
-
|
|
327
|
-
exports['default'] = WritableTrackingBuffer;
|
|
328
|
-
module.exports = exports['default'];
|
|
316
|
+
})();
|
package/lib/transaction.js
CHANGED
|
@@ -4,9 +4,6 @@ var _createClass = require('babel-runtime/helpers/create-class')['default'];
|
|
|
4
4
|
|
|
5
5
|
var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default'];
|
|
6
6
|
|
|
7
|
-
Object.defineProperty(exports, '__esModule', {
|
|
8
|
-
value: true
|
|
9
|
-
});
|
|
10
7
|
var WritableTrackingBuffer = require('./tracking-buffer/writable-tracking-buffer');
|
|
11
8
|
var writeAllHeaders = require('./all-headers').writeToTrackingBuffer;
|
|
12
9
|
|
|
@@ -14,7 +11,7 @@ var writeAllHeaders = require('./all-headers').writeToTrackingBuffer;
|
|
|
14
11
|
s2.2.6.8
|
|
15
12
|
*/
|
|
16
13
|
|
|
17
|
-
var OPERATION_TYPE = {
|
|
14
|
+
var OPERATION_TYPE = module.exports.OPERATION_TYPE = {
|
|
18
15
|
TM_GET_DTC_ADDRESS: 0x00,
|
|
19
16
|
TM_PROPAGATE_XACT: 0x01,
|
|
20
17
|
TM_BEGIN_XACT: 0x05,
|
|
@@ -24,8 +21,7 @@ var OPERATION_TYPE = {
|
|
|
24
21
|
TM_SAVE_XACT: 0x09
|
|
25
22
|
};
|
|
26
23
|
|
|
27
|
-
exports.
|
|
28
|
-
var ISOLATION_LEVEL = {
|
|
24
|
+
var ISOLATION_LEVEL = module.exports.ISOLATION_LEVEL = {
|
|
29
25
|
NO_CHANGE: 0x00,
|
|
30
26
|
READ_UNCOMMITTED: 0x01,
|
|
31
27
|
READ_COMMITTED: 0x02,
|
|
@@ -34,7 +30,6 @@ var ISOLATION_LEVEL = {
|
|
|
34
30
|
SNAPSHOT: 0x05
|
|
35
31
|
};
|
|
36
32
|
|
|
37
|
-
exports.ISOLATION_LEVEL = ISOLATION_LEVEL;
|
|
38
33
|
var isolationLevelByValue = {};
|
|
39
34
|
for (var _name in ISOLATION_LEVEL) {
|
|
40
35
|
var value = ISOLATION_LEVEL[_name];
|
|
@@ -65,7 +60,7 @@ var Transaction = (function () {
|
|
|
65
60
|
return {
|
|
66
61
|
data: buffer.data,
|
|
67
62
|
toString: function toString() {
|
|
68
|
-
return
|
|
63
|
+
return 'Begin Transaction: name=' + _this.name + ', isolationLevel=' + isolationLevelByValue[_this.isolationLevel];
|
|
69
64
|
}
|
|
70
65
|
};
|
|
71
66
|
}
|
|
@@ -85,7 +80,7 @@ var Transaction = (function () {
|
|
|
85
80
|
return {
|
|
86
81
|
data: buffer.data,
|
|
87
82
|
toString: function toString() {
|
|
88
|
-
return
|
|
83
|
+
return 'Commit Transaction: name=' + _this2.name;
|
|
89
84
|
}
|
|
90
85
|
};
|
|
91
86
|
}
|
|
@@ -105,7 +100,7 @@ var Transaction = (function () {
|
|
|
105
100
|
return {
|
|
106
101
|
data: buffer.data,
|
|
107
102
|
toString: function toString() {
|
|
108
|
-
return
|
|
103
|
+
return 'Rollback Transaction: name=' + _this3.name;
|
|
109
104
|
}
|
|
110
105
|
};
|
|
111
106
|
}
|
|
@@ -123,7 +118,7 @@ var Transaction = (function () {
|
|
|
123
118
|
return {
|
|
124
119
|
data: buffer.data,
|
|
125
120
|
toString: function toString() {
|
|
126
|
-
return
|
|
121
|
+
return 'Save Transaction: name=' + _this4.name;
|
|
127
122
|
}
|
|
128
123
|
};
|
|
129
124
|
}
|
|
@@ -149,4 +144,4 @@ var Transaction = (function () {
|
|
|
149
144
|
return Transaction;
|
|
150
145
|
})();
|
|
151
146
|
|
|
152
|
-
exports.Transaction = Transaction;
|
|
147
|
+
module.exports.Transaction = Transaction;
|
package/lib/value-parser.js
CHANGED
|
@@ -1,24 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var iconv = require('iconv-lite');
|
|
4
|
+
var sprintf = require('sprintf').sprintf;
|
|
5
|
+
var TYPE = require('./data-type').TYPE;
|
|
6
|
+
var guidParser = require('./guid-parser');
|
|
4
7
|
|
|
5
|
-
var
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
var _iconvLite = require('iconv-lite');
|
|
12
|
-
|
|
13
|
-
var _iconvLite2 = _interopRequireDefault(_iconvLite);
|
|
14
|
-
|
|
15
|
-
var _sprintf = require('sprintf');
|
|
16
|
-
|
|
17
|
-
var _guidParser = require('./guid-parser');
|
|
18
|
-
|
|
19
|
-
var guidParser = _interopRequireWildcard(_guidParser);
|
|
20
|
-
|
|
21
|
-
var _trackingBufferBigint = require('./tracking-buffer/bigint');
|
|
8
|
+
var readPrecision = require('./metadata-parser').readPrecision;
|
|
9
|
+
var readScale = require('./metadata-parser').readScale;
|
|
10
|
+
var readCollation = require('./metadata-parser').readCollation;
|
|
11
|
+
var convertLEBytesToString = require('./tracking-buffer/bigint').convertLEBytesToString;
|
|
22
12
|
|
|
23
13
|
var NULL = (1 << 16) - 1;
|
|
24
14
|
var MAX = (1 << 16) - 1;
|
|
@@ -52,6 +42,10 @@ function readDataLength(parser, type, metaData, textPointerNull, callback) {
|
|
|
52
42
|
return callback(0);
|
|
53
43
|
}
|
|
54
44
|
|
|
45
|
+
if (metaData.isVariantValue) {
|
|
46
|
+
return callback(metaData.dataLength);
|
|
47
|
+
}
|
|
48
|
+
|
|
55
49
|
// s2.2.4.2.1
|
|
56
50
|
switch (type.id & 0x30) {
|
|
57
51
|
case 0x10:
|
|
@@ -76,18 +70,20 @@ function readDataLength(parser, type, metaData, textPointerNull, callback) {
|
|
|
76
70
|
return parser.readUInt32LE(callback);
|
|
77
71
|
|
|
78
72
|
default:
|
|
79
|
-
return parser.emit('error', new Error(
|
|
73
|
+
return parser.emit('error', new Error('Unsupported dataLengthLength ' + type.dataLengthLength + ' for data type ' + type.name));
|
|
80
74
|
}
|
|
81
75
|
} else {
|
|
82
76
|
return callback(undefined);
|
|
83
77
|
}
|
|
78
|
+
break;
|
|
84
79
|
|
|
85
80
|
case 0x30:
|
|
86
81
|
return callback(1 << ((type.id & 0x0C) >> 2));
|
|
87
82
|
}
|
|
88
83
|
}
|
|
89
84
|
|
|
90
|
-
exports
|
|
85
|
+
module.exports = valueParse;
|
|
86
|
+
function valueParse(parser, metaData, options, callback) {
|
|
91
87
|
var type = metaData.type;
|
|
92
88
|
|
|
93
89
|
readTextPointerNull(parser, type, function (textPointerNull) {
|
|
@@ -107,7 +103,7 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
107
103
|
|
|
108
104
|
case 'BigInt':
|
|
109
105
|
return parser.readBuffer(8, function (buffer) {
|
|
110
|
-
callback(
|
|
106
|
+
callback(convertLEBytesToString(buffer));
|
|
111
107
|
});
|
|
112
108
|
|
|
113
109
|
case 'IntN':
|
|
@@ -122,12 +118,13 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
122
118
|
return parser.readInt32LE(callback);
|
|
123
119
|
case 8:
|
|
124
120
|
return parser.readBuffer(8, function (buffer) {
|
|
125
|
-
callback(
|
|
121
|
+
callback(convertLEBytesToString(buffer));
|
|
126
122
|
});
|
|
127
123
|
|
|
128
124
|
default:
|
|
129
|
-
return parser.emit('error', new Error(
|
|
125
|
+
return parser.emit('error', new Error('Unsupported dataLength ' + dataLength + ' for IntN'));
|
|
130
126
|
}
|
|
127
|
+
break;
|
|
131
128
|
|
|
132
129
|
case 'Real':
|
|
133
130
|
return parser.readFloatLE(callback);
|
|
@@ -145,8 +142,9 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
145
142
|
return parser.readDoubleLE(callback);
|
|
146
143
|
|
|
147
144
|
default:
|
|
148
|
-
return parser.emit('error', new Error(
|
|
145
|
+
return parser.emit('error', new Error('Unsupported dataLength ' + dataLength + ' for FloatN'));
|
|
149
146
|
}
|
|
147
|
+
break;
|
|
150
148
|
|
|
151
149
|
case 'Money':
|
|
152
150
|
case 'SmallMoney':
|
|
@@ -166,8 +164,9 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
166
164
|
});
|
|
167
165
|
|
|
168
166
|
default:
|
|
169
|
-
return parser.emit('error', new Error(
|
|
167
|
+
return parser.emit('error', new Error('Unsupported dataLength ' + dataLength + ' for MoneyN'));
|
|
170
168
|
}
|
|
169
|
+
break;
|
|
171
170
|
|
|
172
171
|
case 'Bit':
|
|
173
172
|
return parser.readUInt8(function (value) {
|
|
@@ -183,6 +182,7 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
183
182
|
callback(!!value);
|
|
184
183
|
});
|
|
185
184
|
}
|
|
185
|
+
break;
|
|
186
186
|
|
|
187
187
|
case 'VarChar':
|
|
188
188
|
case 'Char':
|
|
@@ -192,6 +192,7 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
192
192
|
} else {
|
|
193
193
|
return readChars(parser, dataLength, codepage, callback);
|
|
194
194
|
}
|
|
195
|
+
break;
|
|
195
196
|
|
|
196
197
|
case 'NVarChar':
|
|
197
198
|
case 'NChar':
|
|
@@ -200,6 +201,7 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
200
201
|
} else {
|
|
201
202
|
return readNChars(parser, dataLength, callback);
|
|
202
203
|
}
|
|
204
|
+
break;
|
|
203
205
|
|
|
204
206
|
case 'VarBinary':
|
|
205
207
|
case 'Binary':
|
|
@@ -232,6 +234,7 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
232
234
|
} else {
|
|
233
235
|
return readBinary(parser, dataLength, callback);
|
|
234
236
|
}
|
|
237
|
+
break;
|
|
235
238
|
|
|
236
239
|
case 'Xml':
|
|
237
240
|
return readMaxNChars(parser, callback);
|
|
@@ -251,42 +254,39 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
251
254
|
case 8:
|
|
252
255
|
return readDateTime(parser, options.useUTC, callback);
|
|
253
256
|
}
|
|
257
|
+
break;
|
|
254
258
|
|
|
255
259
|
case 'TimeN':
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
});
|
|
260
|
+
if (dataLength === 0) {
|
|
261
|
+
return callback(null);
|
|
262
|
+
} else {
|
|
263
|
+
return readTime(parser, dataLength, metaData.scale, options.useUTC, callback);
|
|
264
|
+
}
|
|
265
|
+
break;
|
|
263
266
|
|
|
264
267
|
case 'DateN':
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
});
|
|
268
|
+
if (dataLength === 0) {
|
|
269
|
+
return callback(null);
|
|
270
|
+
} else {
|
|
271
|
+
return readDate(parser, options.useUTC, callback);
|
|
272
|
+
}
|
|
273
|
+
break;
|
|
272
274
|
|
|
273
275
|
case 'DateTime2N':
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
});
|
|
276
|
+
if (dataLength === 0) {
|
|
277
|
+
return callback(null);
|
|
278
|
+
} else {
|
|
279
|
+
return readDateTime2(parser, dataLength, metaData.scale, options.useUTC, callback);
|
|
280
|
+
}
|
|
281
|
+
break;
|
|
281
282
|
|
|
282
283
|
case 'DateTimeOffsetN':
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
});
|
|
284
|
+
if (dataLength === 0) {
|
|
285
|
+
return callback(null);
|
|
286
|
+
} else {
|
|
287
|
+
return readDateTimeOffset(parser, dataLength, metaData.scale, callback);
|
|
288
|
+
}
|
|
289
|
+
break;
|
|
290
290
|
|
|
291
291
|
case 'NumericN':
|
|
292
292
|
case 'DecimalN':
|
|
@@ -311,7 +311,7 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
311
311
|
readValue = parser.readUNumeric128LE;
|
|
312
312
|
break;
|
|
313
313
|
default:
|
|
314
|
-
return parser.emit('error', new Error(
|
|
314
|
+
return parser.emit('error', new Error(sprintf('Unsupported numeric size %d', dataLength - 1)));
|
|
315
315
|
}
|
|
316
316
|
|
|
317
317
|
readValue.call(parser, function (value) {
|
|
@@ -331,18 +331,46 @@ exports['default'] = function (parser, metaData, options, callback) {
|
|
|
331
331
|
});
|
|
332
332
|
|
|
333
333
|
default:
|
|
334
|
-
return parser.emit('error', new Error(
|
|
334
|
+
return parser.emit('error', new Error(sprintf('Unsupported guid size %d', dataLength - 1)));
|
|
335
335
|
}
|
|
336
|
+
break;
|
|
336
337
|
|
|
337
338
|
case 'UDT':
|
|
338
339
|
return readMaxBinary(parser, callback);
|
|
339
340
|
|
|
341
|
+
case 'Variant':
|
|
342
|
+
var valueMetaData = metaData.valueMetaData = {};
|
|
343
|
+
Object.defineProperty(valueMetaData, 'isVariantValue', { value: true });
|
|
344
|
+
return parser.readUInt8(function (baseType) {
|
|
345
|
+
return parser.readUInt8(function (propBytes) {
|
|
346
|
+
valueMetaData.dataLength = dataLength - propBytes - 2;
|
|
347
|
+
valueMetaData.type = TYPE[baseType];
|
|
348
|
+
return readPrecision(parser, valueMetaData.type, function (precision) {
|
|
349
|
+
valueMetaData.precision = precision;
|
|
350
|
+
return readScale(parser, valueMetaData.type, function (scale) {
|
|
351
|
+
valueMetaData.scale = scale;
|
|
352
|
+
return readCollation(parser, valueMetaData.type, function (collation) {
|
|
353
|
+
valueMetaData.collation = collation;
|
|
354
|
+
if (baseType === 0xA5 || baseType === 0xAD || baseType === 0xA7 || baseType === 0xAF || baseType === 0xE7 || baseType === 0xEF) {
|
|
355
|
+
return readDataLength(parser, valueMetaData.type, {}, null, function (maxDataLength) {
|
|
356
|
+
valueMetaData.dataLength = maxDataLength;
|
|
357
|
+
return valueParse(parser, valueMetaData, options, callback);
|
|
358
|
+
});
|
|
359
|
+
} else {
|
|
360
|
+
return valueParse(parser, valueMetaData, options, callback);
|
|
361
|
+
}
|
|
362
|
+
});
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
});
|
|
366
|
+
});
|
|
367
|
+
|
|
340
368
|
default:
|
|
341
|
-
return parser.emit('error', new Error(
|
|
369
|
+
return parser.emit('error', new Error(sprintf('Unrecognised type %s', type.name)));
|
|
342
370
|
}
|
|
343
371
|
});
|
|
344
372
|
});
|
|
345
|
-
}
|
|
373
|
+
}
|
|
346
374
|
|
|
347
375
|
function readBinary(parser, dataLength, callback) {
|
|
348
376
|
if (dataLength === NULL) {
|
|
@@ -361,7 +389,7 @@ function readChars(parser, dataLength, codepage, callback) {
|
|
|
361
389
|
return callback(null);
|
|
362
390
|
} else {
|
|
363
391
|
return parser.readBuffer(dataLength, function (data) {
|
|
364
|
-
callback(
|
|
392
|
+
callback(iconv.decode(data, codepage));
|
|
365
393
|
});
|
|
366
394
|
}
|
|
367
395
|
}
|
|
@@ -371,7 +399,7 @@ function readNChars(parser, dataLength, callback) {
|
|
|
371
399
|
return callback(null);
|
|
372
400
|
} else {
|
|
373
401
|
return parser.readBuffer(dataLength, function (data) {
|
|
374
|
-
callback(data.toString(
|
|
402
|
+
callback(data.toString('ucs2'));
|
|
375
403
|
});
|
|
376
404
|
}
|
|
377
405
|
}
|
|
@@ -387,7 +415,7 @@ function readMaxChars(parser, codepage, callback) {
|
|
|
387
415
|
|
|
388
416
|
readMax(parser, function (data) {
|
|
389
417
|
if (data) {
|
|
390
|
-
callback(
|
|
418
|
+
callback(iconv.decode(data, codepage));
|
|
391
419
|
} else {
|
|
392
420
|
callback(null);
|
|
393
421
|
}
|
|
@@ -415,7 +443,7 @@ function readMax(parser, callback) {
|
|
|
415
443
|
var high = type.readUInt32LE(4);
|
|
416
444
|
|
|
417
445
|
if (high >= 2 << 53 - 32) {
|
|
418
|
-
console.warn(
|
|
446
|
+
console.warn('Read UInt64LE > 53 bits : high=' + high + ', low=' + low);
|
|
419
447
|
}
|
|
420
448
|
|
|
421
449
|
var expectedLength = low + 0x100000000 * high;
|
|
@@ -427,8 +455,7 @@ function readMax(parser, callback) {
|
|
|
427
455
|
function readMaxKnownLength(parser, totalLength, callback) {
|
|
428
456
|
var data = new Buffer(totalLength);
|
|
429
457
|
|
|
430
|
-
var offset = 0
|
|
431
|
-
chunkLength = undefined;
|
|
458
|
+
var offset = 0;
|
|
432
459
|
function next(done) {
|
|
433
460
|
parser.readUInt32LE(function (chunkLength) {
|
|
434
461
|
if (!chunkLength) {
|
|
@@ -446,7 +473,7 @@ function readMaxKnownLength(parser, totalLength, callback) {
|
|
|
446
473
|
|
|
447
474
|
next(function () {
|
|
448
475
|
if (offset !== totalLength) {
|
|
449
|
-
parser.emit('error', new Error(
|
|
476
|
+
parser.emit('error', new Error('Partially Length-prefixed Bytes unmatched lengths : expected ' + totalLength + ', but got ' + offset + ' bytes'));
|
|
450
477
|
}
|
|
451
478
|
|
|
452
479
|
callback(data);
|
|
@@ -542,7 +569,7 @@ function readTime(parser, dataLength, scale, useUTC, callback) {
|
|
|
542
569
|
} else {
|
|
543
570
|
date = new Date(1970, 0, 1, 0, 0, 0, value / 10000);
|
|
544
571
|
}
|
|
545
|
-
Object.defineProperty(date,
|
|
572
|
+
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
546
573
|
enumerable: false,
|
|
547
574
|
value: value % 10000 / Math.pow(10, 7)
|
|
548
575
|
});
|
|
@@ -569,7 +596,7 @@ function readDateTime2(parser, dataLength, scale, useUTC, callback) {
|
|
|
569
596
|
} else {
|
|
570
597
|
date = new Date(2000, 0, days - 730118, time.getHours(), time.getMinutes(), time.getSeconds(), time.getMilliseconds());
|
|
571
598
|
}
|
|
572
|
-
Object.defineProperty(date,
|
|
599
|
+
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
573
600
|
enumerable: false,
|
|
574
601
|
value: time.nanosecondsDelta
|
|
575
602
|
});
|
|
@@ -584,7 +611,7 @@ function readDateTimeOffset(parser, dataLength, scale, callback) {
|
|
|
584
611
|
// offset
|
|
585
612
|
parser.readInt16LE(function () {
|
|
586
613
|
var date = new Date(Date.UTC(2000, 0, days - 730118, 0, 0, 0, +time));
|
|
587
|
-
Object.defineProperty(date,
|
|
614
|
+
Object.defineProperty(date, 'nanosecondsDelta', {
|
|
588
615
|
enumerable: false,
|
|
589
616
|
value: time.nanosecondsDelta
|
|
590
617
|
});
|
|
@@ -592,5 +619,4 @@ function readDateTimeOffset(parser, dataLength, scale, callback) {
|
|
|
592
619
|
});
|
|
593
620
|
});
|
|
594
621
|
});
|
|
595
|
-
}
|
|
596
|
-
module.exports = exports['default'];
|
|
622
|
+
}
|
package/package.json
CHANGED
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
"homepage": "https://github.com/pekim/tedious",
|
|
28
28
|
"bugs": "https://github.com/pekim/tedious/issues",
|
|
29
29
|
"license": "MIT",
|
|
30
|
-
"version": "1.
|
|
30
|
+
"version": "1.14.0",
|
|
31
31
|
"main": "./lib/tedious.js",
|
|
32
32
|
"repository": {
|
|
33
33
|
"type": "git",
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"bl": "^1.0.0",
|
|
43
43
|
"iconv-lite": "^0.4.11",
|
|
44
44
|
"readable-stream": "^2.0.2",
|
|
45
|
+
"semver": "^5.1.0",
|
|
45
46
|
"sprintf": "0.1.5"
|
|
46
47
|
},
|
|
47
48
|
"devDependencies": {
|
|
@@ -49,11 +50,15 @@
|
|
|
49
50
|
"babel": "^5.8.19",
|
|
50
51
|
"benchmark": "^1.0.0",
|
|
51
52
|
"coffee-script": "^1.9.3",
|
|
53
|
+
"eslint": "^1.10.3",
|
|
52
54
|
"nodeunit": "^0.9.1"
|
|
53
55
|
},
|
|
54
56
|
"scripts": {
|
|
57
|
+
"pretest": "eslint src test",
|
|
55
58
|
"test": "nodeunit --reporter minimal test/setup.js test/unit/ test/unit/token/ test/unit/tracking-buffer",
|
|
59
|
+
"pretest-all": "eslint src test",
|
|
56
60
|
"test-all": "nodeunit --reporter minimal test/setup.js test/unit/ test/unit/token/ test/unit/tracking-buffer test/integration/",
|
|
61
|
+
"pretest-integration": "eslint src test",
|
|
57
62
|
"test-integration": "nodeunit --reporter minimal test/setup.js test/integration/",
|
|
58
63
|
"prepublish": "coffee scripts/build.coffee"
|
|
59
64
|
},
|