tedious 20.3.2 → 20.3.4

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 (37) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +11 -21
  3. package/lib/connection.js +8 -1
  4. package/lib/connection.js.map +1 -1
  5. package/lib/data-types/plp-stream.d.ts +1 -1
  6. package/lib/data-types/plp-stream.js +12 -9
  7. package/lib/data-types/plp-stream.js.map +1 -1
  8. package/lib/data-types/varchar.js +9 -14
  9. package/lib/data-types/varchar.js.map +1 -1
  10. package/lib/metadata-parser.d.ts +1 -3
  11. package/lib/metadata-parser.js +1 -22
  12. package/lib/metadata-parser.js.map +1 -1
  13. package/lib/request.d.ts +4 -5
  14. package/lib/request.js +5 -6
  15. package/lib/request.js.map +1 -1
  16. package/lib/token/colmetadata-token-parser.d.ts +11 -3
  17. package/lib/token/colmetadata-token-parser.js +29 -42
  18. package/lib/token/colmetadata-token-parser.js.map +1 -1
  19. package/lib/token/nbcrow-token-parser.d.ts +11 -3
  20. package/lib/token/nbcrow-token-parser.js +22 -89
  21. package/lib/token/nbcrow-token-parser.js.map +1 -1
  22. package/lib/token/returnvalue-token-parser.d.ts +19 -3
  23. package/lib/token/returnvalue-token-parser.js +67 -73
  24. package/lib/token/returnvalue-token-parser.js.map +1 -1
  25. package/lib/token/row-token-parser.d.ts +33 -3
  26. package/lib/token/row-token-parser.js +62 -60
  27. package/lib/token/row-token-parser.js.map +1 -1
  28. package/lib/token/stream-parser.d.ts +59 -27
  29. package/lib/token/stream-parser.js +157 -325
  30. package/lib/token/stream-parser.js.map +1 -1
  31. package/lib/token/token-stream-parser.d.ts +12 -5
  32. package/lib/token/token-stream-parser.js +46 -17
  33. package/lib/token/token-stream-parser.js.map +1 -1
  34. package/lib/value-parser.d.ts +19 -2
  35. package/lib/value-parser.js +73 -30
  36. package/lib/value-parser.js.map +1 -1
  37. package/package.json +1 -1
@@ -3,101 +3,34 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.NBCRowTokenReader = void 0;
7
7
  var _token = require("./token");
8
- var iconv = _interopRequireWildcard(require("iconv-lite"));
9
- var _valueParser = require("../value-parser");
10
8
  var _helpers = require("./helpers");
11
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
9
+ var _rowTokenParser = require("./row-token-parser");
12
10
  // s2.2.7.13 (introduced in TDS 7.3.B)
13
11
 
