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
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Parser = void 0;
|
|
7
|
+
|
|
8
|
+
var _events = require("events");
|
|
9
|
+
|
|
10
|
+
var _streamParser = _interopRequireDefault(require("./stream-parser"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
4
13
|
|
|
5
|
-
const StreamParser = require('./stream-parser');
|
|
6
14
|
/*
|
|
7
15
|
Buffers are thrown at the parser (by calling addBuffer).
|
|
8
16
|
Tokens are parsed from the buffer until there are no more tokens in
|
|
@@ -13,15 +21,13 @@ const StreamParser = require('./stream-parser');
|
|
|
13
21
|
The partial token and the new buffer are concatenated, and the token
|
|
14
22
|
parsing resumes.
|
|
15
23
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
class Parser extends EventEmitter {
|
|
24
|
+
class Parser extends _events.EventEmitter {
|
|
19
25
|
constructor(debug, colMetadata, options) {
|
|
20
26
|
super();
|
|
21
27
|
this.debug = debug;
|
|
22
|
-
this.colMetadata =
|
|
28
|
+
this.colMetadata = colMetadata;
|
|
23
29
|
this.options = options;
|
|
24
|
-
this.parser = new
|
|
30
|
+
this.parser = new _streamParser.default(this.debug, this.colMetadata, this.options);
|
|
25
31
|
this.parser.on('data', token => {
|
|
26
32
|
if (token.event) {
|
|
27
33
|
this.emit(token.event, token);
|
|
@@ -30,9 +36,9 @@ class Parser extends EventEmitter {
|
|
|
30
36
|
this.parser.on('drain', () => {
|
|
31
37
|
this.emit('drain');
|
|
32
38
|
});
|
|
33
|
-
}
|
|
34
|
-
|
|
39
|
+
}
|
|
35
40
|
|
|
41
|
+
// Returns false to apply backpressure.
|
|
36
42
|
addBuffer(buffer) {
|
|
37
43
|
return this.parser.write(buffer);
|
|
38
44
|
} // Writes an end-of-message (EOM) marker into the parser transform input
|
|
@@ -61,4 +67,4 @@ class Parser extends EventEmitter {
|
|
|
61
67
|
|
|
62
68
|
}
|
|
63
69
|
|
|
64
|
-
|
|
70
|
+
exports.Parser = Parser;
|
package/lib/token/token.js
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.EndOfMessageToken = exports.SSPIToken = exports.RowToken = exports.ReturnValueToken = exports.ReturnStatusToken = exports.OrderToken = exports.NBCRowToken = exports.LoginAckToken = exports.ErrorMessageToken = exports.InfoMessageToken = exports.FedAuthInfoToken = exports.FeatureExtAckToken = exports.RoutingEnvChangeToken = exports.CollationChangeToken = exports.ResetConnectionEnvChangeToken = exports.DatabaseMirroringPartnerEnvChangeToken = exports.RollbackTransactionEnvChangeToken = exports.CommitTransactionEnvChangeToken = exports.BeginTransactionEnvChangeToken = exports.PacketSizeEnvChangeToken = exports.CharsetEnvChangeToken = exports.LanguageEnvChangeToken = exports.DatabaseEnvChangeToken = exports.DoneProcToken = exports.DoneInProcToken = exports.DoneToken = exports.ColMetadataToken = exports.Token = exports.TYPE = void 0;
|
|
7
|
+
const TYPE = {
|
|
4
8
|
ALTMETADATA: 0x88,
|
|
5
9
|
ALTROW: 0xD3,
|
|
6
10
|
COLMETADATA: 0x81,
|
|
@@ -22,4 +26,394 @@ module.exports.TYPE = {
|
|
|
22
26
|
ROW: 0xD1,
|
|
23
27
|
SSPI: 0xED,
|
|
24
28
|
TABNAME: 0xA4
|
|
25
|
-
};
|
|
29
|
+
};
|
|
30
|
+
exports.TYPE = TYPE;
|
|
31
|
+
|
|
32
|
+
class Token {
|
|
33
|
+
constructor(name, event) {
|
|
34
|
+
this.name = name;
|
|
35
|
+
this.event = event;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
exports.Token = Token;
|
|
41
|
+
|
|
42
|
+
class ColMetadataToken extends Token {
|
|
43
|
+
constructor(columns) {
|
|
44
|
+
super('COLMETADATA', 'columnMetadata');
|
|
45
|
+
this.columns = columns;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
exports.ColMetadataToken = ColMetadataToken;
|
|
51
|
+
|
|
52
|
+
class DoneToken extends Token {
|
|
53
|
+
constructor({
|
|
54
|
+
more,
|
|
55
|
+
sqlError,
|
|
56
|
+
attention,
|
|
57
|
+
serverError,
|
|
58
|
+
rowCount,
|
|
59
|
+
curCmd
|
|
60
|
+
}) {
|
|
61
|
+
super('DONE', 'done');
|
|
62
|
+
this.more = more;
|
|
63
|
+
this.sqlError = sqlError;
|
|
64
|
+
this.attention = attention;
|
|
65
|
+
this.serverError = serverError;
|
|
66
|
+
this.rowCount = rowCount;
|
|
67
|
+
this.curCmd = curCmd;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
exports.DoneToken = DoneToken;
|
|
73
|
+
|
|
74
|
+
class DoneInProcToken extends Token {
|
|
75
|
+
constructor({
|
|
76
|
+
more,
|
|
77
|
+
sqlError,
|
|
78
|
+
attention,
|
|
79
|
+
serverError,
|
|
80
|
+
rowCount,
|
|
81
|
+
curCmd
|
|
82
|
+
}) {
|
|
83
|
+
super('DONEINPROC', 'doneInProc');
|
|
84
|
+
this.more = more;
|
|
85
|
+
this.sqlError = sqlError;
|
|
86
|
+
this.attention = attention;
|
|
87
|
+
this.serverError = serverError;
|
|
88
|
+
this.rowCount = rowCount;
|
|
89
|
+
this.curCmd = curCmd;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
exports.DoneInProcToken = DoneInProcToken;
|
|
95
|
+
|
|
96
|
+
class DoneProcToken extends Token {
|
|
97
|
+
constructor({
|
|
98
|
+
more,
|
|
99
|
+
sqlError,
|
|
100
|
+
attention,
|
|
101
|
+
serverError,
|
|
102
|
+
rowCount,
|
|
103
|
+
curCmd
|
|
104
|
+
}) {
|
|
105
|
+
super('DONEPROC', 'doneProc');
|
|
106
|
+
this.more = more;
|
|
107
|
+
this.sqlError = sqlError;
|
|
108
|
+
this.attention = attention;
|
|
109
|
+
this.serverError = serverError;
|
|
110
|
+
this.rowCount = rowCount;
|
|
111
|
+
this.curCmd = curCmd;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
exports.DoneProcToken = DoneProcToken;
|
|
117
|
+
|
|
118
|
+
class DatabaseEnvChangeToken extends Token {
|
|
119
|
+
constructor(newValue, oldValue) {
|
|
120
|
+
super('ENVCHANGE', 'databaseChange');
|
|
121
|
+
this.type = 'DATABASE';
|
|
122
|
+
this.newValue = newValue;
|
|
123
|
+
this.oldValue = oldValue;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
exports.DatabaseEnvChangeToken = DatabaseEnvChangeToken;
|
|
129
|
+
|
|
130
|
+
class LanguageEnvChangeToken extends Token {
|
|
131
|
+
constructor(newValue, oldValue) {
|
|
132
|
+
super('ENVCHANGE', 'languageChange');
|
|
133
|
+
this.type = 'LANGUAGE';
|
|
134
|
+
this.newValue = newValue;
|
|
135
|
+
this.oldValue = oldValue;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
exports.LanguageEnvChangeToken = LanguageEnvChangeToken;
|
|
141
|
+
|
|
142
|
+
class CharsetEnvChangeToken extends Token {
|
|
143
|
+
constructor(newValue, oldValue) {
|
|
144
|
+
super('ENVCHANGE', 'charsetChange');
|
|
145
|
+
this.type = 'CHARSET';
|
|
146
|
+
this.newValue = newValue;
|
|
147
|
+
this.oldValue = oldValue;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
exports.CharsetEnvChangeToken = CharsetEnvChangeToken;
|
|
153
|
+
|
|
154
|
+
class PacketSizeEnvChangeToken extends Token {
|
|
155
|
+
constructor(newValue, oldValue) {
|
|
156
|
+
super('ENVCHANGE', 'packetSizeChange');
|
|
157
|
+
this.type = 'PACKET_SIZE';
|
|
158
|
+
this.newValue = newValue;
|
|
159
|
+
this.oldValue = oldValue;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
exports.PacketSizeEnvChangeToken = PacketSizeEnvChangeToken;
|
|
165
|
+
|
|
166
|
+
class BeginTransactionEnvChangeToken extends Token {
|
|
167
|
+
constructor(newValue, oldValue) {
|
|
168
|
+
super('ENVCHANGE', 'beginTransaction');
|
|
169
|
+
this.name = 'ENVCHANGE';
|
|
170
|
+
this.event = 'beginTransaction';
|
|
171
|
+
this.type = 'BEGIN_TXN';
|
|
172
|
+
this.newValue = newValue;
|
|
173
|
+
this.oldValue = oldValue;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
exports.BeginTransactionEnvChangeToken = BeginTransactionEnvChangeToken;
|
|
179
|
+
|
|
180
|
+
class CommitTransactionEnvChangeToken extends Token {
|
|
181
|
+
constructor(newValue, oldValue) {
|
|
182
|
+
super('ENVCHANGE', 'commitTransaction');
|
|
183
|
+
this.type = 'COMMIT_TXN';
|
|
184
|
+
this.newValue = newValue;
|
|
185
|
+
this.oldValue = oldValue;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
exports.CommitTransactionEnvChangeToken = CommitTransactionEnvChangeToken;
|
|
191
|
+
|
|
192
|
+
class RollbackTransactionEnvChangeToken extends Token {
|
|
193
|
+
constructor(newValue, oldValue) {
|
|
194
|
+
super('ENVCHANGE', 'rollbackTransaction');
|
|
195
|
+
this.type = 'ROLLBACK_TXN';
|
|
196
|
+
this.newValue = newValue;
|
|
197
|
+
this.oldValue = oldValue;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
exports.RollbackTransactionEnvChangeToken = RollbackTransactionEnvChangeToken;
|
|
203
|
+
|
|
204
|
+
class DatabaseMirroringPartnerEnvChangeToken extends Token {
|
|
205
|
+
constructor(newValue, oldValue) {
|
|
206
|
+
super('ENVCHANGE', 'partnerNode');
|
|
207
|
+
this.name = 'ENVCHANGE';
|
|
208
|
+
this.event = 'partnerNode';
|
|
209
|
+
this.type = 'DATABASE_MIRRORING_PARTNER';
|
|
210
|
+
this.newValue = newValue;
|
|
211
|
+
this.oldValue = oldValue;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
exports.DatabaseMirroringPartnerEnvChangeToken = DatabaseMirroringPartnerEnvChangeToken;
|
|
217
|
+
|
|
218
|
+
class ResetConnectionEnvChangeToken extends Token {
|
|
219
|
+
constructor(newValue, oldValue) {
|
|
220
|
+
super('ENVCHANGE', 'resetConnection');
|
|
221
|
+
this.name = 'ENVCHANGE';
|
|
222
|
+
this.event = 'resetConnection';
|
|
223
|
+
this.type = 'RESET_CONNECTION';
|
|
224
|
+
this.newValue = newValue;
|
|
225
|
+
this.oldValue = oldValue;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
exports.ResetConnectionEnvChangeToken = ResetConnectionEnvChangeToken;
|
|
231
|
+
|
|
232
|
+
class CollationChangeToken extends Token {
|
|
233
|
+
constructor(newValue, oldValue) {
|
|
234
|
+
super('ENVCHANGE', 'sqlCollationChange');
|
|
235
|
+
this.type = 'SQL_COLLATION';
|
|
236
|
+
this.newValue = newValue;
|
|
237
|
+
this.oldValue = oldValue;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
exports.CollationChangeToken = CollationChangeToken;
|
|
243
|
+
|
|
244
|
+
class RoutingEnvChangeToken extends Token {
|
|
245
|
+
constructor(newValue, oldValue) {
|
|
246
|
+
super('ENVCHANGE', 'routingChange');
|
|
247
|
+
this.type = 'ROUTING_CHANGE';
|
|
248
|
+
this.newValue = newValue;
|
|
249
|
+
this.oldValue = oldValue;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
exports.RoutingEnvChangeToken = RoutingEnvChangeToken;
|
|
255
|
+
|
|
256
|
+
class FeatureExtAckToken extends Token {
|
|
257
|
+
constructor(fedAuth) {
|
|
258
|
+
super('FEATUREEXTACK', 'featureExtAck');
|
|
259
|
+
this.fedAuth = fedAuth;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
exports.FeatureExtAckToken = FeatureExtAckToken;
|
|
265
|
+
|
|
266
|
+
class FedAuthInfoToken extends Token {
|
|
267
|
+
constructor(spn, stsurl) {
|
|
268
|
+
super('FEDAUTHINFO', 'fedAuthInfo');
|
|
269
|
+
this.spn = spn;
|
|
270
|
+
this.stsurl = stsurl;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
exports.FedAuthInfoToken = FedAuthInfoToken;
|
|
276
|
+
|
|
277
|
+
class InfoMessageToken extends Token {
|
|
278
|
+
constructor({
|
|
279
|
+
number,
|
|
280
|
+
state,
|
|
281
|
+
class: clazz,
|
|
282
|
+
message,
|
|
283
|
+
serverName,
|
|
284
|
+
procName,
|
|
285
|
+
lineNumber
|
|
286
|
+
}) {
|
|
287
|
+
super('INFO', 'infoMessage');
|
|
288
|
+
this.number = number;
|
|
289
|
+
this.state = state;
|
|
290
|
+
this.class = clazz;
|
|
291
|
+
this.message = message;
|
|
292
|
+
this.serverName = serverName;
|
|
293
|
+
this.procName = procName;
|
|
294
|
+
this.lineNumber = lineNumber;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
exports.InfoMessageToken = InfoMessageToken;
|
|
300
|
+
|
|
301
|
+
class ErrorMessageToken extends Token {
|
|
302
|
+
constructor({
|
|
303
|
+
number,
|
|
304
|
+
state,
|
|
305
|
+
class: clazz,
|
|
306
|
+
message,
|
|
307
|
+
serverName,
|
|
308
|
+
procName,
|
|
309
|
+
lineNumber
|
|
310
|
+
}) {
|
|
311
|
+
super('ERROR', 'errorMessage');
|
|
312
|
+
this.number = number;
|
|
313
|
+
this.state = state;
|
|
314
|
+
this.class = clazz;
|
|
315
|
+
this.message = message;
|
|
316
|
+
this.serverName = serverName;
|
|
317
|
+
this.procName = procName;
|
|
318
|
+
this.lineNumber = lineNumber;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
exports.ErrorMessageToken = ErrorMessageToken;
|
|
324
|
+
|
|
325
|
+
class LoginAckToken extends Token {
|
|
326
|
+
constructor({
|
|
327
|
+
interface: interfaze,
|
|
328
|
+
tdsVersion,
|
|
329
|
+
progName,
|
|
330
|
+
progVersion
|
|
331
|
+
}) {
|
|
332
|
+
super('LOGINACK', 'loginack');
|
|
333
|
+
this.interface = interfaze;
|
|
334
|
+
this.tdsVersion = tdsVersion;
|
|
335
|
+
this.progName = progName;
|
|
336
|
+
this.progVersion = progVersion;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
exports.LoginAckToken = LoginAckToken;
|
|
342
|
+
|
|
343
|
+
class NBCRowToken extends Token {
|
|
344
|
+
constructor(columns) {
|
|
345
|
+
super('NBCROW', 'row');
|
|
346
|
+
this.columns = columns;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
exports.NBCRowToken = NBCRowToken;
|
|
352
|
+
|
|
353
|
+
class OrderToken extends Token {
|
|
354
|
+
constructor(orderColumns) {
|
|
355
|
+
super('ORDER', 'order');
|
|
356
|
+
this.orderColumns = orderColumns;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
exports.OrderToken = OrderToken;
|
|
362
|
+
|
|
363
|
+
class ReturnStatusToken extends Token {
|
|
364
|
+
constructor(value) {
|
|
365
|
+
super('RETURNSTATUS', 'returnStatus');
|
|
366
|
+
this.value = value;
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
exports.ReturnStatusToken = ReturnStatusToken;
|
|
372
|
+
|
|
373
|
+
class ReturnValueToken extends Token {
|
|
374
|
+
constructor({
|
|
375
|
+
paramOrdinal,
|
|
376
|
+
paramName,
|
|
377
|
+
metadata,
|
|
378
|
+
value
|
|
379
|
+
}) {
|
|
380
|
+
super('RETURNVALUE', 'returnValue');
|
|
381
|
+
this.paramOrdinal = paramOrdinal;
|
|
382
|
+
this.paramName = paramName;
|
|
383
|
+
this.metadata = metadata;
|
|
384
|
+
this.value = value;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
exports.ReturnValueToken = ReturnValueToken;
|
|
390
|
+
|
|
391
|
+
class RowToken extends Token {
|
|
392
|
+
constructor(columns) {
|
|
393
|
+
super('ROW', 'row');
|
|
394
|
+
this.columns = columns;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
exports.RowToken = RowToken;
|
|
400
|
+
|
|
401
|
+
class SSPIToken extends Token {
|
|
402
|
+
constructor(ntlmpacket, ntlmpacketBuffer) {
|
|
403
|
+
super('SSPICHALLENGE', 'sspichallenge');
|
|
404
|
+
this.ntlmpacket = ntlmpacket;
|
|
405
|
+
this.ntlmpacketBuffer = ntlmpacketBuffer;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
exports.SSPIToken = SSPIToken;
|
|
411
|
+
|
|
412
|
+
class EndOfMessageToken extends Token {
|
|
413
|
+
constructor() {
|
|
414
|
+
super('EOM', 'endOfMessage');
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
exports.EndOfMessageToken = EndOfMessageToken;
|
|
@@ -5,7 +5,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
7
|
|
|
8
|
-
var
|
|
8
|
+
var _jsbi = _interopRequireDefault(require("jsbi"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
11
|
|
|
10
12
|
const SHIFT_LEFT_32 = (1 << 16) * (1 << 16);
|
|
11
13
|
const SHIFT_RIGHT_32 = 1 / SHIFT_LEFT_32;
|
|
@@ -104,9 +106,36 @@ class WritableTrackingBuffer {
|
|
|
104
106
|
this.position += length;
|
|
105
107
|
}
|
|
106
108
|
|
|
109
|
+
writeBigInt64LE(value) {
|
|
110
|
+
this.writeBigU_Int64LE(value);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
writeBigU_Int64LE(value) {
|
|
114
|
+
this.makeRoomFor(8);
|
|
115
|
+
|
|
116
|
+
let lo = _jsbi.default.toNumber(_jsbi.default.bitwiseAnd(value, _jsbi.default.BigInt(0xffffffff)));
|
|
117
|
+
|
|
118
|
+
this.buffer[this.position++] = lo;
|
|
119
|
+
lo = lo >> 8;
|
|
120
|
+
this.buffer[this.position++] = lo;
|
|
121
|
+
lo = lo >> 8;
|
|
122
|
+
this.buffer[this.position++] = lo;
|
|
123
|
+
lo = lo >> 8;
|
|
124
|
+
this.buffer[this.position++] = lo;
|
|
125
|
+
|
|
126
|
+
let hi = _jsbi.default.toNumber(_jsbi.default.bitwiseAnd(_jsbi.default.signedRightShift(value, _jsbi.default.BigInt(32)), _jsbi.default.BigInt(0xffffffff)));
|
|
127
|
+
|
|
128
|
+
this.buffer[this.position++] = hi;
|
|
129
|
+
hi = hi >> 8;
|
|
130
|
+
this.buffer[this.position++] = hi;
|
|
131
|
+
hi = hi >> 8;
|
|
132
|
+
this.buffer[this.position++] = hi;
|
|
133
|
+
hi = hi >> 8;
|
|
134
|
+
this.buffer[this.position++] = hi;
|
|
135
|
+
}
|
|
136
|
+
|
|
107
137
|
writeInt64LE(value) {
|
|
108
|
-
|
|
109
|
-
this.copyFrom(buf);
|
|
138
|
+
this.writeBigInt64LE(_jsbi.default.BigInt(value));
|
|
110
139
|
}
|
|
111
140
|
|
|
112
141
|
writeUInt32BE(value) {
|
|
@@ -123,8 +152,11 @@ class WritableTrackingBuffer {
|
|
|
123
152
|
}
|
|
124
153
|
|
|
125
154
|
writeUInt64LE(value) {
|
|
126
|
-
this.
|
|
127
|
-
|
|
155
|
+
this.writeBigUInt64LE(_jsbi.default.BigInt(value));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
writeBigUInt64LE(value) {
|
|
159
|
+
this.writeBigU_Int64LE(value);
|
|
128
160
|
}
|
|
129
161
|
|
|
130
162
|
writeInt8(value) {
|
package/lib/transaction.js
CHANGED
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Transaction = exports.isolationLevelByValue = exports.ISOLATION_LEVEL = exports.OPERATION_TYPE = void 0;
|
|
7
|
+
|
|
8
|
+
var _writableTrackingBuffer = _interopRequireDefault(require("./tracking-buffer/writable-tracking-buffer"));
|
|
9
|
+
|
|
10
|
+
var _allHeaders = require("./all-headers");
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
4
13
|
|
|
5
|
-
const writeAllHeaders = require('./all-headers').writeToTrackingBuffer;
|
|
6
14
|
/*
|
|
7
15
|
s2.2.6.8
|
|
8
16
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const OPERATION_TYPE = module.exports.OPERATION_TYPE = {
|
|
17
|
+
const OPERATION_TYPE = {
|
|
12
18
|
TM_GET_DTC_ADDRESS: 0x00,
|
|
13
19
|
TM_PROPAGATE_XACT: 0x01,
|
|
14
20
|
TM_BEGIN_XACT: 0x05,
|
|
@@ -17,7 +23,8 @@ const OPERATION_TYPE = module.exports.OPERATION_TYPE = {
|
|
|
17
23
|
TM_ROLLBACK_XACT: 0x08,
|
|
18
24
|
TM_SAVE_XACT: 0x09
|
|
19
25
|
};
|
|
20
|
-
|
|
26
|
+
exports.OPERATION_TYPE = OPERATION_TYPE;
|
|
27
|
+
const ISOLATION_LEVEL = {
|
|
21
28
|
NO_CHANGE: 0x00,
|
|
22
29
|
READ_UNCOMMITTED: 0x01,
|
|
23
30
|
READ_COMMITTED: 0x02,
|
|
@@ -25,7 +32,9 @@ const ISOLATION_LEVEL = module.exports.ISOLATION_LEVEL = {
|
|
|
25
32
|
SERIALIZABLE: 0x04,
|
|
26
33
|
SNAPSHOT: 0x05
|
|
27
34
|
};
|
|
35
|
+
exports.ISOLATION_LEVEL = ISOLATION_LEVEL;
|
|
28
36
|
const isolationLevelByValue = {};
|
|
37
|
+
exports.isolationLevelByValue = isolationLevelByValue;
|
|
29
38
|
|
|
30
39
|
for (const name in ISOLATION_LEVEL) {
|
|
31
40
|
const value = ISOLATION_LEVEL[name];
|
|
@@ -33,15 +42,15 @@ for (const name in ISOLATION_LEVEL) {
|
|
|
33
42
|
}
|
|
34
43
|
|
|
35
44
|
class Transaction {
|
|
36
|
-
constructor(name, isolationLevel) {
|
|
45
|
+
constructor(name, isolationLevel = ISOLATION_LEVEL.NO_CHANGE) {
|
|
37
46
|
this.name = name;
|
|
38
47
|
this.isolationLevel = isolationLevel;
|
|
39
48
|
this.outstandingRequestCount = 1;
|
|
40
49
|
}
|
|
41
50
|
|
|
42
51
|
beginPayload(txnDescriptor) {
|
|
43
|
-
const buffer = new
|
|
44
|
-
|
|
52
|
+
const buffer = new _writableTrackingBuffer.default(100, 'ucs2');
|
|
53
|
+
(0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
|
|
45
54
|
buffer.writeUShort(OPERATION_TYPE.TM_BEGIN_XACT);
|
|
46
55
|
buffer.writeUInt8(this.isolationLevel);
|
|
47
56
|
buffer.writeUInt8(this.name.length * 2);
|
|
@@ -57,8 +66,8 @@ class Transaction {
|
|
|
57
66
|
}
|
|
58
67
|
|
|
59
68
|
commitPayload(txnDescriptor) {
|
|
60
|
-
const buffer = new
|
|
61
|
-
|
|
69
|
+
const buffer = new _writableTrackingBuffer.default(100, 'ascii');
|
|
70
|
+
(0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
|
|
62
71
|
buffer.writeUShort(OPERATION_TYPE.TM_COMMIT_XACT);
|
|
63
72
|
buffer.writeUInt8(this.name.length * 2);
|
|
64
73
|
buffer.writeString(this.name, 'ucs2'); // No fBeginXact flag, so no new transaction is started.
|
|
@@ -76,8 +85,8 @@ class Transaction {
|
|
|
76
85
|
}
|
|
77
86
|
|
|
78
87
|
rollbackPayload(txnDescriptor) {
|
|
79
|
-
const buffer = new
|
|
80
|
-
|
|
88
|
+
const buffer = new _writableTrackingBuffer.default(100, 'ascii');
|
|
89
|
+
(0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
|
|
81
90
|
buffer.writeUShort(OPERATION_TYPE.TM_ROLLBACK_XACT);
|
|
82
91
|
buffer.writeUInt8(this.name.length * 2);
|
|
83
92
|
buffer.writeString(this.name, 'ucs2'); // No fBeginXact flag, so no new transaction is started.
|
|
@@ -94,8 +103,8 @@ class Transaction {
|
|
|
94
103
|
}
|
|
95
104
|
|
|
96
105
|
savePayload(txnDescriptor) {
|
|
97
|
-
const buffer = new
|
|
98
|
-
|
|
106
|
+
const buffer = new _writableTrackingBuffer.default(100, 'ascii');
|
|
107
|
+
(0, _allHeaders.writeToTrackingBuffer)(buffer, txnDescriptor, this.outstandingRequestCount);
|
|
99
108
|
buffer.writeUShort(OPERATION_TYPE.TM_SAVE_XACT);
|
|
100
109
|
buffer.writeUInt8(this.name.length * 2);
|
|
101
110
|
buffer.writeString(this.name, 'ucs2');
|
|
@@ -132,4 +141,4 @@ class Transaction {
|
|
|
132
141
|
|
|
133
142
|
}
|
|
134
143
|
|
|
135
|
-
|
|
144
|
+
exports.Transaction = Transaction;
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.TransientErrorLookup = void 0;
|
|
7
|
+
|
|
3
8
|
// This simple piece of code is factored out into a separate class to make it
|
|
4
9
|
// easy to stub it out in tests. It's hard, if not impossible, to cause a
|
|
5
10
|
// transient error on demand in tests.
|
|
@@ -13,4 +18,4 @@ class TransientErrorLookup {
|
|
|
13
18
|
|
|
14
19
|
}
|
|
15
20
|
|
|
16
|
-
|
|
21
|
+
exports.TransientErrorLookup = TransientErrorLookup;
|