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.
Files changed (86) hide show
  1. package/lib/bulk-load.js +17 -22
  2. package/lib/connection.js +363 -251
  3. package/lib/connector.js +3 -1
  4. package/lib/data-type.js +111 -109
  5. package/lib/data-types/bigint.js +19 -7
  6. package/lib/data-types/binary.js +19 -10
  7. package/lib/data-types/bit.js +14 -4
  8. package/lib/data-types/bitn.js +26 -3
  9. package/lib/data-types/char.js +26 -13
  10. package/lib/data-types/date.js +18 -9
  11. package/lib/data-types/datetime.js +23 -5
  12. package/lib/data-types/datetime2.js +10 -22
  13. package/lib/data-types/datetimen.js +26 -3
  14. package/lib/data-types/datetimeoffset.js +11 -22
  15. package/lib/data-types/decimal.js +14 -6
  16. package/lib/data-types/decimaln.js +26 -5
  17. package/lib/data-types/float.js +14 -4
  18. package/lib/data-types/floatn.js +26 -3
  19. package/lib/data-types/image.js +12 -5
  20. package/lib/data-types/int.js +14 -4
  21. package/lib/data-types/intn.js +26 -3
  22. package/lib/data-types/money.js +14 -4
  23. package/lib/data-types/moneyn.js +26 -3
  24. package/lib/data-types/nchar.js +17 -6
  25. package/lib/data-types/ntext.js +26 -5
  26. package/lib/data-types/null.js +27 -3
  27. package/lib/data-types/numeric.js +14 -6
  28. package/lib/data-types/numericn.js +26 -5
  29. package/lib/data-types/nvarchar.js +20 -11
  30. package/lib/data-types/real.js +14 -4
  31. package/lib/data-types/smalldatetime.js +14 -4
  32. package/lib/data-types/smallint.js +14 -4
  33. package/lib/data-types/smallmoney.js +14 -4
  34. package/lib/data-types/sql-variant.js +23 -4
  35. package/lib/data-types/text.js +13 -7
  36. package/lib/data-types/time.js +9 -21
  37. package/lib/data-types/tinyint.js +14 -4
  38. package/lib/data-types/tvp.js +12 -3
  39. package/lib/data-types/udt.js +26 -3
  40. package/lib/data-types/uniqueidentifier.js +12 -5
  41. package/lib/data-types/varbinary.js +18 -8
  42. package/lib/data-types/varchar.js +19 -10
  43. package/lib/data-types/xml.js +26 -3
  44. package/lib/debug.js +3 -1
  45. package/lib/guid-parser.js +6 -6
  46. package/lib/incoming-message-stream.js +10 -7
  47. package/lib/instance-lookup.js +12 -6
  48. package/lib/library.js +6 -1
  49. package/lib/login7-payload.js +2 -3
  50. package/lib/message-io.js +14 -3
  51. package/lib/message.js +2 -3
  52. package/lib/metadata-parser.js +259 -136
  53. package/lib/ntlm-payload.js +12 -21
  54. package/lib/outgoing-message-stream.js +7 -6
  55. package/lib/packet.js +4 -5
  56. package/lib/prelogin-payload.js +3 -4
  57. package/lib/request.js +11 -11
  58. package/lib/rpcrequest-payload.js +28 -22
  59. package/lib/sender.js +25 -11
  60. package/lib/special-stored-procedure.js +9 -2
  61. package/lib/tds-versions.js +8 -2
  62. package/lib/tedious.js +75 -9
  63. package/lib/token/colmetadata-token-parser.js +20 -10
  64. package/lib/token/done-token-parser.js +32 -25
  65. package/lib/token/env-change-token-parser.js +50 -20
  66. package/lib/token/feature-ext-ack-parser.js +19 -14
  67. package/lib/token/fedauth-info-parser.js +17 -11
  68. package/lib/token/infoerror-token-parser.js +14 -14
  69. package/lib/token/loginack-token-parser.js +21 -12
  70. package/lib/token/nbcrow-token-parser.js +35 -23
  71. package/lib/token/order-token-parser.js +14 -7
  72. package/lib/token/returnstatus-token-parser.js +14 -7
  73. package/lib/token/returnvalue-token-parser.js +22 -11
  74. package/lib/token/row-token-parser.js +34 -22
  75. package/lib/token/sspi-token-parser.js +14 -8
  76. package/lib/token/stream-parser.js +95 -36
  77. package/lib/token/token-stream-parser.js +16 -10
  78. package/lib/token/token.js +396 -2
  79. package/lib/tracking-buffer/writable-tracking-buffer.js +37 -5
  80. package/lib/transaction.js +25 -16
  81. package/lib/transient-error-lookup.js +6 -1
  82. package/lib/value-parser.js +412 -315
  83. package/package.json +24 -21
  84. package/pull_request_template.md +1 -1
  85. package/tsconfig.json +1 -1
  86. package/lib/tracking-buffer/bigint.js +0 -102