14
- async function nbcRowParser(parser) {
15
- const colMetadata = parser.colMetadata;
16
- const columns = [];
17
- const bitmap = [];
18
- const bitmapByteLength = Math.ceil(colMetadata.length / 8);
19
- while (parser.buffer.length - parser.position < bitmapByteLength) {
20
- await parser.waitForChunk();
12
+ /**
13
+ * Reads an `NBCROW` token - a `ROW` token prefixed with a bitmap that flags
14
+ * `null` columns, which then have no data.
15
+ */
16
+ class NBCRowTokenReader extends _rowTokenParser.ColumnValuesReader {
17
+ constructor() {
18
+ super();
19
+ this.nullBitmap = undefined;
21
20
  }
22
- const bytes = parser.buffer.slice(parser.position, parser.position + bitmapByteLength);
23
- parser.position += bitmapByteLength;
24
- for (let i = 0, len = bytes.length; i < len; i++) {
25
- const byte = bytes[i];
26
- bitmap.push(byte & 0b1 ? true : false);
27
- bitmap.push(byte & 0b10 ? true : false);
28
- bitmap.push(byte & 0b100 ? true : false);
29
- bitmap.push(byte & 0b1000 ? true : false);
30
- bitmap.push(byte & 0b10000 ? true : false);
31
- bitmap.push(byte & 0b100000 ? true : false);
32
- bitmap.push(byte & 0b1000000 ? true : false);
33
- bitmap.push(byte & 0b10000000 ? true : false);
34
- }
35
- for (let i = 0; i < colMetadata.length; i++) {
36
- const metadata = colMetadata[i];
37
- if (bitmap[i]) {
38
- columns.push({
39
- value: null,
40
- metadata
41
- });
42
- continue;
43
- }
44
- while (true) {
45
- if ((0, _valueParser.isPLPStream)(metadata)) {
46
- const chunks = await (0, _valueParser.readPLPStream)(parser);
47
- if (chunks === null) {
48
- columns.push({
49
- value: chunks,
50
- metadata
51
- });
52
- } else if (metadata.type.name === 'NVarChar' || metadata.type.name === 'Xml') {
53
- columns.push({
54
- value: Buffer.concat(chunks).toString('ucs2'),
55
- metadata
56
- });
57
- } else if (metadata.type.name === 'VarChar') {
58
- columns.push({
59
- value: iconv.decode(Buffer.concat(chunks), metadata.collation?.codepage ?? 'utf8'),
60
- metadata
61
- });
62
- } else if (metadata.type.name === 'VarBinary' || metadata.type.name === 'UDT') {
63
- columns.push({
64
- value: Buffer.concat(chunks),
65
- metadata
66
- });
67
- }
68
- } else {
69
- let result;
70
- try {
71
- result = (0, _valueParser.readValue)(parser.buffer, parser.position, metadata, parser.options);
72
- } catch (err) {
73
- if (err instanceof _helpers.NotEnoughDataError) {
74
- await parser.waitForChunk();
75
- continue;
76
- }
77
- throw err;
78
- }
79
- parser.position = result.offset;
80
- columns.push({
81
- value: result.value,
82
- metadata
83
- });
21
+ read(parser) {
22
+ if (this.nullBitmap === undefined) {
23
+ const start = parser.position;
24
+ const end = start + Math.ceil(parser.colMetadata.length / 8);
25
+ if (parser.buffer.length < end) {
26
+ throw new _helpers.NotEnoughDataError(end);
84
27
  }
85
- break;
28
+ this.nullBitmap = parser.buffer.subarray(start, end);
29
+ parser.position = end;
86
30
  }
87
- }
88
- if (parser.options.useColumnNames) {
89
- const columnsMap = Object.create(null);
90
- columns.forEach(column => {
91
- const colName = column.metadata.colName;
92
- if (columnsMap[colName] == null) {
93
- columnsMap[colName] = column;
94
- }
95
- });
96
- return new _token.NBCRowToken(columnsMap);
97
- } else {
98
- return new _token.NBCRowToken(columns);
31
+ this.readColumns(parser, this.nullBitmap);
32
+ return new _token.NBCRowToken(parser.options.useColumnNames ? (0, _rowTokenParser.toColumnsMap)(this.columns) : this.columns);
99
33
  }
100
34
  }
101
- var _default = exports.default = nbcRowParser;
102
- module.exports = nbcRowParser;
103
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiaWNvbnYiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl92YWx1ZVBhcnNlciIsIl9oZWxwZXJzIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwibmJjUm93UGFyc2VyIiwicGFyc2VyIiwiY29sTWV0YWRhdGEiLCJjb2x1bW5zIiwiYml0bWFwIiwiYml0bWFwQnl0ZUxlbmd0aCIsIk1hdGgiLCJjZWlsIiwibGVuZ3RoIiwiYnVmZmVyIiwicG9zaXRpb24iLCJ3YWl0Rm9yQ2h1bmsiLCJieXRlcyIsInNsaWNlIiwibGVuIiwiYnl0ZSIsInB1c2giLCJtZXRhZGF0YSIsInZhbHVlIiwiaXNQTFBTdHJlYW0iLCJjaHVua3MiLCJyZWFkUExQU3RyZWFtIiwidHlwZSIsIm5hbWUiLCJCdWZmZXIiLCJjb25jYXQiLCJ0b1N0cmluZyIsImRlY29kZSIsImNvbGxhdGlvbiIsImNvZGVwYWdlIiwicmVzdWx0IiwicmVhZFZhbHVlIiwib3B0aW9ucyIsImVyciIsIk5vdEVub3VnaERhdGFFcnJvciIsIm9mZnNldCIsInVzZUNvbHVtbk5hbWVzIiwiY29sdW1uc01hcCIsImNyZWF0ZSIsImZvckVhY2giLCJjb2x1bW4iLCJjb2xOYW1lIiwiTkJDUm93VG9rZW4iLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vbmJjcm93LXRva2VuLXBhcnNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzMi4yLjcuMTMgKGludHJvZHVjZWQgaW4gVERTIDcuMy5CKVxuXG5pbXBvcnQgUGFyc2VyIGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyB0eXBlIENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuXG5pbXBvcnQgeyBOQkNSb3dUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0ICogYXMgaWNvbnYgZnJvbSAnaWNvbnYtbGl0ZSc7XG5cbmltcG9ydCB7IGlzUExQU3RyZWFtLCByZWFkUExQU3RyZWFtLCByZWFkVmFsdWUgfSBmcm9tICcuLi92YWx1ZS1wYXJzZXInO1xuaW1wb3J0IHsgTm90RW5vdWdoRGF0YUVycm9yIH0gZnJvbSAnLi9oZWxwZXJzJztcblxuaW50ZXJmYWNlIENvbHVtbiB7XG4gIHZhbHVlOiB1bmtub3duO1xuICBtZXRhZGF0YTogQ29sdW1uTWV0YWRhdGE7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG5iY1Jvd1BhcnNlcihwYXJzZXI6IFBhcnNlcik6IFByb21pc2U8TkJDUm93VG9rZW4+IHtcbiAgY29uc3QgY29sTWV0YWRhdGEgPSBwYXJzZXIuY29sTWV0YWRhdGE7XG4gIGNvbnN0IGNvbHVtbnM6IENvbHVtbltdID0gW107XG4gIGNvbnN0IGJpdG1hcDogYm9vbGVhbltdID0gW107XG4gIGNvbnN0IGJpdG1hcEJ5dGVMZW5ndGggPSBNYXRoLmNlaWwoY29sTWV0YWRhdGEubGVuZ3RoIC8gOCk7XG5cbiAgd2hpbGUgKHBhcnNlci5idWZmZXIubGVuZ3RoIC0gcGFyc2VyLnBvc2l0aW9uIDwgYml0bWFwQnl0ZUxlbmd0aCkge1xuICAgIGF3YWl0IHBhcnNlci53YWl0Rm9yQ2h1bmsoKTtcbiAgfVxuXG4gIGNvbnN0IGJ5dGVzID0gcGFyc2VyLmJ1ZmZlci5zbGljZShwYXJzZXIucG9zaXRpb24sIHBhcnNlci5wb3NpdGlvbiArIGJpdG1hcEJ5dGVMZW5ndGgpO1xuICBwYXJzZXIucG9zaXRpb24gKz0gYml0bWFwQnl0ZUxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYnl0ZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gYnl0ZXNbaV07XG5cbiAgICBiaXRtYXAucHVzaChieXRlICYgMGIxID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICBiaXRtYXAucHVzaChieXRlICYgMGIxMCA/IHRydWUgOiBmYWxzZSk7XG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMTAwID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICBiaXRtYXAucHVzaChieXRlICYgMGIxMDAwID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICBiaXRtYXAucHVzaChieXRlICYgMGIxMDAwMCA/IHRydWUgOiBmYWxzZSk7XG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMTAwMDAwID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICBiaXRtYXAucHVzaChieXRlICYgMGIxMDAwMDAwID8gdHJ1ZSA6IGZhbHNlKTtcbiAgICBiaXRtYXAucHVzaChieXRlICYgMGIxMDAwMDAwMCA/IHRydWUgOiBmYWxzZSk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbE1ldGFkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBjb2xNZXRhZGF0YVtpXTtcbiAgICBpZiAoYml0bWFwW2ldKSB7XG4gICAgICBjb2x1bW5zLnB1c2goeyB2YWx1ZTogbnVsbCwgbWV0YWRhdGEgfSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKGlzUExQU3RyZWFtKG1ldGFkYXRhKSkge1xuICAgICAgICBjb25zdCBjaHVua3MgPSBhd2FpdCByZWFkUExQU3RyZWFtKHBhcnNlcik7XG5cbiAgICAgICAgaWYgKGNodW5rcyA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbHVtbnMucHVzaCh7IHZhbHVlOiBjaHVua3MsIG1ldGFkYXRhIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnR5cGUubmFtZSA9PT0gJ05WYXJDaGFyJyB8fCBtZXRhZGF0YS50eXBlLm5hbWUgPT09ICdYbWwnKSB7XG4gICAgICAgICAgY29sdW1ucy5wdXNoKHsgdmFsdWU6IEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndWNzMicpLCBtZXRhZGF0YSB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS50eXBlLm5hbWUgPT09ICdWYXJDaGFyJykge1xuICAgICAgICAgIGNvbHVtbnMucHVzaCh7IHZhbHVlOiBpY29udi5kZWNvZGUoQnVmZmVyLmNvbmNhdChjaHVua3MpLCBtZXRhZGF0YS5jb2xsYXRpb24/LmNvZGVwYWdlID8/ICd1dGY4JyksIG1ldGFkYXRhIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnR5cGUubmFtZSA9PT0gJ1ZhckJpbmFyeScgfHwgbWV0YWRhdGEudHlwZS5uYW1lID09PSAnVURUJykge1xuICAgICAgICAgIGNvbHVtbnMucHVzaCh7IHZhbHVlOiBCdWZmZXIuY29uY2F0KGNodW5rcyksIG1ldGFkYXRhIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlYWRWYWx1ZShwYXJzZXIuYnVmZmVyLCBwYXJzZXIucG9zaXRpb24sIG1ldGFkYXRhLCBwYXJzZXIub3B0aW9ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgICAgIGF3YWl0IHBhcnNlci53YWl0Rm9yQ2h1bmsoKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci5wb3NpdGlvbiA9IHJlc3VsdC5vZmZzZXQ7XG4gICAgICAgIGNvbHVtbnMucHVzaCh7IHZhbHVlOiByZXN1bHQudmFsdWUsIG1ldGFkYXRhIH0pO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAocGFyc2VyLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMpIHtcbiAgICBjb25zdCBjb2x1bW5zTWFwOiB7IFtrZXk6IHN0cmluZ106IENvbHVtbiB9ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBjb2xOYW1lID0gY29sdW1uLm1ldGFkYXRhLmNvbE5hbWU7XG4gICAgICBpZiAoY29sdW1uc01hcFtjb2xOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbHVtbnNNYXBbY29sTmFtZV0gPSBjb2x1bW47XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IE5CQ1Jvd1Rva2VuKGNvbHVtbnNNYXApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXcgTkJDUm93VG9rZW4oY29sdW1ucyk7XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBuYmNSb3dQYXJzZXI7XG5tb2R1bGUuZXhwb3J0cyA9IG5iY1Jvd1BhcnNlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBS0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksUUFBQSxHQUFBSixPQUFBO0FBQStDLFNBQUFFLHdCQUFBRyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBTCx1QkFBQSxZQUFBQSxDQUFBRyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlCQUFBQSxDQUFBLHVCQUFBQSxDQUFBLHlCQUFBQSxDQUFBLFNBQUFRLENBQUEs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UUFBUSxDQUFDSyxJQUFJLENBQUNDLElBQUksS0FBSyxLQUFLLEVBQUU7VUFDN0VwQixPQUFPLENBQUNhLElBQUksQ0FBQztZQUFFRSxLQUFLLEVBQUVNLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDTCxNQUFNLENBQUM7WUFBRUg7VUFBUyxDQUFDLENBQUM7UUFDMUQ7TUFDRixDQUFDLE1BQU07UUFDTCxJQUFJYSxNQUFNO1FBQ1YsSUFBSTtVQUNGQSxNQUFNLEdBQUcsSUFBQUMsc0JBQVMsRUFBQzlCLE1BQU0sQ0FBQ1EsTUFBTSxFQUFFUixNQUFNLENBQUNTLFFBQVEsRUFBRU8sUUFBUSxFQUFFaEIsTUFBTSxDQUFDK0IsT0FBTyxDQUFDO1FBQzlFLENBQUMsQ0FBQyxPQUFPQyxHQUFHLEVBQUU7VUFDWixJQUFJQSxHQUFHLFlBQVlDLDJCQUFrQixFQUFFO1lBQ3JDLE1BQU1qQyxNQUFNLENBQUNVLFlBQVksQ0FBQyxDQUFDO1lBQzNCO1VBQ0Y7VUFFQSxNQUFNc0IsR0FBRztRQUNYO1FBRUFoQyxNQUFNLENBQUNTLFFBQVEsR0FBR29CLE1BQU0sQ0FBQ0ssTUFBTTtRQUMvQmhDLE9BQU8sQ0FBQ2EsSUFBSSxDQUFDO1VBQUVFLEtBQUssRUFBRVksTUFBTSxDQUFDWixLQUFLO1VBQUVEO1FBQVMsQ0FBQyxDQUFDO01BQ2pEO01BRUE7SUFDRjtFQUNGO0VBRUEsSUFBSWhCLE1BQU0sQ0FBQytCLE9BQU8sQ0FBQ0ksY0FBYyxFQUFFO0lBQ2pDLE1BQU1DLFVBQXFDLEdBQUd4QyxNQUFNLENBQUN5QyxNQUFNLENBQUMsSUFBSSxDQUFDO0lBRWpFbkMsT0FBTyxDQUFDb0MsT0FBTyxDQUFFQyxNQUFNLElBQUs7TUFDMUIsTUFBTUMsT0FBTyxHQUFHRCxNQUFNLENBQUN2QixRQUFRLENBQUN3QixPQUFPO01BQ3ZDLElBQUlKLFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLElBQUksSUFBSSxFQUFFO1FBQy9CSixVQUFVLENBQUNJLE9BQU8sQ0FBQyxHQUFHRCxNQUFNO01BQzlCO0lBQ0YsQ0FBQyxDQUFDO0lBRUYsT0FBTyxJQUFJRSxrQkFBVyxDQUFDTCxVQUFVLENBQUM7RUFDcEMsQ0FBQyxNQUFNO0lBQ0wsT0FBTyxJQUFJSyxrQkFBVyxDQUFDdkMsT0FBTyxDQUFDO0VBQ2pDO0FBQ0Y7QUFBQyxJQUFBd0MsUUFBQSxHQUFBQyxPQUFBLENBQUFyRCxPQUFBLEdBR2NTLFlBQVk7QUFDM0I2QyxNQUFNLENBQUNELE9BQU8sR0FBRzVDLFlBQVkiLCJpZ25vcmVMaXN0IjpbXX0=
35
+ exports.NBCRowTokenReader = NBCRowTokenReader;
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX2hlbHBlcnMiLCJfcm93VG9rZW5QYXJzZXIiLCJOQkNSb3dUb2tlblJlYWRlciIsIkNvbHVtblZhbHVlc1JlYWRlciIsImNvbnN0cnVjdG9yIiwibnVsbEJpdG1hcCIsInVuZGVmaW5lZCIsInJlYWQiLCJwYXJzZXIiLCJzdGFydCIsInBvc2l0aW9uIiwiZW5kIiwiTWF0aCIsImNlaWwiLCJjb2xNZXRhZGF0YSIsImxlbmd0aCIsImJ1ZmZlciIsIk5vdEVub3VnaERhdGFFcnJvciIsInN1YmFycmF5IiwicmVhZENvbHVtbnMiLCJOQkNSb3dUb2tlbiIsIm9wdGlvbnMiLCJ1c2VDb2x1bW5OYW1lcyIsInRvQ29sdW1uc01hcCIsImNvbHVtbnMiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL25iY3Jvdy10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gczIuMi43LjEzIChpbnRyb2R1Y2VkIGluIFREUyA3LjMuQilcblxuaW1wb3J0IFBhcnNlciwgeyB0eXBlIFRva2VuUmVhZGVyIH0gZnJvbSAnLi9zdHJlYW0tcGFyc2VyJztcblxuaW1wb3J0IHsgTkJDUm93VG9rZW4gfSBmcm9tICcuL3Rva2VuJztcbmltcG9ydCB7IE5vdEVub3VnaERhdGFFcnJvciB9IGZyb20gJy4vaGVscGVycyc7XG5pbXBvcnQgeyBDb2x1bW5WYWx1ZXNSZWFkZXIsIHRvQ29sdW1uc01hcCB9IGZyb20gJy4vcm93LXRva2VuLXBhcnNlcic7XG5cbi8qKlxuICogUmVhZHMgYW4gYE5CQ1JPV2AgdG9rZW4gLSBhIGBST1dgIHRva2VuIHByZWZpeGVkIHdpdGggYSBiaXRtYXAgdGhhdCBmbGFnc1xuICogYG51bGxgIGNvbHVtbnMsIHdoaWNoIHRoZW4gaGF2ZSBubyBkYXRhLlxuICovXG5leHBvcnQgY2xhc3MgTkJDUm93VG9rZW5SZWFkZXIgZXh0ZW5kcyBDb2x1bW5WYWx1ZXNSZWFkZXIgaW1wbGVtZW50cyBUb2tlblJlYWRlciB7XG4gIGRlY2xhcmUgbnVsbEJpdG1hcDogQnVmZmVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5udWxsQml0bWFwID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVhZChwYXJzZXI6IFBhcnNlcik6IE5CQ1Jvd1Rva2VuIHtcbiAgICBpZiAodGhpcy5udWxsQml0bWFwID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gcGFyc2VyLnBvc2l0aW9uO1xuICAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBNYXRoLmNlaWwocGFyc2VyLmNvbE1ldGFkYXRhLmxlbmd0aCAvIDgpO1xuICAgICAgaWYgKHBhcnNlci5idWZmZXIubGVuZ3RoIDwgZW5kKSB7XG4gICAgICAgIHRocm93IG5ldyBOb3RFbm91Z2hEYXRhRXJyb3IoZW5kKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5udWxsQml0bWFwID0gcGFyc2VyLmJ1ZmZlci5zdWJhcnJheShzdGFydCwgZW5kKTtcbiAgICAgIHBhcnNlci5wb3NpdGlvbiA9IGVuZDtcbiAgICB9XG5cbiAgICB0aGlzLnJlYWRDb2x1bW5zKHBhcnNlciwgdGhpcy5udWxsQml0bWFwKTtcbiAgICByZXR1cm4gbmV3IE5CQ1Jvd1Rva2VuKHBhcnNlci5vcHRpb25zLnVzZUNvbHVtbk5hbWVzID8gdG9Db2x1bW5zTWFwKHRoaXMuY29sdW1ucykgOiB0aGlzLmNvbHVtbnMpO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUlBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLFFBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGVBQUEsR0FBQUYsT0FBQTtBQU5BOztBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sTUFBTUcsaUJBQWlCLFNBQVNDLGtDQUFrQixDQUF3QjtFQUcvRUMsV0FBV0EsQ0FBQSxFQUFHO0lBQ1osS0FBSyxDQUFDLENBQUM7SUFDUCxJQUFJLENBQUNDLFVBQVUsR0FBR0MsU0FBUztFQUM3QjtFQUVBQyxJQUFJQSxDQUFDQyxNQUFjLEVBQWU7SUFDaEMsSUFBSSxJQUFJLENBQUNILFVBQVUsS0FBS0MsU0FBUyxFQUFFO01BQ2pDLE1BQU1HLEtBQUssR0FBR0QsTUFBTSxDQUFDRSxRQUFRO01BQzdCLE1BQU1DLEdBQUcsR0FBR0YsS0FBSyxHQUFHRyxJQUFJLENBQUNDLElBQUksQ0FBQ0wsTUFBTSxDQUFDTSxXQUFXLENBQUNDLE1BQU0sR0FBRyxDQUFDLENBQUM7TUFDNUQsSUFBSVAsTUFBTSxDQUFDUSxNQUFNLENBQUNELE1BQU0sR0FBR0osR0FBRyxFQUFFO1FBQzlCLE1BQU0sSUFBSU0sMkJBQWtCLENBQUNOLEdBQUcsQ0FBQztNQUNuQztNQUVBLElBQUksQ0FBQ04sVUFBVSxHQUFHRyxNQUFNLENBQUNRLE1BQU0sQ0FBQ0UsUUFBUSxDQUFDVCxLQUFLLEVBQUVFLEdBQUcsQ0FBQztNQUNwREgsTUFBTSxDQUFDRSxRQUFRLEdBQUdDLEdBQUc7SUFDdkI7SUFFQSxJQUFJLENBQUNRLFdBQVcsQ0FBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQ0gsVUFBVSxDQUFDO0lBQ3pDLE9BQU8sSUFBSWUsa0JBQVcsQ0FBQ1osTUFBTSxDQUFDYSxPQUFPLENBQUNDLGNBQWMsR0FBRyxJQUFBQyw0QkFBWSxFQUFDLElBQUksQ0FBQ0MsT0FBTyxDQUFDLEdBQUcsSUFBSSxDQUFDQSxPQUFPLENBQUM7RUFDbkc7QUFDRjtBQUFDQyxPQUFBLENBQUF2QixpQkFBQSxHQUFBQSxpQkFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -1 +1 @@
1
- {"version":3,"file":"nbcrow-token-parser.js","names":["_token","require","iconv","_interopRequireWildcard","_valueParser","_helpers","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","nbcRowParser","parser","colMetadata","columns","bitmap","bitmapByteLength","Math","ceil","length","buffer","position","waitForChunk","bytes","slice","len","byte","push","metadata","value","isPLPStream","chunks","readPLPStream","type","name","Buffer","concat","toString","decode","collation","codepage","result","readValue","options","err","NotEnoughDataError","offset","useColumnNames","columnsMap","create","forEach","column","colName","NBCRowToken","_default","exports","module"],"sources":["../../src/token/nbcrow-token-parser.ts"],"sourcesContent":["// s2.2.7.13 (introduced in TDS 7.3.B)\n\nimport Parser from './stream-parser';\nimport { type ColumnMetadata } from './colmetadata-token-parser';\n\nimport { NBCRowToken } from './token';\nimport * as iconv from 'iconv-lite';\n\nimport { isPLPStream, readPLPStream, readValue } from '../value-parser';\nimport { NotEnoughDataError } from './helpers';\n\ninterface Column {\n value: unknown;\n metadata: ColumnMetadata;\n}\n\nasync function nbcRowParser(parser: Parser): Promise<NBCRowToken> {\n const colMetadata = parser.colMetadata;\n const columns: Column[] = [];\n const bitmap: boolean[] = [];\n const bitmapByteLength = Math.ceil(colMetadata.length / 8);\n\n while (parser.buffer.length - parser.position < bitmapByteLength) {\n await parser.waitForChunk();\n }\n\n const bytes = parser.buffer.slice(parser.position, parser.position + bitmapByteLength);\n parser.position += bitmapByteLength;\n\n for (let i = 0, len = bytes.length; i < len; i++) {\n const byte = bytes[i];\n\n bitmap.push(byte & 0b1 ? true : false);\n bitmap.push(byte & 0b10 ? true : false);\n bitmap.push(byte & 0b100 ? true : false);\n bitmap.push(byte & 0b1000 ? true : false);\n bitmap.push(byte & 0b10000 ? true : false);\n bitmap.push(byte & 0b100000 ? true : false);\n bitmap.push(byte & 0b1000000 ? true : false);\n bitmap.push(byte & 0b10000000 ? true : false);\n }\n\n for (let i = 0; i < colMetadata.length; i++) {\n const metadata = colMetadata[i];\n if (bitmap[i]) {\n columns.push({ value: null, metadata });\n continue;\n }\n\n while (true) {\n if (isPLPStream(metadata)) {\n const chunks = await readPLPStream(parser);\n\n if (chunks === null) {\n columns.push({ value: chunks, metadata });\n } else if (metadata.type.name === 'NVarChar' || metadata.type.name === 'Xml') {\n columns.push({ value: Buffer.concat(chunks).toString('ucs2'), metadata });\n } else if (metadata.type.name === 'VarChar') {\n columns.push({ value: iconv.decode(Buffer.concat(chunks), metadata.collation?.codepage ?? 'utf8'), metadata });\n } else if (metadata.type.name === 'VarBinary' || metadata.type.name === 'UDT') {\n columns.push({ value: Buffer.concat(chunks), metadata });\n }\n } else {\n let result;\n try {\n result = readValue(parser.buffer, parser.position, metadata, parser.options);\n } catch (err) {\n if (err instanceof NotEnoughDataError) {\n await parser.waitForChunk();\n continue;\n }\n\n throw err;\n }\n\n parser.position = result.offset;\n columns.push({ value: result.value, metadata });\n }\n\n break;\n }\n }\n\n if (parser.options.useColumnNames) {\n const columnsMap: { [key: string]: Column } = Object.create(null);\n\n columns.forEach((column) => {\n const colName = column.metadata.colName;\n if (columnsMap[colName] == null) {\n columnsMap[colName] = column;\n }\n });\n\n return new NBCRowToken(columnsMap);\n } else {\n return new NBCRowToken(columns);\n }\n}\n\n\nexport default nbcRowParser;\nmodule.exports = nbcRowParser;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"nbcrow-token-parser.js","names":["_token","require","_helpers","_rowTokenParser","NBCRowTokenReader","ColumnValuesReader","constructor","nullBitmap","undefined","read","parser","start","position","end","Math","ceil","colMetadata","length","buffer","NotEnoughDataError","subarray","readColumns","NBCRowToken","options","useColumnNames","toColumnsMap","columns","exports"],"sources":["../../src/token/nbcrow-token-parser.ts"],"sourcesContent":["// s2.2.7.13 (introduced in TDS 7.3.B)\n\nimport Parser, { type TokenReader } from './stream-parser';\n\nimport { NBCRowToken } from './token';\nimport { NotEnoughDataError } from './helpers';\nimport { ColumnValuesReader, toColumnsMap } from './row-token-parser';\n\n/**\n * Reads an `NBCROW` token - a `ROW` token prefixed with a bitmap that flags\n * `null` columns, which then have no data.\n */\nexport class NBCRowTokenReader extends ColumnValuesReader implements TokenReader {\n declare nullBitmap: Buffer | undefined;\n\n constructor() {\n super();\n this.nullBitmap = undefined;\n }\n\n read(parser: Parser): NBCRowToken {\n if (this.nullBitmap === undefined) {\n const start = parser.position;\n const end = start + Math.ceil(parser.colMetadata.length / 8);\n if (parser.buffer.length < end) {\n throw new NotEnoughDataError(end);\n }\n\n this.nullBitmap = parser.buffer.subarray(start, end);\n parser.position = end;\n }\n\n this.readColumns(parser, this.nullBitmap);\n return new NBCRowToken(parser.options.useColumnNames ? toColumnsMap(this.columns) : this.columns);\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAF,OAAA;AANA;;AAQA;AACA;AACA;AACA;AACO,MAAMG,iBAAiB,SAASC,kCAAkB,CAAwB;EAG/EC,WAAWA,CAAA,EAAG;IACZ,KAAK,CAAC,CAAC;IACP,IAAI,CAACC,UAAU,GAAGC,SAAS;EAC7B;EAEAC,IAAIA,CAACC,MAAc,EAAe;IAChC,IAAI,IAAI,CAACH,UAAU,KAAKC,SAAS,EAAE;MACjC,MAAMG,KAAK,GAAGD,MAAM,CAACE,QAAQ;MAC7B,MAAMC,GAAG,GAAGF,KAAK,GAAGG,IAAI,CAACC,IAAI,CAACL,MAAM,CAACM,WAAW,CAACC,MAAM,GAAG,CAAC,CAAC;MAC5D,IAAIP,MAAM,CAACQ,MAAM,CAACD,MAAM,GAAGJ,GAAG,EAAE;QAC9B,MAAM,IAAIM,2BAAkB,CAACN,GAAG,CAAC;MACnC;MAEA,IAAI,CAACN,UAAU,GAAGG,MAAM,CAACQ,MAAM,CAACE,QAAQ,CAACT,KAAK,EAAEE,GAAG,CAAC;MACpDH,MAAM,CAACE,QAAQ,GAAGC,GAAG;IACvB;IAEA,IAAI,CAACQ,WAAW,CAACX,MAAM,EAAE,IAAI,CAACH,UAAU,CAAC;IACzC,OAAO,IAAIe,kBAAW,CAACZ,MAAM,CAACa,OAAO,CAACC,cAAc,GAAG,IAAAC,4BAAY,EAAC,IAAI,CAACC,OAAO,CAAC,GAAG,IAAI,CAACA,OAAO,CAAC;EACnG;AACF;AAACC,OAAA,CAAAvB,iBAAA,GAAAA,iBAAA","ignoreList":[]}
@@ -1,4 +1,20 @@
1
- import Parser from './stream-parser';
1
+ import Parser, { type TokenReader } from './stream-parser';
2
2
  import { ReturnValueToken } from './token';
3
- declare function returnParser(parser: Parser): Promise<ReturnValueToken>;
4
- export default returnParser;
3
+ import { type Metadata } from '../metadata-parser';
4
+ import { PLPReader } from '../value-parser';
5
+ interface ReturnValueHeader {
6
+ paramOrdinal: number;
7
+ paramName: string;
8
+ metadata: Metadata;
9
+ }
10
+ /**
11
+ * Reads a `RETURNVALUE` token. The returned value can be an arbitrarily large
12
+ * PLP value, so the progress is kept across chunks.
13
+ */
14
+ export declare class ReturnValueTokenReader implements TokenReader {
15
+ header: ReturnValueHeader | undefined;
16
+ plpReader: PLPReader | undefined;
17
+ constructor();
18
+ read(parser: Parser): ReturnValueToken;
19
+ }
20
+ export {};
@@ -3,91 +3,85 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.default = void 0;
6
+ exports.ReturnValueTokenReader = void 0;
7
7
  var _token = require("./token");
8
8
  var _metadataParser = require("../metadata-parser");
9
9
  var _valueParser = require("../value-parser");
10
10
  var _helpers = require("./helpers");
11
- var iconv = _interopRequireWildcard(require("iconv-lite"));
12
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
13
11
  // s2.2.7.16
14
12
 
15
- async function returnParser(parser) {
16
- let paramName;
13
+ function readHeader(buf, offset, options) {
17
14
  let paramOrdinal;
15
+ ({
16
+ offset,
17
+ value: paramOrdinal
18
+ } = (0, _helpers.readUInt16LE)(buf, offset));
19
+ let paramName;
20
+ ({
21
+ offset,
22
+ value: paramName
23
+ } = (0, _helpers.readBVarChar)(buf, offset));
24
+ if (paramName.charAt(0) === '@') {
25
+ paramName = paramName.slice(1);
26
+ }
27
+
28
+ // status
29
+ ({
30
+ offset
31
+ } = (0, _helpers.readUInt8)(buf, offset));
18
32
  let metadata;
19
- while (true) {
20
- const buf = parser.buffer;
21
- let offset = parser.position;
22
- try {
23
- ({
24
- offset,
25
- value: paramOrdinal
26
- } = (0, _helpers.readUInt16LE)(buf, offset));
27
- ({
28
- offset,
29
- value: paramName
30
- } = (0, _helpers.readBVarChar)(buf, offset));
31
- // status
32
- ({
33
+ ({
34
+ offset,
35
+ value: metadata
36
+ } = (0, _metadataParser.readMetadata)(buf, offset, options));
37
+ return new _helpers.Result({
38
+ paramOrdinal,
39
+ paramName,
40
+ metadata
41
+ }, offset);
42
+ }
43
+
44
+ /**
45
+ * Reads a `RETURNVALUE` token. The returned value can be an arbitrarily large
46
+ * PLP value, so the progress is kept across chunks.
47
+ */
48
+ class ReturnValueTokenReader {
49
+ // The reader of a PLP value that is not complete yet.
50
+
51
+ constructor() {
52
+ this.header = undefined;
53
+ this.plpReader = undefined;
54
+ }
55
+ read(parser) {
56
+ if (this.header === undefined) {
57
+ const {
58
+ value,
33
59
  offset
34
- } = (0, _helpers.readUInt8)(buf, offset));
35
- ({
36
- offset,
37
- value: metadata
38
- } = (0, _metadataParser.readMetadata)(buf, offset, parser.options));
39
- if (paramName.charAt(0) === '@') {
40
- paramName = paramName.slice(1);
41
- }
42
- } catch (err) {
43
- if (err instanceof _helpers.NotEnoughDataError) {
44
- await parser.waitForChunk();
45
- continue;
46
- }
47
- throw err;
60
+ } = readHeader(parser.buffer, parser.position, parser.options);
61
+ parser.position = offset;
62
+ this.header = value;
48
63
  }
49
- parser.position = offset;
50
- break;
51
- }
52
- let value;
53
- while (true) {
54
- const buf = parser.buffer;
55
- let offset = parser.position;
64
+ const {
65
+ paramOrdinal,
66
+ paramName,
67
+ metadata
68
+ } = this.header;
69
+ let value;
56
70
  if ((0, _valueParser.isPLPStream)(metadata)) {
57
- const chunks = await (0, _valueParser.readPLPStream)(parser);
58
- if (chunks === null) {
59
- value = chunks;
60
- } else if (metadata.type.name === 'NVarChar' || metadata.type.name === 'Xml') {
61
- value = Buffer.concat(chunks).toString('ucs2');
62
- } else if (metadata.type.name === 'VarChar') {
63
- value = iconv.decode(Buffer.concat(chunks), metadata.collation?.codepage ?? 'utf8');
64
- } else if (metadata.type.name === 'VarBinary' || metadata.type.name === 'UDT') {
65
- value = Buffer.concat(chunks);
66
- }
71
+ this.plpReader ??= new _valueParser.PLPReader(metadata);
72
+ value = this.plpReader.read(parser);
67
73
  } else {
68
- try {
69
- ({
70
- value,
71
- offset
72
- } = (0, _valueParser.readValue)(buf, offset, metadata, parser.options));
73
- } catch (err) {
74
- if (err instanceof _helpers.NotEnoughDataError) {
75
- await parser.waitForChunk();
76
- continue;
77
- }
78
- throw err;
79
- }
80
- parser.position = offset;
74
+ const result = (0, _valueParser.readValue)(parser.buffer, parser.position, metadata, parser.options);
75
+ parser.position = result.offset;
76
+ value = result.value;
81
77
  }
82
- break;
78
+ return new _token.ReturnValueToken({
79
+ paramOrdinal,
80
+ paramName,
81
+ metadata,
82
+ value
83
+ });
83
84
  }
84
- return new _token.ReturnValueToken({
85
- paramOrdinal: paramOrdinal,
86
- paramName: paramName,
87
- metadata: metadata,
88
- value: value
89
- });
90
85
  }
91
- var _default = exports.default = returnParser;
92
- module.exports = returnParser;
93
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX21ldGFkYXRhUGFyc2VyIiwiX3ZhbHVlUGFyc2VyIiwiX2hlbHBlcnMiLCJpY29udiIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiZSIsInQiLCJXZWFrTWFwIiwiciIsIm4iLCJfX2VzTW9kdWxlIiwibyIsImkiLCJmIiwiX19wcm90b19fIiwiZGVmYXVsdCIsImhhcyIsImdldCIsInNldCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwicmV0dXJuUGFyc2VyIiwicGFyc2VyIiwicGFyYW1OYW1lIiwicGFyYW1PcmRpbmFsIiwibWV0YWRhdGEiLCJidWYiLCJidWZmZXIiLCJvZmZzZXQiLCJwb3NpdGlvbiIsInZhbHVlIiwicmVhZFVJbnQxNkxFIiwicmVhZEJWYXJDaGFyIiwicmVhZFVJbnQ4IiwicmVhZE1ldGFkYXRhIiwib3B0aW9ucyIsImNoYXJBdCIsInNsaWNlIiwiZXJyIiwiTm90RW5vdWdoRGF0YUVycm9yIiwid2FpdEZvckNodW5rIiwiaXNQTFBTdHJlYW0iLCJjaHVua3MiLCJyZWFkUExQU3RyZWFtIiwidHlwZSIsIm5hbWUiLCJCdWZmZXIiLCJjb25jYXQiLCJ0b1N0cmluZyIsImRlY29kZSIsImNvbGxhdGlvbiIsImNvZGVwYWdlIiwicmVhZFZhbHVlIiwiUmV0dXJuVmFsdWVUb2tlbiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9yZXR1cm52YWx1ZS10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gczIuMi43LjE2XG5cbmltcG9ydCBQYXJzZXIgZnJvbSAnLi9zdHJlYW0tcGFyc2VyJztcblxuaW1wb3J0IHsgUmV0dXJuVmFsdWVUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuXG5pbXBvcnQgeyByZWFkTWV0YWRhdGEgfSBmcm9tICcuLi9tZXRhZGF0YS1wYXJzZXInO1xuaW1wb3J0IHsgaXNQTFBTdHJlYW0sIHJlYWRQTFBTdHJlYW0sIHJlYWRWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlLXBhcnNlcic7XG5pbXBvcnQgeyBOb3RFbm91Z2hEYXRhRXJyb3IsIHJlYWRCVmFyQ2hhciwgcmVhZFVJbnQxNkxFLCByZWFkVUludDggfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0ICogYXMgaWNvbnYgZnJvbSAnaWNvbnYtbGl0ZSc7XG5cbmFzeW5jIGZ1bmN0aW9uIHJldHVyblBhcnNlcihwYXJzZXI6IFBhcnNlcik6IFByb21pc2U8UmV0dXJuVmFsdWVUb2tlbj4ge1xuICBsZXQgcGFyYW1OYW1lO1xuICBsZXQgcGFyYW1PcmRpbmFsO1xuICBsZXQgbWV0YWRhdGE7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBidWYgPSBwYXJzZXIuYnVmZmVyO1xuICAgIGxldCBvZmZzZXQgPSBwYXJzZXIucG9zaXRpb247XG5cbiAgICB0cnkge1xuICAgICAgKHsgb2Zmc2V0LCB2YWx1ZTogcGFyYW1PcmRpbmFsIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcbiAgICAgICh7IG9mZnNldCwgdmFsdWU6IHBhcmFtTmFtZSB9ID0gcmVhZEJWYXJDaGFyKGJ1Ziwgb2Zmc2V0KSk7XG4gICAgICAvLyBzdGF0dXNcbiAgICAgICh7IG9mZnNldCB9ID0gcmVhZFVJbnQ4KGJ1Ziwgb2Zmc2V0KSk7XG4gICAgICAoeyBvZmZzZXQsIHZhbHVlOiBtZXRhZGF0YSB9ID0gcmVhZE1ldGFkYXRhKGJ1Ziwgb2Zmc2V0LCBwYXJzZXIub3B0aW9ucykpO1xuXG4gICAgICBpZiAocGFyYW1OYW1lLmNoYXJBdCgwKSA9PT0gJ0AnKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IHBhcmFtTmFtZS5zbGljZSgxKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBOb3RFbm91Z2hEYXRhRXJyb3IpIHtcbiAgICAgICAgYXdhaXQgcGFyc2VyLndhaXRGb3JDaHVuaygpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIHBhcnNlci5wb3NpdGlvbiA9IG9mZnNldDtcbiAgICBicmVhaztcbiAgfVxuXG4gIGxldCB2YWx1ZTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb25zdCBidWYgPSBwYXJzZXIuYnVmZmVyO1xuICAgIGxldCBvZmZzZXQgPSBwYXJzZXIucG9zaXRpb247XG5cbiAgICBpZiAoaXNQTFBTdHJlYW0obWV0YWRhdGEpKSB7XG4gICAgICBjb25zdCBjaHVua3MgPSBhd2FpdCByZWFkUExQU3RyZWFtKHBhcnNlcik7XG5cbiAgICAgIGlmIChjaHVua3MgPT09IG51bGwpIHtcbiAgICAgICAgdmFsdWUgPSBjaHVua3M7XG4gICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnR5cGUubmFtZSA9PT0gJ05WYXJDaGFyJyB8fCBtZXRhZGF0YS50eXBlLm5hbWUgPT09ICdYbWwnKSB7XG4gICAgICAgIHZhbHVlID0gQnVmZmVyLmNvbmNhdChjaHVua3MpLnRvU3RyaW5nKCd1Y3MyJyk7XG4gICAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLnR5cGUubmFtZSA9PT0gJ1ZhckNoYXInKSB7XG4gICAgICAgIHZhbHVlID0gaWNvbnYuZGVjb2RlKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSwgbWV0YWRhdGEuY29sbGF0aW9uPy5jb2RlcGFnZSA/PyAndXRmOCcpO1xuICAgICAgfSBlbHNlIGlmIChtZXRhZGF0YS50eXBlLm5hbWUgPT09ICdWYXJCaW5hcnknIHx8IG1ldGFkYXRhLnR5cGUubmFtZSA9PT0gJ1VEVCcpIHtcbiAgICAgICAgdmFsdWUgPSBCdWZmZXIuY29uY2F0KGNodW5rcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgICh7IHZhbHVlLCBvZmZzZXQgfSA9IHJlYWRWYWx1ZShidWYsIG9mZnNldCwgbWV0YWRhdGEsIHBhcnNlci5vcHRpb25zKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIE5vdEVub3VnaERhdGFFcnJvcikge1xuICAgICAgICAgIGF3YWl0IHBhcnNlci53YWl0Rm9yQ2h1bmsoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cblxuICAgICAgcGFyc2VyLnBvc2l0aW9uID0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSZXR1cm5WYWx1ZVRva2VuKHtcbiAgICBwYXJhbU9yZGluYWw6IHBhcmFtT3JkaW5hbCxcbiAgICBwYXJhbU5hbWU6IHBhcmFtTmFtZSxcbiAgICBtZXRhZGF0YTogbWV0YWRhdGEsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5leHBvcnQgZGVmYXVsdCByZXR1cm5QYXJzZXI7XG5tb2R1bGUuZXhwb3J0cyA9IHJldHVyblBhcnNlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsZUFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsUUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksS0FBQSxHQUFBQyx1QkFBQSxDQUFBTCxPQUFBO0FBQW9DLFNBQUFLLHdCQUFBQyxDQUFBLEVBQUFDLENBQUEsNkJBQUFDLE9BQUEsTUFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBSCx1QkFBQSxZQUFBQSxDQUFBQyxDQUFBLEVBQUFDLENBQUEsU0FBQUEsQ0FBQSxJQUFBRCxDQUFBLElBQUFBLENBQUEsQ0FBQUssVUFBQSxTQUFBTCxDQUFBLE1BQUFNLENBQUEsRUFBQUMsQ0FBQSxFQUFBQyxDQUFBLEtBQUFDLFNBQUEsUUFBQUMsT0FBQSxFQUFBVixDQUFBLGlC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
86
+ exports.ReturnValueTokenReader = ReturnValueTokenReader;
87
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX21ldGFkYXRhUGFyc2VyIiwiX3ZhbHVlUGFyc2VyIiwiX2hlbHBlcnMiLCJyZWFkSGVhZGVyIiwiYnVmIiwib2Zmc2V0Iiwib3B0aW9ucyIsInBhcmFtT3JkaW5hbCIsInZhbHVlIiwicmVhZFVJbnQxNkxFIiwicGFyYW1OYW1lIiwicmVhZEJWYXJDaGFyIiwiY2hhckF0Iiwic2xpY2UiLCJyZWFkVUludDgiLCJtZXRhZGF0YSIsInJlYWRNZXRhZGF0YSIsIlJlc3VsdCIsIlJldHVyblZhbHVlVG9rZW5SZWFkZXIiLCJjb25zdHJ1Y3RvciIsImhlYWRlciIsInVuZGVmaW5lZCIsInBscFJlYWRlciIsInJlYWQiLCJwYXJzZXIiLCJidWZmZXIiLCJwb3NpdGlvbiIsImlzUExQU3RyZWFtIiwiUExQUmVhZGVyIiwicmVzdWx0IiwicmVhZFZhbHVlIiwiUmV0dXJuVmFsdWVUb2tlbiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vcmV0dXJudmFsdWUtdG9rZW4tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHMyLjIuNy4xNlxuXG5pbXBvcnQgUGFyc2VyLCB7IHR5cGUgUGFyc2VyT3B0aW9ucywgdHlwZSBUb2tlblJlYWRlciB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5cbmltcG9ydCB7IFJldHVyblZhbHVlVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuaW1wb3J0IHsgcmVhZE1ldGFkYXRhLCB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IGlzUExQU3RyZWFtLCBQTFBSZWFkZXIsIHJlYWRWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlLXBhcnNlcic7XG5pbXBvcnQgeyByZWFkQlZhckNoYXIsIHJlYWRVSW50MTZMRSwgcmVhZFVJbnQ4LCBSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5pbnRlcmZhY2UgUmV0dXJuVmFsdWVIZWFkZXIge1xuICBwYXJhbU9yZGluYWw6IG51bWJlcjtcbiAgcGFyYW1OYW1lOiBzdHJpbmc7XG4gIG1ldGFkYXRhOiBNZXRhZGF0YTtcbn1cblxuZnVuY3Rpb24gcmVhZEhlYWRlcihidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8UmV0dXJuVmFsdWVIZWFkZXI+IHtcbiAgbGV0IHBhcmFtT3JkaW5hbDtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogcGFyYW1PcmRpbmFsIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgcGFyYW1OYW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBwYXJhbU5hbWUgfSA9IHJlYWRCVmFyQ2hhcihidWYsIG9mZnNldCkpO1xuXG4gIGlmIChwYXJhbU5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcbiAgICBwYXJhbU5hbWUgPSBwYXJhbU5hbWUuc2xpY2UoMSk7XG4gIH1cblxuICAvLyBzdGF0dXNcbiAgKHsgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgbWV0YWRhdGE7XG4gICh7IG9mZnNldCwgdmFsdWU6IG1ldGFkYXRhIH0gPSByZWFkTWV0YWRhdGEoYnVmLCBvZmZzZXQsIG9wdGlvbnMpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCh7IHBhcmFtT3JkaW5hbCwgcGFyYW1OYW1lLCBtZXRhZGF0YSB9LCBvZmZzZXQpO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgYFJFVFVSTlZBTFVFYCB0b2tlbi4gVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBhbiBhcmJpdHJhcmlseSBsYXJnZVxuICogUExQIHZhbHVlLCBzbyB0aGUgcHJvZ3Jlc3MgaXMga2VwdCBhY3Jvc3MgY2h1bmtzLlxuICovXG5leHBvcnQgY2xhc3MgUmV0dXJuVmFsdWVUb2tlblJlYWRlciBpbXBsZW1lbnRzIFRva2VuUmVhZGVyIHtcbiAgZGVjbGFyZSBoZWFkZXI6IFJldHVyblZhbHVlSGVhZGVyIHwgdW5kZWZpbmVkO1xuXG4gIC8vIFRoZSByZWFkZXIgb2YgYSBQTFAgdmFsdWUgdGhhdCBpcyBub3QgY29tcGxldGUgeWV0LlxuICBkZWNsYXJlIHBscFJlYWRlcjogUExQUmVhZGVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGxwUmVhZGVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVhZChwYXJzZXI6IFBhcnNlcik6IFJldHVyblZhbHVlVG9rZW4ge1xuICAgIGlmICh0aGlzLmhlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBvZmZzZXQgfSA9IHJlYWRIZWFkZXIocGFyc2VyLmJ1ZmZlciwgcGFyc2VyLnBvc2l0aW9uLCBwYXJzZXIub3B0aW9ucyk7XG4gICAgICBwYXJzZXIucG9zaXRpb24gPSBvZmZzZXQ7XG4gICAgICB0aGlzLmhlYWRlciA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFyYW1PcmRpbmFsLCBwYXJhbU5hbWUsIG1ldGFkYXRhIH0gPSB0aGlzLmhlYWRlcjtcblxuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoaXNQTFBTdHJlYW0obWV0YWRhdGEpKSB7XG4gICAgICB0aGlzLnBscFJlYWRlciA/Pz0gbmV3IFBMUFJlYWRlcihtZXRhZGF0YSk7XG4gICAgICB2YWx1ZSA9IHRoaXMucGxwUmVhZGVyLnJlYWQocGFyc2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZFZhbHVlKHBhcnNlci5idWZmZXIsIHBhcnNlci5wb3NpdGlvbiwgbWV0YWRhdGEsIHBhcnNlci5vcHRpb25zKTtcbiAgICAgIHBhcnNlci5wb3NpdGlvbiA9IHJlc3VsdC5vZmZzZXQ7XG4gICAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJldHVyblZhbHVlVG9rZW4oeyBwYXJhbU9yZGluYWwsIHBh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
@@ -1 +1 @@
1
- {"version":3,"file":"returnvalue-token-parser.js","names":["_token","require","_metadataParser","_valueParser","_helpers","iconv","_interopRequireWildcard","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","returnParser","parser","paramName","paramOrdinal","metadata","buf","buffer","offset","position","value","readUInt16LE","readBVarChar","readUInt8","readMetadata","options","charAt","slice","err","NotEnoughDataError","waitForChunk","isPLPStream","chunks","readPLPStream","type","name","Buffer","concat","toString","decode","collation","codepage","readValue","ReturnValueToken","_default","exports","module"],"sources":["../../src/token/returnvalue-token-parser.ts"],"sourcesContent":["// s2.2.7.16\n\nimport Parser from './stream-parser';\n\nimport { ReturnValueToken } from './token';\n\nimport { readMetadata } from '../metadata-parser';\nimport { isPLPStream, readPLPStream, readValue } from '../value-parser';\nimport { NotEnoughDataError, readBVarChar, readUInt16LE, readUInt8 } from './helpers';\nimport * as iconv from 'iconv-lite';\n\nasync function returnParser(parser: Parser): Promise<ReturnValueToken> {\n let paramName;\n let paramOrdinal;\n let metadata;\n\n while (true) {\n const buf = parser.buffer;\n let offset = parser.position;\n\n try {\n ({ offset, value: paramOrdinal } = readUInt16LE(buf, offset));\n ({ offset, value: paramName } = readBVarChar(buf, offset));\n // status\n ({ offset } = readUInt8(buf, offset));\n ({ offset, value: metadata } = readMetadata(buf, offset, parser.options));\n\n if (paramName.charAt(0) === '@') {\n paramName = paramName.slice(1);\n }\n } catch (err) {\n if (err instanceof NotEnoughDataError) {\n await parser.waitForChunk();\n continue;\n }\n\n throw err;\n }\n\n parser.position = offset;\n break;\n }\n\n let value;\n while (true) {\n const buf = parser.buffer;\n let offset = parser.position;\n\n if (isPLPStream(metadata)) {\n const chunks = await readPLPStream(parser);\n\n if (chunks === null) {\n value = chunks;\n } else if (metadata.type.name === 'NVarChar' || metadata.type.name === 'Xml') {\n value = Buffer.concat(chunks).toString('ucs2');\n } else if (metadata.type.name === 'VarChar') {\n value = iconv.decode(Buffer.concat(chunks), metadata.collation?.codepage ?? 'utf8');\n } else if (metadata.type.name === 'VarBinary' || metadata.type.name === 'UDT') {\n value = Buffer.concat(chunks);\n }\n } else {\n try {\n ({ value, offset } = readValue(buf, offset, metadata, parser.options));\n } catch (err) {\n if (err instanceof NotEnoughDataError) {\n await parser.waitForChunk();\n continue;\n }\n\n throw err;\n }\n\n parser.position = offset;\n }\n\n break;\n }\n\n return new ReturnValueToken({\n paramOrdinal: paramOrdinal,\n paramName: paramName,\n metadata: metadata,\n value: value\n });\n}\n\nexport default returnParser;\nmodule.exports = returnParser;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"returnvalue-token-parser.js","names":["_token","require","_metadataParser","_valueParser","_helpers","readHeader","buf","offset","options","paramOrdinal","value","readUInt16LE","paramName","readBVarChar","charAt","slice","readUInt8","metadata","readMetadata","Result","ReturnValueTokenReader","constructor","header","undefined","plpReader","read","parser","buffer","position","isPLPStream","PLPReader","result","readValue","ReturnValueToken","exports"],"sources":["../../src/token/returnvalue-token-parser.ts"],"sourcesContent":["// s2.2.7.16\n\nimport Parser, { type ParserOptions, type TokenReader } from './stream-parser';\n\nimport { ReturnValueToken } from './token';\n\nimport { readMetadata, type Metadata } from '../metadata-parser';\nimport { isPLPStream, PLPReader, readValue } from '../value-parser';\nimport { readBVarChar, readUInt16LE, readUInt8, Result } from './helpers';\n\ninterface ReturnValueHeader {\n paramOrdinal: number;\n paramName: string;\n metadata: Metadata;\n}\n\nfunction readHeader(buf: Buffer, offset: number, options: ParserOptions): Result<ReturnValueHeader> {\n let paramOrdinal;\n ({ offset, value: paramOrdinal } = readUInt16LE(buf, offset));\n\n let paramName;\n ({ offset, value: paramName } = readBVarChar(buf, offset));\n\n if (paramName.charAt(0) === '@') {\n paramName = paramName.slice(1);\n }\n\n // status\n ({ offset } = readUInt8(buf, offset));\n\n let metadata;\n ({ offset, value: metadata } = readMetadata(buf, offset, options));\n\n return new Result({ paramOrdinal, paramName, metadata }, offset);\n}\n\n/**\n * Reads a `RETURNVALUE` token. The returned value can be an arbitrarily large\n * PLP value, so the progress is kept across chunks.\n */\nexport class ReturnValueTokenReader implements TokenReader {\n declare header: ReturnValueHeader | undefined;\n\n // The reader of a PLP value that is not complete yet.\n declare plpReader: PLPReader | undefined;\n\n constructor() {\n this.header = undefined;\n this.plpReader = undefined;\n }\n\n read(parser: Parser): ReturnValueToken {\n if (this.header === undefined) {\n const { value, offset } = readHeader(parser.buffer, parser.position, parser.options);\n parser.position = offset;\n this.header = value;\n }\n\n const { paramOrdinal, paramName, metadata } = this.header;\n\n let value;\n if (isPLPStream(metadata)) {\n this.plpReader ??= new PLPReader(metadata);\n value = this.plpReader.read(parser);\n } else {\n const result = readValue(parser.buffer, parser.position, metadata, parser.options);\n parser.position = result.offset;\n value = result.value;\n }\n\n return new ReturnValueToken({ paramOrdinal, paramName, metadata, value });\n }\n}\n"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AARA;;AAgBA,SAASI,UAAUA,CAACC,GAAW,EAAEC,MAAc,EAAEC,OAAsB,EAA6B;EAClG,IAAIC,YAAY;EAChB,CAAC;IAAEF,MAAM;IAAEG,KAAK,EAAED;EAAa,CAAC,GAAG,IAAAE,qBAAY,EAACL,GAAG,EAAEC,MAAM,CAAC;EAE5D,IAAIK,SAAS;EACb,CAAC;IAAEL,MAAM;IAAEG,KAAK,EAAEE;EAAU,CAAC,GAAG,IAAAC,qBAAY,EAACP,GAAG,EAAEC,MAAM,CAAC;EAEzD,IAAIK,SAAS,CAACE,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;IAC/BF,SAAS,GAAGA,SAAS,CAACG,KAAK,CAAC,CAAC,CAAC;EAChC;;EAEA;EACA,CAAC;IAAER;EAAO,CAAC,GAAG,IAAAS,kBAAS,EAACV,GAAG,EAAEC,MAAM,CAAC;EAEpC,IAAIU,QAAQ;EACZ,CAAC;IAAEV,MAAM;IAAEG,KAAK,EAAEO;EAAS,CAAC,GAAG,IAAAC,4BAAY,EAACZ,GAAG,EAAEC,MAAM,EAAEC,OAAO,CAAC;EAEjE,OAAO,IAAIW,eAAM,CAAC;IAAEV,YAAY;IAAEG,SAAS;IAAEK;EAAS,CAAC,EAAEV,MAAM,CAAC;AAClE;;AAEA;AACA;AACA;AACA;AACO,MAAMa,sBAAsB,CAAwB;EAGzD;;EAGAC,WAAWA,CAAA,EAAG;IACZ,IAAI,CAACC,MAAM,GAAGC,SAAS;IACvB,IAAI,CAACC,SAAS,GAAGD,SAAS;EAC5B;EAEAE,IAAIA,CAACC,MAAc,EAAoB;IACrC,IAAI,IAAI,CAACJ,MAAM,KAAKC,SAAS,EAAE;MAC7B,MAAM;QAAEb,KAAK;QAAEH;MAAO,CAAC,GAAGF,UAAU,CAACqB,MAAM,CAACC,MAAM,EAAED,MAAM,CAACE,QAAQ,EAAEF,MAAM,CAAClB,OAAO,CAAC;MACpFkB,MAAM,CAACE,QAAQ,GAAGrB,MAAM;MACxB,IAAI,CAACe,MAAM,GAAGZ,KAAK;IACrB;IAEA,MAAM;MAAED,YAAY;MAAEG,SAAS;MAAEK;IAAS,CAAC,GAAG,IAAI,CAACK,MAAM;IAEzD,IAAIZ,KAAK;IACT,IAAI,IAAAmB,wBAAW,EAACZ,QAAQ,CAAC,EAAE;MACzB,IAAI,CAACO,SAAS,KAAK,IAAIM,sBAAS,CAACb,QAAQ,CAAC;MAC1CP,KAAK,GAAG,IAAI,CAACc,SAAS,CAACC,IAAI,CAACC,MAAM,CAAC;IACrC,CAAC,MAAM;MACL,MAAMK,MAAM,GAAG,IAAAC,sBAAS,EAACN,MAAM,CAACC,MAAM,EAAED,MAAM,CAACE,QAAQ,EAAEX,QAAQ,EAAES,MAAM,CAAClB,OAAO,CAAC;MAClFkB,MAAM,CAACE,QAAQ,GAAGG,MAAM,CAACxB,MAAM;MAC/BG,KAAK,GAAGqB,MAAM,CAACrB,KAAK;IACtB;IAEA,OAAO,IAAIuB,uBAAgB,CAAC;MAAExB,YAAY;MAAEG,SAAS;MAAEK,QAAQ;MAAEP;IAAM,CAAC,CAAC;EAC3E;AACF;AAACwB,OAAA,CAAAd,sBAAA,GAAAA,sBAAA","ignoreList":[]}
@@ -1,4 +1,34 @@
1
- import Parser from './stream-parser';
1
+ import Parser, { type TokenReader } from './stream-parser';
2
+ import { type ColumnMetadata } from './colmetadata-token-parser';
2
3
  import { RowToken } from './token';
3
- declare function rowParser(parser: Parser): Promise<RowToken>;
4
- export default rowParser;
4
+ import { PLPReader } from '../value-parser';
5
+ export interface Column {
6
+ value: unknown;
7
+ metadata: ColumnMetadata;
8
+ }
9
+ /**
10
+ * Reads the column values of a row one by one. Column values - especially PLP
11
+ * values - can be arbitrarily large, so the progress is kept across chunks.
12
+ */
13
+ export declare class ColumnValuesReader {
14
+ columns: Column[];
15
+ plpReader: PLPReader | undefined;
16
+ constructor();
17
+ /**
18
+ * Read the remaining column values. Columns flagged in the `nullBitmap`
19
+ * have no data and are `null`.
20
+ */
21
+ readColumns(parser: Parser, nullBitmap: Buffer | undefined): void;
22
+ }
23
+ /**
24
+ * Reads a `ROW` token.
25
+ */
26
+ export declare class RowTokenReader extends ColumnValuesReader implements TokenReader {
27
+ read(parser: Parser): RowToken;
28
+ }
29
+ /**
30
+ * Map columns by name. If multiple columns share a name, the first one wins.
31
+ */
32
+ export declare function toColumnsMap(columns: Column[]): {
33
+ [key: string]: Column;
34
+ };