tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
78 lines (72 loc) • 8.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.RowTokenReader = exports.ColumnValuesReader = void 0;
exports.toColumnsMap = toColumnsMap;
var _token = require("./token");
var _valueParser = require("../value-parser");
// s2.2.7.17
/**
* Reads the column values of a row one by one. Column values - especially PLP
* values - can be arbitrarily large, so the progress is kept across chunks.
*/
class ColumnValuesReader {
// The reader of a PLP column value that is not complete yet.
constructor() {
this.columns = [];
this.plpReader = undefined;
}
/**
* Read the remaining column values. Columns flagged in the `nullBitmap`
* have no data and are `null`.
*/
readColumns(parser, nullBitmap) {
const colMetadata = parser.colMetadata;
while (this.columns.length < colMetadata.length) {
const index = this.columns.length;
const metadata = colMetadata[index];
let value;
if (nullBitmap !== undefined && nullBitmap[index >> 3] & 1 << (index & 7)) {
value = null;
} else if ((0, _valueParser.isPLPStream)(metadata)) {
this.plpReader ??= new _valueParser.PLPReader(metadata);
value = this.plpReader.read(parser);
this.plpReader = undefined;
} else {
const result = (0, _valueParser.readValue)(parser.buffer, parser.position, metadata, parser.options);
parser.position = result.offset;
value = result.value;
}
this.columns.push({
value,
metadata
});
}
}
}
/**
* Reads a `ROW` token.
*/
exports.ColumnValuesReader = ColumnValuesReader;
class RowTokenReader extends ColumnValuesReader {
read(parser) {
this.readColumns(parser, undefined);
return new _token.RowToken(parser.options.useColumnNames ? toColumnsMap(this.columns) : this.columns);
}
}
/**
* Map columns by name. If multiple columns share a name, the first one wins.
*/
exports.RowTokenReader = RowTokenReader;
function toColumnsMap(columns) {
const columnsMap = Object.create(null);
for (const column of columns) {
const colName = column.metadata.colName;
if (columnsMap[colName] == null) {
columnsMap[colName] = column;
}
}
return columnsMap;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX3ZhbHVlUGFyc2VyIiwiQ29sdW1uVmFsdWVzUmVhZGVyIiwiY29uc3RydWN0b3IiLCJjb2x1bW5zIiwicGxwUmVhZGVyIiwidW5kZWZpbmVkIiwicmVhZENvbHVtbnMiLCJwYXJzZXIiLCJudWxsQml0bWFwIiwiY29sTWV0YWRhdGEiLCJsZW5ndGgiLCJpbmRleCIsIm1ldGFkYXRhIiwidmFsdWUiLCJpc1BMUFN0cmVhbSIsIlBMUFJlYWRlciIsInJlYWQiLCJyZXN1bHQiLCJyZWFkVmFsdWUiLCJidWZmZXIiLCJwb3NpdGlvbiIsIm9wdGlvbnMiLCJvZmZzZXQiLCJwdXNoIiwiZXhwb3J0cyIsIlJvd1Rva2VuUmVhZGVyIiwiUm93VG9rZW4iLCJ1c2VDb2x1bW5OYW1lcyIsInRvQ29sdW1uc01hcCIsImNvbHVtbnNNYXAiLCJPYmplY3QiLCJjcmVhdGUiLCJjb2x1bW4iLCJjb2xOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rva2VuL3Jvdy10b2tlbi1wYXJzZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gczIuMi43LjE3XG5cbmltcG9ydCBQYXJzZXIsIHsgdHlwZSBUb2tlblJlYWRlciB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5pbXBvcnQgeyB0eXBlIENvbHVtbk1ldGFkYXRhIH0gZnJvbSAnLi9jb2xtZXRhZGF0YS10b2tlbi1wYXJzZXInO1xuXG5pbXBvcnQgeyBSb3dUb2tlbiB9IGZyb20gJy4vdG9rZW4nO1xuXG5pbXBvcnQgeyBpc1BMUFN0cmVhbSwgUExQUmVhZGVyLCByZWFkVmFsdWUgfSBmcm9tICcuLi92YWx1ZS1wYXJzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbiB7XG4gIHZhbHVlOiB1bmtub3duO1xuICBtZXRhZGF0YTogQ29sdW1uTWV0YWRhdGE7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGNvbHVtbiB2YWx1ZXMgb2YgYSByb3cgb25lIGJ5IG9uZS4gQ29sdW1uIHZhbHVlcyAtIGVzcGVjaWFsbHkgUExQXG4gKiB2YWx1ZXMgLSBjYW4gYmUgYXJiaXRyYXJpbHkgbGFyZ2UsIHNvIHRoZSBwcm9ncmVzcyBpcyBrZXB0IGFjcm9zcyBjaHVua3MuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2x1bW5WYWx1ZXNSZWFkZXIge1xuICBkZWNsYXJlIGNvbHVtbnM6IENvbHVtbltdO1xuXG4gIC8vIFRoZSByZWFkZXIgb2YgYSBQTFAgY29sdW1uIHZhbHVlIHRoYXQgaXMgbm90IGNvbXBsZXRlIHlldC5cbiAgZGVjbGFyZSBwbHBSZWFkZXI6IFBMUFJlYWRlciB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbHVtbnMgPSBbXTtcbiAgICB0aGlzLnBscFJlYWRlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWFkIHRoZSByZW1haW5pbmcgY29sdW1uIHZhbHVlcy4gQ29sdW1ucyBmbGFnZ2VkIGluIHRoZSBgbnVsbEJpdG1hcGBcbiAgICogaGF2ZSBubyBkYXRhIGFuZCBhcmUgYG51bGxgLlxuICAgKi9cbiAgcmVhZENvbHVtbnMocGFyc2VyOiBQYXJzZXIsIG51bGxCaXRtYXA6IEJ1ZmZlciB8IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IGNvbE1ldGFkYXRhID0gcGFyc2VyLmNvbE1ldGFkYXRhO1xuXG4gICAgd2hpbGUgKHRoaXMuY29sdW1ucy5sZW5ndGggPCBjb2xNZXRhZGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jb2x1bW5zLmxlbmd0aDtcbiAgICAgIGNvbnN0IG1ldGFkYXRhID0gY29sTWV0YWRhdGFbaW5kZXhdO1xuXG4gICAgICBsZXQgdmFsdWU7XG4gICAgICBpZiAobnVsbEJpdG1hcCAhPT0gdW5kZWZpbmVkICYmIChudWxsQml0bWFwW2luZGV4ID4+IDNdICYgKDEgPDwgKGluZGV4ICYgNykpKSkge1xuICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKGlzUExQU3RyZWFtKG1ldGFkYXRhKSkge1xuICAgICAgICB0aGlzLnBscFJlYWRlciA/Pz0gbmV3IFBMUFJlYWRlcihtZXRhZGF0YSk7XG4gICAgICAgIHZhbHVlID0gdGhpcy5wbHBSZWFkZXIucmVhZChwYXJzZXIpO1xuICAgICAgICB0aGlzLnBscFJlYWRlciA9IHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHJlYWRWYWx1ZShwYXJzZXIuYnVmZmVyLCBwYXJzZXIucG9zaXRpb24sIG1ldGFkYXRhLCBwYXJzZXIub3B0aW9ucyk7XG4gICAgICAgIHBhcnNlci5wb3NpdGlvbiA9IHJlc3VsdC5vZmZzZXQ7XG4gICAgICAgIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbHVtbnMucHVzaCh7IHZhbHVlLCBtZXRhZGF0YSB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBhIGBST1dgIHRva2VuLlxuICovXG5leHBvcnQgY2xhc3MgUm93VG9rZW5SZWFkZXIgZXh0ZW5kcyBDb2x1bW5WYWx1ZXNSZWFkZXIgaW1wbGVtZW50cyBUb2tlblJlYWRlciB7XG4gIHJlYWQocGFyc2VyOiBQYXJzZXIpOiBSb3dUb2tlbiB7XG4gICAgdGhpcy5yZWFkQ29sdW1ucyhwYXJzZXIsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG5ldyBSb3dUb2tlbihwYXJzZXIub3B0aW9ucy51c2VDb2x1bW5OYW1lcyA/IHRvQ29sdW1uc01hcCh0aGlzLmNvbHVtbnMpIDogdGhpcy5jb2x1bW5zKTtcbiAgfVxufVxuXG4vKipcbiAqIE1hcCBjb2x1bW5zIGJ5IG5hbWUuIElmIG11bHRpcGxlIGNvbHVtbnMgc2hhcmUgYSBuYW1lLCB0aGUgZmlyc3Qgb25lIHdpbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NvbHVtbnNNYXAoY29sdW1uczogQ29sdW1uW10pOiB7IFtrZXk6IHN0cmluZ106IENvbHVtbiB9IHtcbiAgY29uc3QgY29sdW1uc01hcDogeyBba2V5OiBzdHJpbmddOiBDb2x1bW4gfSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgY29sdW1ucykge1xuICAgIGNvbnN0IGNvbE5hbWUgPSBjb2x1bW4ubWV0YWRhdGEuY29sTmFtZTtcbiAgICBpZiAoY29sdW1uc01hcFtjb2xOYW1lXSA9PSBudWxsKSB7XG4gICAgICBjb2x1bW5zTWFwW2NvbE5hbWVdID0gY29sdW1uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb2x1bW5zTWFwO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBS0EsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBRUEsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBUEE7O0FBY0E7QUFDQTtBQUNBO0FBQ0E7QUFDTyxNQUFNRSxrQkFBa0IsQ0FBQztFQUc5Qjs7RUFHQUMsV0FBV0EsQ0FBQSxFQUFHO0lBQ1osSUFBSSxDQUFDQyxPQUFPLEdBQUcsRUFBRTtJQUNqQixJQUFJLENBQUNDLFNBQVMsR0FBR0MsU0FBUztFQUM1Qjs7RUFFQTtBQUNGO0FBQ0E7QUFDQTtFQUNFQyxXQUFXQSxDQUFDQyxNQUFjLEVBQUVDLFVBQThCLEVBQUU7SUFDMUQsTUFBTUMsV0FBVyxHQUFHRixNQUFNLENBQUNFLFdBQVc7SUFFdEMsT0FBTyxJQUFJLENBQUNOLE9BQU8sQ0FBQ08sTUFBTSxHQUFHRCxXQUFXLENBQUNDLE1BQU0sRUFBRTtNQUMvQyxNQUFNQyxLQUFLLEdBQUcsSUFBSSxDQUFDUixPQUFPLENBQUNPLE1BQU07TUFDakMsTUFBTUUsUUFBUSxHQUFHSCxXQUFXLENBQUNFLEtBQUssQ0FBQztNQUVuQyxJQUFJRSxLQUFLO01BQ1QsSUFBSUwsVUFBVSxLQUFLSCxTQUFTLElBQUtHLFVBQVUsQ0FBQ0csS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFJLENBQUMsS0FBS0EsS0FBSyxHQUFHLENBQUMsQ0FBRyxFQUFFO1FBQzdFRSxLQUFLLEdBQUcsSUFBSTtNQUNkLENBQUMsTUFBTSxJQUFJLElBQUFDLHdCQUFXLEVBQUNGLFFBQVEsQ0FBQyxFQUFFO1FBQ2hDLElBQUksQ0FBQ1IsU0FBUyxLQUFLLElBQUlXLHNCQUFTLENBQUNILFFBQVEsQ0FBQztRQUMxQ0MsS0FBSyxHQUFHLElBQUksQ0FBQ1QsU0FBUyxDQUFDWSxJQUFJLENBQUNULE1BQU0sQ0FBQztRQUNuQyxJQUFJLENBQUNILFNBQVMsR0FBR0MsU0FBUztNQUM1QixDQUFDLE1BQU07UUFDTCxNQUFNWSxNQUFNLEdBQUcsSUFBQUMsc0JBQVMsRUFBQ1gsTUFBTSxDQUFDWSxNQUFNLEVBQUVaLE1BQU0sQ0FBQ2EsUUFBUSxFQUFFUixRQUFRLEVBQUVMLE1BQU0sQ0FBQ2MsT0FBTyxDQUFDO1FBQ2xGZCxNQUFNLENBQUNhLFFBQVEsR0FBR0gsTUFBTSxDQUFDSyxNQUFNO1FBQy9CVCxLQUFLLEdBQUdJLE1BQU0sQ0FBQ0osS0FBSztNQUN0QjtNQUVBLElBQUksQ0FBQ1YsT0FBTyxDQUFDb0IsSUFBSSxDQUFDO1FBQUVWLEtBQUs7UUFBRUQ7TUFBUyxDQUFDLENBQUM7SUFDeEM7RUFDRjtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUZBWSxPQUFBLENBQUF2QixrQkFBQSxHQUFBQSxrQkFBQTtBQUdPLE1BQU13QixjQUFjLFNBQVN4QixrQkFBa0IsQ0FBd0I7RUFDNUVlLElBQUlBLENBQUNULE1BQWMsRUFBWTtJQUM3QixJQUFJLENBQUNELFdBQVcsQ0FBQ0MsTUFBTSxFQUFFRixTQUFTLENBQUM7SUFDbkMsT0FBTyxJQUFJcUIsZUFBUSxDQUFDbkIsTUFBTSxDQUFDYyxPQUFPLENBQUNNLGNBQWMsR0FBR0MsWUFBWSxDQUFDLElBQUksQ0FBQ3pCLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQ0EsT0FBTyxDQUFDO0VBQ2hHO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBRkFxQixPQUFBLENBQUFDLGNBQUEsR0FBQUEsY0FBQTtBQUdPLFNBQVNHLFlBQVlBLENBQUN6QixPQUFpQixFQUE2QjtFQUN6RSxNQUFNMEIsVUFBcUMsR0FBR0MsTUFBTSxDQUFDQyxNQUFNLENBQUMsSUFBSSxDQUFDO0VBRWpFLEtBQUssTUFBTUMsTUFBTSxJQUFJN0IsT0FBTyxFQUFFO0lBQzVCLE1BQU04QixPQUFPLEdBQUdELE1BQU0sQ0FBQ3BCLFFBQVEsQ0FBQ3FCLE9BQU87SUFDdkMsSUFBSUosVUFBVSxDQUFDSSxPQUFPLENBQUMsSUFBSSxJQUFJLEVBQUU7TUFDL0JKLFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLEdBQUdELE1BQU07SUFDOUI7RUFDRjtFQUVBLE9BQU9ILFVBQVU7QUFDbkIiLCJpZ25vcmVMaXN0IjpbXX0=