colmetadata-token-parser.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.default = void 0;
  6. var _metadataParser = _interopRequireDefault(require("../metadata-parser"));
  7. var _token = require("./token");
  8. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  9. function readTableName(parser, options, metadata, callback) {
  10. if (metadata.type.hasTableName) {
  11. if (options.tdsVersion >= '7_2') {
  12. parser.readUInt8(numberOfTableNameParts => {
  13. const tableName = [];
  14. let i = 0;
  15. function next(done) {
  16. if (numberOfTableNameParts === i) {
  17. return done();
  18. }
  19. parser.readUsVarChar(part => {
  20. tableName.push(part);
  21. i++;
  22. next(done);
  23. });
  24. }
  25. next(() => {
  26. callback(tableName);
  27. });
  28. });
  29. } else {
  30. parser.readUsVarChar(callback);
  31. }
  32. } else {
  33. callback(undefined);
  34. }
  35. }
  36. function readColumnName(parser, options, index, metadata, callback) {
  37. parser.readBVarChar(colName => {
  38. if (options.columnNameReplacer) {
  39. callback(options.columnNameReplacer(colName, index, metadata));
  40. } else if (options.camelCaseColumns) {
  41. callback(colName.replace(/^[A-Z]/, function (s) {
  42. return s.toLowerCase();
  43. }));
  44. } else {
  45. callback(colName);
  46. }
  47. });
  48. }
  49. function readColumn(parser, options, index, callback) {
  50. (0, _metadataParser.default)(parser, options, metadata => {
  51. readTableName(parser, options, metadata, tableName => {
  52. readColumnName(parser, options, index, metadata, colName => {
  53. callback({
  54. userType: metadata.userType,
  55. flags: metadata.flags,
  56. type: metadata.type,
  57. collation: metadata.collation,
  58. precision: metadata.precision,
  59. scale: metadata.scale,
  60. udtInfo: metadata.udtInfo,
  61. dataLength: metadata.dataLength,
  62. schema: metadata.schema,
  63. colName: colName,
  64. tableName: tableName
  65. });
  66. });
  67. });
  68. });
  69. }
  70. function colMetadataParser(parser, _colMetadata, options, callback) {
  71. parser.readUInt16LE(columnCount => {
  72. const columns = [];
  73. let i = 0;
  74. function next(done) {
  75. if (i === columnCount) {
  76. return done();
  77. }
  78. readColumn(parser, options, i, column => {
  79. columns.push(column);
  80. i++;
  81. next(done);
  82. });
  83. }
  84. next(() => {
  85. callback(new _token.ColMetadataToken(columns));
  86. });
  87. });
  88. }
  89. var _default = colMetadataParser;
  90. exports.default = _default;
  91. module.exports = colMetadataParser;