tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
82 lines (67 loc) • 9.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _token = require("./token");
var _valueParser = _interopRequireDefault(require("../value-parser"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// s2.2.7.13 (introduced in TDS 7.3.B)
function nullHandler(_parser, _columnMetadata, _options, callback) {
callback(null);
}
async function nbcRowParser(parser) {
const colMetadata = parser.colMetadata;
const bitmapByteLength = Math.ceil(colMetadata.length / 8);
const columns = [];
const bitmap = [];
while (parser.buffer.length - parser.position < bitmapByteLength) {
await parser.streamBuffer.waitForChunk();
}
const bytes = parser.buffer.slice(parser.position, parser.position + bitmapByteLength);
parser.position += bitmapByteLength;
for (let i = 0, len = bytes.length; i < len; i++) {
const byte = bytes[i];
bitmap.push(byte & 0b1 ? true : false);
bitmap.push(byte & 0b10 ? true : false);
bitmap.push(byte & 0b100 ? true : false);
bitmap.push(byte & 0b1000 ? true : false);
bitmap.push(byte & 0b10000 ? true : false);
bitmap.push(byte & 0b100000 ? true : false);
bitmap.push(byte & 0b1000000 ? true : false);
bitmap.push(byte & 0b10000000 ? true : false);
}
for (let i = 0; i < colMetadata.length; i++) {
const currColMetadata = colMetadata[i];
let value;
(bitmap[i] ? nullHandler : _valueParser.default)(parser, currColMetadata, parser.options, v => {
value = v;
});
while (parser.suspended) {
await parser.streamBuffer.waitForChunk();
parser.suspended = false;
const next = parser.next;
next();
}
columns.push({
value,
metadata: currColMetadata
});
}
if (parser.options.useColumnNames) {
const columnsMap = {};
columns.forEach(column => {
const colName = column.metadata.colName;
if (columnsMap[colName] == null) {
columnsMap[colName] = column;
}
});
return new _token.NBCRowToken(columnsMap);
} else {
return new _token.NBCRowToken(columns);
}
}
var _default = nbcRowParser;
exports.default = _default;
module.exports = nbcRowParser;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJudWxsSGFuZGxlciIsIl9wYXJzZXIiLCJfY29sdW1uTWV0YWRhdGEiLCJfb3B0aW9ucyIsImNhbGxiYWNrIiwibmJjUm93UGFyc2VyIiwicGFyc2VyIiwiY29sTWV0YWRhdGEiLCJiaXRtYXBCeXRlTGVuZ3RoIiwiTWF0aCIsImNlaWwiLCJsZW5ndGgiLCJjb2x1bW5zIiwiYml0bWFwIiwiYnVmZmVyIiwicG9zaXRpb24iLCJzdHJlYW1CdWZmZXIiLCJ3YWl0Rm9yQ2h1bmsiLCJieXRlcyIsInNsaWNlIiwiaSIsImxlbiIsImJ5dGUiLCJwdXNoIiwiY3VyckNvbE1ldGFkYXRhIiwidmFsdWUiLCJ2YWx1ZVBhcnNlIiwib3B0aW9ucyIsInYiLCJzdXNwZW5kZWQiLCJuZXh0IiwibWV0YWRhdGEiLCJ1c2VDb2x1bW5OYW1lcyIsImNvbHVtbnNNYXAiLCJmb3JFYWNoIiwiY29sdW1uIiwiY29sTmFtZSIsIk5CQ1Jvd1Rva2VuIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b2tlbi9uYmNyb3ctdG9rZW4tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHMyLjIuNy4xMyAoaW50cm9kdWNlZCBpbiBURFMgNy4zLkIpXG5cbmltcG9ydCBQYXJzZXIsIHsgUGFyc2VyT3B0aW9ucyB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyBDb2x1bW5NZXRhZGF0YSB9IGZyb20gJy4vY29sbWV0YWRhdGEtdG9rZW4tcGFyc2VyJztcblxuaW1wb3J0IHsgTkJDUm93VG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuaW1wb3J0IHZhbHVlUGFyc2UgZnJvbSAnLi4vdmFsdWUtcGFyc2VyJztcblxuZnVuY3Rpb24gbnVsbEhhbmRsZXIoX3BhcnNlcjogUGFyc2VyLCBfY29sdW1uTWV0YWRhdGE6IENvbHVtbk1ldGFkYXRhLCBfb3B0aW9uczogUGFyc2VyT3B0aW9ucywgY2FsbGJhY2s6ICh2YWx1ZTogdW5rbm93bikgPT4gdm9pZCkge1xuICBjYWxsYmFjayhudWxsKTtcbn1cblxuaW50ZXJmYWNlIENvbHVtbiB7XG4gIHZhbHVlOiB1bmtub3duO1xuICBtZXRhZGF0YTogQ29sdW1uTWV0YWRhdGE7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG5iY1Jvd1BhcnNlcihwYXJzZXI6IFBhcnNlcik6IFByb21pc2U8TkJDUm93VG9rZW4+IHtcbiAgY29uc3QgY29sTWV0YWRhdGEgPSBwYXJzZXIuY29sTWV0YWRhdGE7XG4gIGNvbnN0IGJpdG1hcEJ5dGVMZW5ndGggPSBNYXRoLmNlaWwoY29sTWV0YWRhdGEubGVuZ3RoIC8gOCk7XG4gIGNvbnN0IGNvbHVtbnM6IENvbHVtbltdID0gW107XG4gIGNvbnN0IGJpdG1hcDogYm9vbGVhbltdID0gW107XG5cbiAgd2hpbGUgKHBhcnNlci5idWZmZXIubGVuZ3RoIC0gcGFyc2VyLnBvc2l0aW9uIDwgYml0bWFwQnl0ZUxlbmd0aCkge1xuICAgIGF3YWl0IHBhcnNlci5zdHJlYW1CdWZmZXIud2FpdEZvckNodW5rKCk7XG4gIH1cblxuICBjb25zdCBieXRlcyA9IHBhcnNlci5idWZmZXIuc2xpY2UocGFyc2VyLnBvc2l0aW9uLCBwYXJzZXIucG9zaXRpb24gKyBiaXRtYXBCeXRlTGVuZ3RoKTtcbiAgcGFyc2VyLnBvc2l0aW9uICs9IGJpdG1hcEJ5dGVMZW5ndGg7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGJ5dGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGJ5dGVzW2ldO1xuXG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMSA/IHRydWUgOiBmYWxzZSk7XG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMTAgPyB0cnVlIDogZmFsc2UpO1xuICAgIGJpdG1hcC5wdXNoKGJ5dGUgJiAwYjEwMCA/IHRydWUgOiBmYWxzZSk7XG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMTAwMCA/IHRydWUgOiBmYWxzZSk7XG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMTAwMDAgPyB0cnVlIDogZmFsc2UpO1xuICAgIGJpdG1hcC5wdXNoKGJ5dGUgJiAwYjEwMDAwMCA/IHRydWUgOiBmYWxzZSk7XG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMTAwMDAwMCA/IHRydWUgOiBmYWxzZSk7XG4gICAgYml0bWFwLnB1c2goYnl0ZSAmIDBiMTAwMDAwMDAgPyB0cnVlIDogZmFsc2UpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xNZXRhZGF0YS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGN1cnJDb2xNZXRhZGF0YSA9IGNvbE1ldGFkYXRhW2ldO1xuICAgIGxldCB2YWx1ZTtcbiAgICAoYml0bWFwW2ldID8gbnVsbEhhbmRsZXIgOiB2YWx1ZVBhcnNlKShwYXJzZXIsIGN1cnJDb2xNZXRhZGF0YSwgcGFyc2VyLm9wdGlvbnMsICh2KSA9PiB7XG4gICAgICB2YWx1ZSA9IHY7XG4gICAgfSk7XG5cbiAgICB3aGlsZSAocGFyc2VyLnN1c3BlbmRlZCkge1xuICAgICAgYXdhaXQgcGFyc2VyLnN0cmVhbUJ1ZmZlci53YWl0Rm9yQ2h1bmsoKTtcblxuICAgICAgcGFyc2VyLnN1c3BlbmRlZCA9IGZhbHNlO1xuICAgICAgY29uc3QgbmV4dCA9IHBhcnNlci5uZXh0ITtcblxuICAgICAgbmV4dCgpO1xuICAgIH1cbiAgICBjb2x1bW5zLnB1c2goe1xuICAgICAgdmFsdWUsXG4gICAgICBtZXRhZGF0YTogY3VyckNvbE1ldGFkYXRhXG4gICAgfSk7XG4gIH1cblxuICBpZiAocGFyc2VyLm9wdGlvbnMudXNlQ29sdW1uTmFtZXMpIHtcbiAgICBjb25zdCBjb2x1bW5zTWFwOiB7IFtrZXk6IHN0cmluZ106IENvbHVtbiB9ID0ge307XG5cbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29uc3QgY29sTmFtZSA9IGNvbHVtbi5tZXRhZGF0YS5jb2xOYW1lO1xuICAgICAgaWYgKGNvbHVtbnNNYXBbY29sTmFtZV0gPT0gbnVsbCkge1xuICAgICAgICBjb2x1bW5zTWFwW2NvbE5hbWVdID0gY29sdW1uO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBOQkNSb3dUb2tlbihjb2x1bW5zTWFwKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IE5CQ1Jvd1Rva2VuKGNvbHVtbnMpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5iY1Jvd1BhcnNlcjtcbm1vZHVsZS5leHBvcnRzID0gbmJjUm93UGFyc2VyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0E7O0FBRUE7Ozs7QUFQQTtBQVNBLFNBQVNBLFdBQVQsQ0FBcUJDLE9BQXJCLEVBQXNDQyxlQUF0QyxFQUF1RUMsUUFBdkUsRUFBZ0dDLFFBQWhHLEVBQW9JO0VBQ2xJQSxRQUFRLENBQUMsSUFBRCxDQUFSO0FBQ0Q7O0FBT0QsZUFBZUMsWUFBZixDQUE0QkMsTUFBNUIsRUFBa0U7RUFDaEUsTUFBTUMsV0FBVyxHQUFHRCxNQUFNLENBQUNDLFdBQTNCO0VBQ0EsTUFBTUMsZ0JBQWdCLEdBQUdDLElBQUksQ0FBQ0MsSUFBTCxDQUFVSCxXQUFXLENBQUNJLE1BQVosR0FBcUIsQ0FBL0IsQ0FBekI7RUFDQSxNQUFNQyxPQUFpQixHQUFHLEVBQTFCO0VBQ0EsTUFBTUMsTUFBaUIsR0FBRyxFQUExQjs7RUFFQSxPQUFPUCxNQUFNLENBQUNRLE1BQVAsQ0FBY0gsTUFBZCxHQUF1QkwsTUFBTSxDQUFDUyxRQUE5QixHQUF5Q1AsZ0JBQWhELEVBQWtFO0lBQ2hFLE1BQU1GLE1BQU0sQ0FBQ1UsWUFBUCxDQUFvQkMsWUFBcEIsRUFBTjtFQUNEOztFQUVELE1BQU1DLEtBQUssR0FBR1osTUFBTSxDQUFDUSxNQUFQLENBQWNLLEtBQWQsQ0FBb0JiLE1BQU0sQ0FBQ1MsUUFBM0IsRUFBcUNULE1BQU0sQ0FBQ1MsUUFBUCxHQUFrQlAsZ0JBQXZELENBQWQ7RUFDQUYsTUFBTSxDQUFDUyxRQUFQLElBQW1CUCxnQkFBbkI7O0VBRUEsS0FBSyxJQUFJWSxDQUFDLEdBQUcsQ0FBUixF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