tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
63 lines (62 loc) • 7.18 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _iconvLite = _interopRequireDefault(require("iconv-lite"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const NULL_LENGTH = Buffer.from([0xFF, 0xFF, 0xFF, 0xFF]);
const NO_COLLATION = Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00]);
const Text = {
id: 0x23,
type: 'TEXT',
name: 'Text',
hasTableName: true,
declaration: function () {
return 'text';
},
resolveLength: function (parameter) {
const value = parameter.value;
if (value != null) {
return value.length;
} else {
return -1;
}
},
writeTypeInfo(buffer, parameter) {
buffer.writeUInt8(this.id);
buffer.writeInt32LE(parameter.length);
if (parameter.collation) {
buffer.writeBuffer(parameter.collation.toBuffer().subarray(0, 5));
} else {
buffer.writeBuffer(NO_COLLATION);
}
},
writeValue(buffer, parameter) {
const value = parameter.value;
if (value == null) {
buffer.writeBuffer(NULL_LENGTH);
return;
}
buffer.writeInt32LE(value.length);
buffer.writeBuffer(value);
},
validate: function (value, collation) {
if (value == null) {
return null;
}
if (typeof value !== 'string') {
throw new TypeError('Invalid string.');
}
if (!collation) {
throw new Error('No collation was set by the server for the current connection.');
}
if (!collation.codepage) {
throw new Error('The collation set by the server has no associated encoding.');
}
return _iconvLite.default.encode(value, collation.codepage);
}
};
var _default = exports.default = Text;
module.exports = Text;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfaWNvbnZMaXRlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJOVUxMX0xFTkdUSCIsIkJ1ZmZlciIsImZyb20iLCJOT19DT0xMQVRJT04iLCJUZXh0IiwiaWQiLCJ0eXBlIiwibmFtZSIsImhhc1RhYmxlTmFtZSIsImRlY2xhcmF0aW9uIiwicmVzb2x2ZUxlbmd0aCIsInBhcmFtZXRlciIsInZhbHVlIiwibGVuZ3RoIiwid3JpdGVUeXBlSW5mbyIsImJ1ZmZlciIsIndyaXRlVUludDgiLCJ3cml0ZUludDMyTEUiLCJjb2xsYXRpb24iLCJ3cml0ZUJ1ZmZlciIsInRvQnVmZmVyIiwic3ViYXJyYXkiLCJ3cml0ZVZhbHVlIiwidmFsaWRhdGUiLCJUeXBlRXJyb3IiLCJFcnJvciIsImNvZGVwYWdlIiwiaWNvbnYiLCJlbmNvZGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJtb2R1bGUiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS10eXBlcy90ZXh0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpY29udiBmcm9tICdpY29udi1saXRlJztcblxuaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5cbmNvbnN0IE5VTExfTEVOR1RIID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkYsIDB4RkYsIDB4RkZdKTtcbmNvbnN0IE5PX0NPTExBVElPTiA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXSk7XG5cbmNvbnN0IFRleHQ6IERhdGFUeXBlID0ge1xuICBpZDogMHgyMyxcbiAgdHlwZTogJ1RFWFQnLFxuICBuYW1lOiAnVGV4dCcsXG5cbiAgaGFzVGFibGVOYW1lOiB0cnVlLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gJ3RleHQnO1xuICB9LFxuXG4gIHJlc29sdmVMZW5ndGg6IGZ1bmN0aW9uKHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIEJ1ZmZlciB8IG51bGw7XG5cbiAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmxlbmd0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgfSxcblxuICB3cml0ZVR5cGVJbmZvKGJ1ZmZlciwgcGFyYW1ldGVyKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5pZCk7XG4gICAgYnVmZmVyLndyaXRlSW50MzJMRShwYXJhbWV0ZXIubGVuZ3RoISk7XG4gICAgaWYgKHBhcmFtZXRlci5jb2xsYXRpb24pIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcihwYXJhbWV0ZXIuY29sbGF0aW9uLnRvQnVmZmVyKCkuc3ViYXJyYXkoMCwgNSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWZmZXIud3JpdGVCdWZmZXIoTk9fQ09MTEFUSU9OKTtcbiAgICB9XG4gIH0sXG5cbiAgd3JpdGVWYWx1ZShidWZmZXIsIHBhcmFtZXRlcikge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIEJ1ZmZlciB8IG51bGw7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcihOVUxMX0xFTkdUSCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYnVmZmVyLndyaXRlSW50MzJMRSh2YWx1ZS5sZW5ndGgpO1xuICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcih2YWx1ZSk7XG4gIH0sXG5cbiAgdmFsaWRhdGU6IGZ1bmN0aW9uKHZhbHVlLCBjb2xsYXRpb24pOiBCdWZmZXIgfCBudWxsIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RyaW5nLicpO1xuICAgIH1cblxuICAgIGlmICghY29sbGF0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGNvbGxhdGlvbiB3YXMgc2V0IGJ5IHRoZSBzZXJ2ZXIgZm9yIHRoZSBjdXJyZW50IGNvbm5lY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKCFjb2xsYXRpb24uY29kZXBhZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGNvbGxhdGlvbiBzZXQgYnkgdGhlIHNlcnZlciBoYXMgbm8gYXNzb2NpYXRlZCBlbmNvZGluZy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWNvbnYuZW5jb2RlKHZhbHVlLCBjb2xsYXRpb24uY29kZXBhZ2UpO1xuICB9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBUZXh0O1xubW9kdWxlLmV4cG9ydHMgPSBUZXh0O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxVQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBK0IsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFJL0IsTUFBTUcsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pELE1BQU1DLFlBQVksR0FBR0YsTUFBTSxDQUFDQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFaEUsTUFBTUUsSUFBYyxHQUFHO0VBQ3JCQyxFQUFFLEVBQUUsSUFBSTtFQUNSQyxJQUFJLEVBQUUsTUFBTTtFQUNaQyxJQUFJLEVBQUUsTUFBTTtFQUVaQyxZQUFZLEVBQUUsSUFBSTtFQUVsQkMsV0FBVyxFQUFFLFNBQUFBLENBQUEsRUFBVztJQUN0QixPQUFPLE1BQU07RUFDZixDQUFDO0VBRURDLGFBQWEsRUFBRSxTQUFBQSxDQUFTQyxTQUFTLEVBQUU7SUFDakMsTUFBTUMsS0FBSyxHQUFHRCxTQUFTLENBQUNDLEtBQXNCO0lBRTlDLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDakIsT0FBT0EsS0FBSyxDQUFDQyxNQUFNO0lBQ3JCLENBQUMsTUFBTTtNQUNMLE9BQU8sQ0FBQyxDQUFDO0lBQ1g7RUFDRixDQUFDO0VBRURDLGFBQWFBLENBQUNDLE1BQU0sRUFBRUosU0FBUyxFQUFFO0lBQy9CSSxNQUFNLENBQUNDLFVBQVUsQ0FBQyxJQUFJLENBQUNYLEVBQUUsQ0FBQztJQUMxQlUsTUFBTSxDQUFDRSxZQUFZLENBQUNOLFNBQVMsQ0FBQ0UsTUFBTyxDQUFDO0lBQ3RDLElBQUlGLFNBQVMsQ0FBQ08sU0FBUyxFQUFFO01BQ3ZCSCxNQUFNLENBQUNJLFdBQVcsQ0FBQ1IsU0FBUyxDQUFDTyxTQUFTLENBQUNFLFFBQVEsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDbkUsQ0FBQyxNQUFNO01BQ0xOLE1BQU0sQ0FBQ0ksV0FBVyxDQUFDaEIsWUFBWSxDQUFDO0lBQ2xDO0VBQ0YsQ0FBQztFQUVEbUIsVUFBVUEsQ0FBQ1AsTUFBTSxFQUFFSixTQUFTLEVBQUU7SUFDNUIsTUFBTUMsS0FBSyxHQUFHRCxTQUFTLENBQUNDLEtBQXNCO0lBQzlDLElBQUlBLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDakJHLE1BQU0sQ0FBQ0ksV0FBVyxDQUFDbkIsV0FBVyxDQUFDO01BQy9CO0lBQ0Y7SUFFQWUsTUFBTSxDQUFDRSxZQUFZLENBQUNMLEtBQUssQ0FBQ0MsTUFBTSxDQUFDO0lBQ2pDRSxNQUFNLENBQUNJLFdBQVcsQ0FBQ1AsS0FBSyxDQUFDO0VBQzNCLENBQUM7RUFFRFcsUUFBUSxFQUFFLFNBQUFBLENBQVNYLEtBQUssRUFBRU0sU0FBUyxFQUFpQjtJQUNsRCxJQUFJTixLQUFLLElBQUksSUFBSSxFQUFFO01BQ2pCLE9BQU8sSUFBSTtJQUNiO0lBRUEsSUFBSSxPQUFPQSxLQUFLLEtBQUssUUFBUSxFQUFFO01BQzdCLE1BQU0sSUFBSVksU0FBUyxDQUFDLGlCQUFpQixDQUFDO0lBQ3hDO0lBRUEsSUFBSSxDQUFDTixTQUFTLEVBQUU7TUFDZCxNQUFNLElBQUlPLEtBQUssQ0FBQyxnRUFBZ0UsQ0FBQztJQUNuRjtJQUVBLElBQUksQ0FBQ1AsU0FBUyxDQUFDUSxRQUFRLEVBQUU7TUFDdkIsTUFBTSxJQUFJRCxLQUFLLENBQUMsNkRBQTZELENBQUM7SUFDaEY7SUFFQSxPQUFPRSxrQkFBSyxDQUFDQyxNQUFNLENBQUNoQixLQUFLLEVBQUVNLFNBQVMsQ0FBQ1EsUUFBUSxDQUFDO0VBQ2hEO0FBQ0YsQ0FBQztBQUFDLElBQUFHLFFBQUEsR0FBQUMsT0FBQSxDQUFBL0IsT0FBQSxHQUVhSyxJQUFJO0FBQ25CMkIsTUFBTSxDQUFDRCxPQUFPLEdBQUcxQixJQUFJIiwiaWdub3JlTGlzdCI6W119