tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
87 lines (82 loc) • 8.26 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ReturnValueTokenReader = void 0;
var _token = require("./token");
var _metadataParser = require("../metadata-parser");
var _valueParser = require("../value-parser");
var _helpers = require("./helpers");
// s2.2.7.16
function readHeader(buf, offset, options) {
let paramOrdinal;
({
offset,
value: paramOrdinal
} = (0, _helpers.readUInt16LE)(buf, offset));
let paramName;
({
offset,
value: paramName
} = (0, _helpers.readBVarChar)(buf, offset));
if (paramName.charAt(0) === '@') {
paramName = paramName.slice(1);
}
// status
({
offset
} = (0, _helpers.readUInt8)(buf, offset));
let metadata;
({
offset,
value: metadata
} = (0, _metadataParser.readMetadata)(buf, offset, options));
return new _helpers.Result({
paramOrdinal,
paramName,
metadata
}, offset);
}
/**
* Reads a `RETURNVALUE` token. The returned value can be an arbitrarily large
* PLP value, so the progress is kept across chunks.
*/
class ReturnValueTokenReader {
// The reader of a PLP value that is not complete yet.
constructor() {
this.header = undefined;
this.plpReader = undefined;
}
read(parser) {
if (this.header === undefined) {
const {
value,
offset
} = readHeader(parser.buffer, parser.position, parser.options);
parser.position = offset;
this.header = value;
}
const {
paramOrdinal,
paramName,
metadata
} = this.header;
let value;
if ((0, _valueParser.isPLPStream)(metadata)) {
this.plpReader ??= new _valueParser.PLPReader(metadata);
value = this.plpReader.read(parser);
} else {
const result = (0, _valueParser.readValue)(parser.buffer, parser.position, metadata, parser.options);
parser.position = result.offset;
value = result.value;
}
return new _token.ReturnValueToken({
paramOrdinal,
paramName,
metadata,
value
});
}
}
exports.ReturnValueTokenReader = ReturnValueTokenReader;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdG9rZW4iLCJyZXF1aXJlIiwiX21ldGFkYXRhUGFyc2VyIiwiX3ZhbHVlUGFyc2VyIiwiX2hlbHBlcnMiLCJyZWFkSGVhZGVyIiwiYnVmIiwib2Zmc2V0Iiwib3B0aW9ucyIsInBhcmFtT3JkaW5hbCIsInZhbHVlIiwicmVhZFVJbnQxNkxFIiwicGFyYW1OYW1lIiwicmVhZEJWYXJDaGFyIiwiY2hhckF0Iiwic2xpY2UiLCJyZWFkVUludDgiLCJtZXRhZGF0YSIsInJlYWRNZXRhZGF0YSIsIlJlc3VsdCIsIlJldHVyblZhbHVlVG9rZW5SZWFkZXIiLCJjb25zdHJ1Y3RvciIsImhlYWRlciIsInVuZGVmaW5lZCIsInBscFJlYWRlciIsInJlYWQiLCJwYXJzZXIiLCJidWZmZXIiLCJwb3NpdGlvbiIsImlzUExQU3RyZWFtIiwiUExQUmVhZGVyIiwicmVzdWx0IiwicmVhZFZhbHVlIiwiUmV0dXJuVmFsdWVUb2tlbiIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9rZW4vcmV0dXJudmFsdWUtdG9rZW4tcGFyc2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIHMyLjIuNy4xNlxuXG5pbXBvcnQgUGFyc2VyLCB7IHR5cGUgUGFyc2VyT3B0aW9ucywgdHlwZSBUb2tlblJlYWRlciB9IGZyb20gJy4vc3RyZWFtLXBhcnNlcic7XG5cbmltcG9ydCB7IFJldHVyblZhbHVlVG9rZW4gfSBmcm9tICcuL3Rva2VuJztcblxuaW1wb3J0IHsgcmVhZE1ldGFkYXRhLCB0eXBlIE1ldGFkYXRhIH0gZnJvbSAnLi4vbWV0YWRhdGEtcGFyc2VyJztcbmltcG9ydCB7IGlzUExQU3RyZWFtLCBQTFBSZWFkZXIsIHJlYWRWYWx1ZSB9IGZyb20gJy4uL3ZhbHVlLXBhcnNlcic7XG5pbXBvcnQgeyByZWFkQlZhckNoYXIsIHJlYWRVSW50MTZMRSwgcmVhZFVJbnQ4LCBSZXN1bHQgfSBmcm9tICcuL2hlbHBlcnMnO1xuXG5pbnRlcmZhY2UgUmV0dXJuVmFsdWVIZWFkZXIge1xuICBwYXJhbU9yZGluYWw6IG51bWJlcjtcbiAgcGFyYW1OYW1lOiBzdHJpbmc7XG4gIG1ldGFkYXRhOiBNZXRhZGF0YTtcbn1cblxuZnVuY3Rpb24gcmVhZEhlYWRlcihidWY6IEJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIG9wdGlvbnM6IFBhcnNlck9wdGlvbnMpOiBSZXN1bHQ8UmV0dXJuVmFsdWVIZWFkZXI+IHtcbiAgbGV0IHBhcmFtT3JkaW5hbDtcbiAgKHsgb2Zmc2V0LCB2YWx1ZTogcGFyYW1PcmRpbmFsIH0gPSByZWFkVUludDE2TEUoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgcGFyYW1OYW1lO1xuICAoeyBvZmZzZXQsIHZhbHVlOiBwYXJhbU5hbWUgfSA9IHJlYWRCVmFyQ2hhcihidWYsIG9mZnNldCkpO1xuXG4gIGlmIChwYXJhbU5hbWUuY2hhckF0KDApID09PSAnQCcpIHtcbiAgICBwYXJhbU5hbWUgPSBwYXJhbU5hbWUuc2xpY2UoMSk7XG4gIH1cblxuICAvLyBzdGF0dXNcbiAgKHsgb2Zmc2V0IH0gPSByZWFkVUludDgoYnVmLCBvZmZzZXQpKTtcblxuICBsZXQgbWV0YWRhdGE7XG4gICh7IG9mZnNldCwgdmFsdWU6IG1ldGFkYXRhIH0gPSByZWFkTWV0YWRhdGEoYnVmLCBvZmZzZXQsIG9wdGlvbnMpKTtcblxuICByZXR1cm4gbmV3IFJlc3VsdCh7IHBhcmFtT3JkaW5hbCwgcGFyYW1OYW1lLCBtZXRhZGF0YSB9LCBvZmZzZXQpO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgYFJFVFVSTlZBTFVFYCB0b2tlbi4gVGhlIHJldHVybmVkIHZhbHVlIGNhbiBiZSBhbiBhcmJpdHJhcmlseSBsYXJnZVxuICogUExQIHZhbHVlLCBzbyB0aGUgcHJvZ3Jlc3MgaXMga2VwdCBhY3Jvc3MgY2h1bmtzLlxuICovXG5leHBvcnQgY2xhc3MgUmV0dXJuVmFsdWVUb2tlblJlYWRlciBpbXBsZW1lbnRzIFRva2VuUmVhZGVyIHtcbiAgZGVjbGFyZSBoZWFkZXI6IFJldHVyblZhbHVlSGVhZGVyIHwgdW5kZWZpbmVkO1xuXG4gIC8vIFRoZSByZWFkZXIgb2YgYSBQTFAgdmFsdWUgdGhhdCBpcyBub3QgY29tcGxldGUgeWV0LlxuICBkZWNsYXJlIHBscFJlYWRlcjogUExQUmVhZGVyIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZGVyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucGxwUmVhZGVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmVhZChwYXJzZXI6IFBhcnNlcik6IFJldHVyblZhbHVlVG9rZW4ge1xuICAgIGlmICh0aGlzLmhlYWRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCB7IHZhbHVlLCBvZmZzZXQgfSA9IHJlYWRIZWFkZXIocGFyc2VyLmJ1ZmZlciwgcGFyc2VyLnBvc2l0aW9uLCBwYXJzZXIub3B0aW9ucyk7XG4gICAgICBwYXJzZXIucG9zaXRpb24gPSBvZmZzZXQ7XG4gICAgICB0aGlzLmhlYWRlciA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgcGFyYW1PcmRpbmFsLCBwYXJhbU5hbWUsIG1ldGFkYXRhIH0gPSB0aGlzLmhlYWRlcjtcblxuICAgIGxldCB2YWx1ZTtcbiAgICBpZiAoaXNQTFBTdHJlYW0obWV0YWRhdGEpKSB7XG4gICAgICB0aGlzLnBscFJlYWRlciA/Pz0gbmV3IFBMUFJlYWRlcihtZXRhZGF0YSk7XG4gICAgICB2YWx1ZSA9IHRoaXMucGxwUmVhZGVyLnJlYWQocGFyc2VyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcmVhZFZhbHVlKHBhcnNlci5idWZmZXIsIHBhcnNlci5wb3NpdGlvbiwgbWV0YWRhdGEsIHBhcnNlci5vcHRpb25zKTtcbiAgICAgIHBhcnNlci5wb3NpdGlvbiA9IHJlc3VsdC5vZmZzZXQ7XG4gICAgICB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJldHVyblZhbHVlVG9rZW4oeyBwYXJhbU9yZGluYWwsIHBh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