nbcrow-token-parser.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _token = require("./token");
  7. var _valueParser = _interopRequireDefault(require("../value-parser"));
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. // s2.2.7.13 (introduced in TDS 7.3.B)
  10. function nullHandler(_parser, _columnMetadata, _options, callback) {
  11. callback(null);
  12. }
  13. function nbcRowParser(parser, columnsMetaData, options, callback) {
  14. const length = Math.ceil(columnsMetaData.length / 8);
  15. parser.readBuffer(length, bytes => {
  16. const bitmap = [];
  17. for (let i = 0, len = bytes.length; i < len; i++) {
  18. const byte = bytes[i];
  19. for (let j = 0; j <= 7; j++) {
  20. bitmap.push(byte & 1 << j ? true : false);
  21. }
  22. }
  23. const columns = [];
  24. const len = columnsMetaData.length;
  25. let i = 0;
  26. function next(done) {
  27. if (i === len) {
  28. return done();
  29. }
  30. const columnMetaData = columnsMetaData[i];
  31. (bitmap[i] ? nullHandler : _valueParser.default)(parser, columnMetaData, options, value => {
  32. columns.push({
  33. value: value,
  34. metadata: columnMetaData
  35. });
  36. i++;
  37. next(done);
  38. });
  39. }
  40. next(() => {
  41. if (options.useColumnNames) {
  42. const columnsMap = {};
  43. columns.forEach(column => {
  44. const colName = column.metadata.colName;
  45. if (columnsMap[colName] == null) {
  46. columnsMap[colName] = column;
  47. }
  48. });
  49. callback(new _token.NBCRowToken(columnsMap));
  50. } else {
  51. callback(new _token.NBCRowToken(columns));
  52. }
  53. });
  54. });
  55. }
  56. var _default = nbcRowParser;
  57. exports.default = _default;
  58. module.exports = nbcRowParser;