@@ -1,19 +1,21 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
3
10
  const FEDAUTHINFOID = {
4
11
  STSURL: 0x01,
5
12
  SPN: 0x02
6
13
  };
7
14
 
8
- module.exports = function fedAuthInfoParser(parser, colMetadata, options, callback) {
15
+ function fedAuthInfoParser(parser, _colMetadata, _options, callback) {
9
16
  parser.readUInt32LE(tokenLength => {
10
17
  parser.readBuffer(tokenLength, data => {
11
- const token = {
12
- 'name': 'FEDAUTHINFO',
13
- 'event': 'fedAuthInfo',
14
- 'spn': undefined,
15
- 'stsurl': undefined
16
- };
18
+ let spn, stsurl;
17
19
  let offset = 0;
18
20
  const countOfInfoIDs = data.readUInt32LE(offset);
19
21
  offset += 4;
@@ -28,11 +30,11 @@ module.exports = function fedAuthInfoParser(parser, colMetadata, options, callba
28
30
 
29
31
  switch (fedauthInfoID) {
30
32
  case FEDAUTHINFOID.SPN:
31
- token.spn = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);
33
+ spn = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);
32
34
  break;
33
35
 
34
36
  case FEDAUTHINFOID.STSURL:
35
- token.stsurl = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);
37
+ stsurl = data.toString('ucs2', fedAuthInfoDataOffset, fedAuthInfoDataOffset + fedAuthInfoDataLen);
36
38
  break;
37
39
  // ignoring unknown fedauthinfo options
38
40
 
@@ -41,7 +43,11 @@ module.exports = function fedAuthInfoParser(parser, colMetadata, options, callba
41
43
  }
42
44
  }
43
45
 
44
- callback(token);
46
+ callback(new _token.FedAuthInfoToken(spn, stsurl));
45
47
  });
46
48
  });
