done-token-parser.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.doneParser = doneParser;
  6. exports.doneInProcParser = doneInProcParser;
  7. exports.doneProcParser = doneProcParser;
  8. var _jsbi = _interopRequireDefault(require("jsbi"));
  9. var _token = require("./token");
  10. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
  11. // s2.2.7.5/6/7
  12. const STATUS = {
  13. MORE: 0x0001,
  14. ERROR: 0x0002,
  15. // This bit is not yet in use by SQL Server, so is not exposed in the returned token
  16. INXACT: 0x0004,
  17. COUNT: 0x0010,
  18. ATTN: 0x0020,
  19. SRVERROR: 0x0100
  20. };
  21. function parseToken(parser, options, callback) {
  22. parser.readUInt16LE(status => {
  23. const more = !!(status & STATUS.MORE);
  24. const sqlError = !!(status & STATUS.ERROR);
  25. const rowCountValid = !!(status & STATUS.COUNT);
  26. const attention = !!(status & STATUS.ATTN);
  27. const serverError = !!(status & STATUS.SRVERROR);
  28. parser.readUInt16LE(curCmd => {
  29. const next = rowCount => {
  30. callback({
  31. more: more,
  32. sqlError: sqlError,
  33. attention: attention,
  34. serverError: serverError,
  35. rowCount: rowCountValid ? rowCount : undefined,
  36. curCmd: curCmd
  37. });
  38. };
  39. if (options.tdsVersion < '7_2') {
  40. parser.readUInt32LE(next);
  41. } else {
  42. parser.readBigUInt64LE(rowCount => {
  43. next(_jsbi.default.toNumber(rowCount));
  44. });
  45. }
  46. });
  47. });
  48. }
  49. function doneParser(parser, _colMetadata, options, callback) {
  50. parseToken(parser, options, data => {
  51. callback(new _token.DoneToken(data));
  52. });
  53. }
  54. function doneInProcParser(parser, _colMetadata, options, callback) {
  55. parseToken(parser, options, data => {
  56. callback(new _token.DoneInProcToken(data));
  57. });
  58. }
  59. function doneProcParser(parser, _colMetadata, options, callback) {
  60. parseToken(parser, options, data => {
  61. callback(new _token.DoneProcToken(data));
  62. });
  63. }