47
- };
49
+ }
50
+
51
+ var _default = fedAuthInfoParser;
52
+ exports.default = _default;
53
+ module.exports = fedAuthInfoParser;
@@ -1,5 +1,13 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.infoParser = infoParser;
7
+ exports.errorParser = errorParser;
8
+
9
+ var _token = require("./token");
10
+
3
11
  function parseToken(parser, options, callback) {
4
12
  // length
5
13
  parser.readUInt16LE(() => {
@@ -29,22 +37,14 @@ function parseToken(parser, options, callback) {
29
37
  });
30
38
  }
31
39
 
32
- module.exports.infoParser = infoParser;
33
-
34
- function infoParser(parser, colMetadata, options, callback) {
35
- parseToken(parser, options, token => {
36
- token.name = 'INFO';
37
- token.event = 'infoMessage';
38
- callback(token);
40
+ function infoParser(parser, _colMetadata, options, callback) {
41
+ parseToken(parser, options, data => {
42
+ callback(new _token.InfoMessageToken(data));
39
43
  });
40
44
  }
41
45
 
42
- module.exports.errorParser = errorParser;
43
-
44
- function errorParser(parser, colMetadata, options, callback) {
45
- parseToken(parser, options, token => {
46
- token.name = 'ERROR';
47
- token.event = 'errorMessage';
48
- callback(token);
46
+ function errorParser(parser, _colMetadata, options, callback) {
47
+ parseToken(parser, options, data => {
48
+ callback(new _token.ErrorMessageToken(data));
49
49
  });
50
50
  }
@@ -1,37 +1,42 @@
1
1
  "use strict";
2
2
 
3
- const versions = require('../tds-versions').versionsByValue;
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
10
+ var _tdsVersions = require("../tds-versions");
4
11
 
5
12
  const interfaceTypes = {
6
13
  0: 'SQL_DFLT',
7
14
  1: 'SQL_TSQL'
8
15
  };
9
16
 
10
- module.exports = function (parser, colMetadata, options, callback) {
17
+ function loginAckParser(parser, _colMetadata, _options, callback) {
11
18
  // length
12
19
  parser.readUInt16LE(() => {
13
20
  parser.readUInt8(interfaceNumber => {
14
21
  const interfaceType = interfaceTypes[interfaceNumber];
15
22
  parser.readUInt32BE(tdsVersionNumber => {
16
- const tdsVersion = versions[tdsVersionNumber];
23
+ const tdsVersion = _tdsVersions.versionsByValue[tdsVersionNumber];
17
24
  parser.readBVarChar(progName => {
18
25
  parser.readUInt8(major => {
19
26
  parser.readUInt8(minor => {
20
27
  parser.readUInt8(buildNumHi => {
21
28
  parser.readUInt8(buildNumLow => {
22
- callback({
23
- 'name': 'LOGINACK',
24
- 'event': 'loginack',
25
- 'interface': interfaceType,
26
- 'tdsVersion': tdsVersion,
27
- 'progName': progName,
28
- 'progVersion': {
29
+ callback(new _token.LoginAckToken({
30
+ interface: interfaceType,
31
+ tdsVersion: tdsVersion,
32
+ progName: progName,
33
+ progVersion: {
29
34
  major: major,
30
35
  minor: minor,
31
36
  buildNumHi: buildNumHi,
32
37
  buildNumLow: buildNumLow
33
38
  }
34
- });
39
+ }));
35
40
  });
36
41
  });
37
42
  });
@@ -40,4 +45,8 @@ module.exports = function (parser, colMetadata, options, callback) {
40
45
  });
41
46
  });
42
47
  });
43
- };
48
+ }
49
+
50
+ var _default = loginAckParser;
51
+ exports.default = _default;
52
+ module.exports = loginAckParser;
@@ -1,13 +1,22 @@
1
1
  "use strict";
2
2
 
3
- // s2.2.7.13 (introduced in TDS 7.3.B)
4
- const valueParse = require('../value-parser');
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
10
+ var _valueParser = _interopRequireDefault(require("../value-parser"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
13
 
6
- function nullHandler(parser, columnMetaData, options, callback) {
14
+ // s2.2.7.13 (introduced in TDS 7.3.B)
15
+ function nullHandler(_parser, _columnMetadata, _options, callback) {
7
16
  callback(null);
8
17
  }
9
18
 
10
- module.exports = function (parser, columnsMetaData, options, callback) {
19
+ function nbcRowParser(parser, columnsMetaData, options, callback) {
11
20
  const length = Math.ceil(columnsMetaData.length / 8);
12
21
  parser.readBuffer(length, bytes => {
13
22
  const bitmap = [];
@@ -20,7 +29,7 @@ module.exports = function (parser, columnsMetaData, options, callback) {
20
29
  }
21
30
  }
22
31
 
23
- const columns = options.useColumnNames ? {} : [];
32
+ const columns = [];
24
33
  const len = columnsMetaData.length;
25
34
  let i = 0;
26
35
 
@@ -30,31 +39,34 @@ module.exports = function (parser, columnsMetaData, options, callback) {
30
39
  }
31
40
 
32
41
  const columnMetaData = columnsMetaData[i];
33
- (bitmap[i] ? nullHandler : valueParse)(parser, columnMetaData, options, value => {
34
- const column = {
42
+ (bitmap[i] ? nullHandler : _valueParser.default)(parser, columnMetaData, options, value => {
43
+ columns.push({
35
44
  value: value,
36
45
  metadata: columnMetaData
37
- };
38
-
39
- if (options.useColumnNames) {
40
- if (columns[columnMetaData.colName] == null) {
41
- columns[columnMetaData.colName] = column;
42
- }
43
- } else {
44
- columns.push(column);
45
- }
46
-
46
+ });
47
47
  i++;
48
48
  next(done);
49
49
  });
50
50
  }
51
51
 
52
52
  next(() => {
53
- callback({
54
- name: 'NBCROW',
55
- event: 'row',
56
- columns: columns
57
- });
53
+ if (options.useColumnNames) {
54
+ const columnsMap = {};
55
+ columns.forEach(column => {
56
+ const colName = column.metadata.colName;
57
+
58
+ if (columnsMap[colName] == null) {
59
+ columnsMap[colName] = column;
60
+ }
61
+ });
62
+ callback(new _token.NBCRowToken(columnsMap));
63
+ } else {
64
+ callback(new _token.NBCRowToken(columns));
65
+ }
58
66
  });
59
67
  });
60
- };
68
+ }
69
+
70
+ var _default = nbcRowParser;
71
+ exports.default = _default;
72
+ module.exports = nbcRowParser;
@@ -1,7 +1,14 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
3
10
  // s2.2.7.14
4
- module.exports = function (parser, colMetadata, options, callback) {
11
+ function orderParser(parser, _colMetadata, _options, callback) {
5
12
  parser.readUInt16LE(length => {
6
13
  const columnCount = length / 2;
7
14
  const orderColumns = [];
@@ -20,11 +27,11 @@ module.exports = function (parser, colMetadata, options, callback) {
20
27
  }
21
28
 
22
29
  next(() => {
23
- callback({
24
- name: 'ORDER',
25
- event: 'order',
26
- orderColumns: orderColumns
27
- });
30
+ callback(new _token.OrderToken(orderColumns));
28
31
  });
29
32
  });
30
- };
33
+ }
34
+
35
+ var _default = orderParser;
36
+ exports.default = _default;
37
+ module.exports = orderParser;
@@ -1,12 +1,19 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
3
10
  // s2.2.7.16
4
- module.exports = function (parser, colMetadata, options, callback) {
11
+ function returnStatusParser(parser, _colMetadata, _options, callback) {
5
12
  parser.readInt32LE(value => {
6
- callback({
7
- name: 'RETURNSTATUS',
8
- event: 'returnStatus',
9
- value: value
10
- });
13
+ callback(new _token.ReturnStatusToken(value));
11
14
  });
12
- };
15
+ }
16
+
17
+ var _default = returnStatusParser;
18
+ exports.default = _default;
19
+ module.exports = returnStatusParser;
@@ -1,11 +1,20 @@
1
1
  "use strict";
2
2
 
3
- // s2.2.7.16
4
- const metadataParse = require('../metadata-parser');
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
10
+ var _metadataParser = _interopRequireDefault(require("../metadata-parser"));
5
11
 
6
- const valueParse = require('../value-parser');
12
+ var _valueParser = _interopRequireDefault(require("../value-parser"));
7
13
 
8
- module.exports = function (parser, colMetadata, options, callback) {
14
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
+
16
+ // s2.2.7.16
17
+ function returnParser(parser, _colMetadata, options, callback) {
9
18
  parser.readUInt16LE(paramOrdinal => {
10
19
  parser.readBVarChar(paramName => {
11
20
  if (paramName.charAt(0) === '@') {
@@ -14,19 +23,21 @@ module.exports = function (parser, colMetadata, options, callback) {
14
23
 
15
24
 
16
25
  parser.readUInt8(() => {
17
- metadataParse(parser, options, metadata => {
18
- valueParse(parser, metadata, options, value => {
19
- callback({
20
- name: 'RETURNVALUE',
21
- event: 'returnValue',
26
+ (0, _metadataParser.default)(parser, options, metadata => {
27
+ (0, _valueParser.default)(parser, metadata, options, value => {
28
+ callback(new _token.ReturnValueToken({
22
29
  paramOrdinal: paramOrdinal,
23
30
  paramName: paramName,
24
31
  metadata: metadata,
25
32
  value: value
26
- });
33
+ }));
27
34
  });
28
35
  });
29
36
  });
30
37
  });
31
38
  });
32
- };
39
+ }
40
+
41
+ var _default = returnParser;
42
+ exports.default = _default;
43
+ module.exports = returnParser;
@@ -1,10 +1,19 @@
1
1
  "use strict";
2
2
 
3
- // s2.2.7.17
4
- const valueParse = require('../value-parser');
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
10
+ var _valueParser = _interopRequireDefault(require("../value-parser"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
5
13
 
6
- module.exports = function (parser, colMetadata, options, callback) {
7
- const columns = options.useColumnNames ? {} : [];
14
+ // s2.2.7.17
15
+ function rowParser(parser, colMetadata, options, callback) {
16
+ const columns = [];
8
17
  const len = colMetadata.length;
9
18
  let i = 0;
10
19
 
@@ -14,30 +23,33 @@ module.exports = function (parser, colMetadata, options, callback) {
14
23
  }
15
24
 
16
25
  const columnMetaData = colMetadata[i];
17
- valueParse(parser, columnMetaData, options, value => {
18
- const column = {
26
+ (0, _valueParser.default)(parser, columnMetaData, options, value => {
27
+ columns.push({
19
28
  value: value,
20
29
  metadata: columnMetaData
21
- };
22
-
23
- if (options.useColumnNames) {
24
- if (columns[columnMetaData.colName] == null) {
25
- columns[columnMetaData.colName] = column;
26
- }
27
- } else {
28
- columns.push(column);
29
- }
30
-
30
+ });
31
31
  i++;
32
32
  next(done);
33
33
  });
34
34
  }
35
35
 
36
36
  next(() => {
37
- callback({
38
- name: 'ROW',
39
- event: 'row',
40
- columns: columns
41
- });
37
+ if (options.useColumnNames) {
38
+ const columnsMap = {};
39
+ columns.forEach(column => {
40
+ const colName = column.metadata.colName;
41
+
42
+ if (columnsMap[colName] == null) {
43
+ columnsMap[colName] = column;
44
+ }
45
+ });
46
+ callback(new _token.RowToken(columnsMap));
47
+ } else {
48
+ callback(new _token.RowToken(columns));
49
+ }
42
50
  });
43
- };
51
+ }
52
+
53
+ var _default = rowParser;
54
+ exports.default = _default;
55
+ module.exports = rowParser;
@@ -1,5 +1,12 @@
1
1
  "use strict";
2
2
 
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _token = require("./token");
9
+
3
10
  function parseChallenge(buffer) {
4
11
  const challenge = {};
5
12
  challenge.magic = buffer.slice(0, 8).toString('utf8');
@@ -19,13 +26,12 @@ function parseChallenge(buffer) {
19
26
  return challenge;
20
27
  }
21
28
 
22
- module.exports = function (parser, colMetadata, options, callback) {
29
+ function sspiParser(parser, _colMetadata, _options, callback) {
23
30
  parser.readUsVarByte(buffer => {
24
- callback({
25
- name: 'SSPICHALLENGE',
26
- event: 'sspichallenge',
27
- ntlmpacket: parseChallenge(buffer),
28
- ntlmpacketBuffer: buffer
29
- });
31
+ callback(new _token.SSPIToken(parseChallenge(buffer), buffer));
30
32
  });
31
- };
33
+ }
34
+
35
+ var _default = sspiParser;
36
+ exports.default = _default;
37
+ module.exports = sspiParser;
@@ -1,27 +1,66 @@
1
1
  "use strict";
2
2
 
3
- const Transform = require('readable-stream').Transform;
4
-
5
- const TYPE = require('./token').TYPE;
6
-
7
- const tokenParsers = {};
8
- tokenParsers[TYPE.COLMETADATA] = require('./colmetadata-token-parser');
9
- tokenParsers[TYPE.DONE] = require('./done-token-parser').doneParser;
10
- tokenParsers[TYPE.DONEINPROC] = require('./done-token-parser').doneInProcParser;
11
- tokenParsers[TYPE.DONEPROC] = require('./done-token-parser').doneProcParser;
12
- tokenParsers[TYPE.ENVCHANGE] = require('./env-change-token-parser');
13
- tokenParsers[TYPE.ERROR] = require('./infoerror-token-parser').errorParser;
14
- tokenParsers[TYPE.FEDAUTHINFO] = require('./fedauth-info-parser');
15
- tokenParsers[TYPE.FEATUREEXTACK] = require('./feature-ext-ack-parser');
16
- tokenParsers[TYPE.INFO] = require('./infoerror-token-parser').infoParser;
17
- tokenParsers[TYPE.LOGINACK] = require('./loginack-token-parser');
18
- tokenParsers[TYPE.ORDER] = require('./order-token-parser');
19
- tokenParsers[TYPE.RETURNSTATUS] = require('./returnstatus-token-parser');
20
- tokenParsers[TYPE.RETURNVALUE] = require('./returnvalue-token-parser');
21
- tokenParsers[TYPE.ROW] = require('./row-token-parser');
22
- tokenParsers[TYPE.NBCROW] = require('./nbcrow-token-parser');
23
- tokenParsers[TYPE.SSPI] = require('./sspi-token-parser');
24
- module.exports = class Parser extends Transform {
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _jsbi = _interopRequireDefault(require("jsbi"));
9
+
10
+ var _readableStream = require("readable-stream");
11
+
12
+ var _token = require("./token");
13
+
14
+ var _colmetadataTokenParser = _interopRequireDefault(require("./colmetadata-token-parser"));
15
+
16
+ var _doneTokenParser = require("./done-token-parser");
17
+
18
+ var _envChangeTokenParser = _interopRequireDefault(require("./env-change-token-parser"));
19
+
20
+ var _infoerrorTokenParser = require("./infoerror-token-parser");
21
+
22
+ var _fedauthInfoParser = _interopRequireDefault(require("./fedauth-info-parser"));
23
+
24
+ var _featureExtAckParser = _interopRequireDefault(require("./feature-ext-ack-parser"));
25
+
26
+ var _loginackTokenParser = _interopRequireDefault(require("./loginack-token-parser"));
27
+
28
+ var _orderTokenParser = _interopRequireDefault(require("./order-token-parser"));
29
+
30
+ var _returnstatusTokenParser = _interopRequireDefault(require("./returnstatus-token-parser"));
31
+
32
+ var _returnvalueTokenParser = _interopRequireDefault(require("./returnvalue-token-parser"));
33
+
34
+ var _rowTokenParser = _interopRequireDefault(require("./row-token-parser"));
35
+
36
+ var _nbcrowTokenParser = _interopRequireDefault(require("./nbcrow-token-parser"));
37
+
38
+ var _sspiTokenParser = _interopRequireDefault(require("./sspi-token-parser"));
39
+
40
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
41
+
42
+ const tokenParsers = {
43
+ [_token.TYPE.COLMETADATA]: _colmetadataTokenParser.default,
44
+ [_token.TYPE.DONE]: _doneTokenParser.doneParser,
45
+ [_token.TYPE.DONEINPROC]: _doneTokenParser.doneInProcParser,
46
+ [_token.TYPE.DONEPROC]: _doneTokenParser.doneProcParser,
47
+ [_token.TYPE.ENVCHANGE]: _envChangeTokenParser.default,
48
+ [_token.TYPE.ERROR]: _infoerrorTokenParser.errorParser,
49
+ [_token.TYPE.FEDAUTHINFO]: _fedauthInfoParser.default,
50
+ [_token.TYPE.FEATUREEXTACK]: _featureExtAckParser.default,
51
+ [_token.TYPE.INFO]: _infoerrorTokenParser.infoParser,
52
+ [_token.TYPE.LOGINACK]: _loginackTokenParser.default,
53
+ [_token.TYPE.ORDER]: _orderTokenParser.default,
54
+ [_token.TYPE.RETURNSTATUS]: _returnstatusTokenParser.default,
55
+ [_token.TYPE.RETURNVALUE]: _returnvalueTokenParser.default,
56
+ [_token.TYPE.ROW]: _rowTokenParser.default,
57
+ [_token.TYPE.NBCROW]: _nbcrowTokenParser.default,
58
+ [_token.TYPE.SSPI]: _sspiTokenParser.default
59
+ };
60
+
61
+ class EndOfMessageMarker {}
62
+
63
+ class Parser extends _readableStream.Transform {
25
64
  constructor(debug, colMetadata, options) {
26
65
  super({
27
66
  objectMode: true
@@ -29,21 +68,16 @@ module.exports = class Parser extends Transform {
29
68
  this.debug = debug;
30
69
  this.colMetadata = colMetadata;
31
70
  this.options = options;
32
- this.endOfMessageMarker = {};
71
+ this.endOfMessageMarker = new EndOfMessageMarker();
33
72
  this.buffer = Buffer.alloc(0);
34
73
  this.position = 0;
35
74
  this.suspended = false;
36
75
  this.next = undefined;
37
76
  }
38
77
 
39
- _transform(input, encoding, done) {
40
- if (input === this.endOfMessageMarker) {
41
- done(null, {
42
- // generate endOfMessage pseudo token
43
- name: 'EOM',
44
- event: 'endOfMessage'
45
- });
46
- return;
78
+ _transform(input, _encoding, done) {
79
+ if (input instanceof EndOfMessageMarker) {
80
+ return done(undefined, new _token.EndOfMessageToken());
47
81
  }
48
82
 
49
83
  if (this.position === this.buffer.length) {
@@ -57,7 +91,8 @@ module.exports = class Parser extends Transform {
57
91
  if (this.suspended) {
58
92
  // Unsuspend and continue from where ever we left off.
59
93
  this.suspended = false;
60
- this.next.call(null);
94
+ const next = this.next;
95
+ next();
61
96
  } // If we're no longer suspended, parse new tokens
62
97
 
63
98
 
@@ -72,9 +107,8 @@ module.exports = class Parser extends Transform {
72
107
  parseTokens() {
73
108
  const doneParsing = token => {
74
109
  if (token) {
75
- switch (token.name) {
76
- case 'COLMETADATA':
77
- this.colMetadata = token.columns;
110
+ if (token instanceof _token.ColMetadataToken) {
111
+ this.colMetadata = token.columns;
78
112
  }
79
113
 
80
114
  this.push(token);
@@ -188,6 +222,16 @@ module.exports = class Parser extends Transform {
188
222
  });
189
223
  }
190
224
 
225
+ readBigInt64LE(callback) {
226
+ this.awaitData(8, () => {
227
+ const result = _jsbi.default.add(_jsbi.default.leftShift(_jsbi.default.BigInt(this.buffer[this.position + 4] + this.buffer[this.position + 5] * Math.pow(2, 8) + this.buffer[this.position + 6] * Math.pow(2, 16) + (this.buffer[this.position + 7] << 24) // Overflow
228
+ ), _jsbi.default.BigInt(32)), _jsbi.default.BigInt(this.buffer[this.position] + this.buffer[this.position + 1] * Math.pow(2, 8) + this.buffer[this.position + 2] * Math.pow(2, 16) + this.buffer[this.position + 3] * Math.pow(2, 24)));
229
+
230
+ this.position += 8;
231
+ callback(result);
232
+ });
233
+ }
234
+
191
235
  readInt64LE(callback) {
192
236
  this.awaitData(8, () => {
193
237
  const data = Math.pow(2, 32) * this.buffer.readInt32LE(this.position + 4) + ((this.buffer[this.position + 4] & 0x80) === 0x80 ? 1 : -1) * this.buffer.readUInt32LE(this.position);
@@ -204,6 +248,17 @@ module.exports = class Parser extends Transform {
204
248
  });
205
249
  }
206
250
 
251
+ readBigUInt64LE(callback) {
252
+ this.awaitData(8, () => {
253
+ const low = _jsbi.default.BigInt(this.buffer.readUInt32LE(this.position));
254
+
255
+ const high = _jsbi.default.BigInt(this.buffer.readUInt32LE(this.position + 4));
256
+
257
+ this.position += 8;
258
+ callback(_jsbi.default.add(low, _jsbi.default.leftShift(high, _jsbi.default.BigInt(32))));
259
+ });
260
+ }
261
+
207
262
  readUInt64LE(callback) {
208
263
  this.awaitData(8, () => {
209
264
  const data = Math.pow(2, 32) * this.buffer.readUInt32LE(this.position + 4) + this.buffer.readUInt32LE(this.position);
@@ -341,4 +396,8 @@ module.exports = class Parser extends Transform {
341
396
  });
342
397
  }
343
398
 
344
- };
399
+ }
400
+
401
+ var _default = Parser;
402
+ exports.default = _default;
403
+ module.exports = Parser;