tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
86 lines (83 loc) • 9.89 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
const NULL_LENGTH = Buffer.from([0xFF, 0xFF]);
const NO_COLLATION = Buffer.from([0x00, 0x00, 0x00, 0x00, 0x00]);
const NChar = {
id: 0xEF,
type: 'NCHAR',
name: 'NChar',
maximumLength: 4000,
declaration: function (parameter) {
// const value = parameter.value as null | string | { toString(): string };
const value = parameter.value; // Temporary solution. Remove 'any' later.
let length;
if (parameter.length) {
length = parameter.length;
} else if (parameter.value != null) {
length = value.toString().length || 1;
} else if (parameter.value === null && !parameter.output) {
length = 1;
} else {
length = this.maximumLength;
}
if (length < this.maximumLength) {
return 'nchar(' + length + ')';
} else {
return 'nchar(' + this.maximumLength + ')';
}
},
resolveLength: function (parameter) {
// const value = parameter.value as null | string | { toString(): string };
const value = parameter.value; // Temporary solution. Remove 'any' later.
if (parameter.length != null) {
return parameter.length;
} else if (parameter.value != null) {
if (Buffer.isBuffer(parameter.value)) {
return parameter.value.length / 2 || 1;
} else {
return value.toString().length || 1;
}
} else {
return this.maximumLength;
}
},
writeTypeInfo(buffer, parameter) {
buffer.writeUInt8(this.id);
buffer.writeUInt16LE(parameter.length * 2);
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;
}
if (Buffer.isBuffer(value)) {
buffer.writeUInt16LE(value.length);
buffer.writeBuffer(value);
} else {
const string = String(value);
buffer.writeUInt16LE(string.length * 2);
buffer.writeString(string, 'ucs2');
}
},
validate: function (value) {
if (value == null) {
return null;
}
if (typeof value !== 'string') {
throw new TypeError('Invalid string.');
}
return value;
}
};
var _default = exports.default = NChar;
module.exports = NChar;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOVUxMX0xFTkdUSCIsIkJ1ZmZlciIsImZyb20iLCJOT19DT0xMQVRJT04iLCJOQ2hhciIsImlkIiwidHlwZSIsIm5hbWUiLCJtYXhpbXVtTGVuZ3RoIiwiZGVjbGFyYXRpb24iLCJwYXJhbWV0ZXIiLCJ2YWx1ZSIsImxlbmd0aCIsInRvU3RyaW5nIiwib3V0cHV0IiwicmVzb2x2ZUxlbmd0aCIsImlzQnVmZmVyIiwid3JpdGVUeXBlSW5mbyIsImJ1ZmZlciIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwiY29sbGF0aW9uIiwid3JpdGVCdWZmZXIiLCJ0b0J1ZmZlciIsInN1YmFycmF5Iiwid3JpdGVWYWx1ZSIsInN0cmluZyIsIlN0cmluZyIsIndyaXRlU3RyaW5nIiwidmFsaWRhdGUiLCJUeXBlRXJyb3IiLCJfZGVmYXVsdCIsImV4cG9ydHMiLCJkZWZhdWx0IiwibW9kdWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RhdGEtdHlwZXMvbmNoYXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5cbmNvbnN0IE5VTExfTEVOR1RIID0gQnVmZmVyLmZyb20oWzB4RkYsIDB4RkZdKTtcbmNvbnN0IE5PX0NPTExBVElPTiA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwXSk7XG5cbmNvbnN0IE5DaGFyOiBEYXRhVHlwZSAmIHsgbWF4aW11bUxlbmd0aDogbnVtYmVyIH0gPSB7XG4gIGlkOiAweEVGLFxuICB0eXBlOiAnTkNIQVInLFxuICBuYW1lOiAnTkNoYXInLFxuICBtYXhpbXVtTGVuZ3RoOiA0MDAwLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICAvLyBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlci52YWx1ZSBhcyBudWxsIHwgc3RyaW5nIHwgeyB0b1N0cmluZygpOiBzdHJpbmcgfTtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlci52YWx1ZSBhcyBhbnk7IC8vIFRlbXBvcmFyeSBzb2x1dGlvbi4gUmVtb3ZlICdhbnknIGxhdGVyLlxuXG4gICAgbGV0IGxlbmd0aDtcbiAgICBpZiAocGFyYW1ldGVyLmxlbmd0aCkge1xuICAgICAgbGVuZ3RoID0gcGFyYW1ldGVyLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci52YWx1ZSAhPSBudWxsKSB7XG4gICAgICBsZW5ndGggPSB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCB8fCAxO1xuICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyLnZhbHVlID09PSBudWxsICYmICFwYXJhbWV0ZXIub3V0cHV0KSB7XG4gICAgICBsZW5ndGggPSAxO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0aGlzLm1heGltdW1MZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKGxlbmd0aCA8IHRoaXMubWF4aW11bUxlbmd0aCkge1xuICAgICAgcmV0dXJuICduY2hhcignICsgbGVuZ3RoICsgJyknO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJ25jaGFyKCcgKyB0aGlzLm1heGltdW1MZW5ndGggKyAnKSc7XG4gICAgfVxuICB9LFxuXG4gIHJlc29sdmVMZW5ndGg6IGZ1bmN0aW9uKHBhcmFtZXRlcikge1xuICAgIC8vIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIG51bGwgfCBzdHJpbmcgfCB7IHRvU3RyaW5nKCk6IHN0cmluZyB9O1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIGFueTsgLy8gVGVtcG9yYXJ5IHNvbHV0aW9uLiBSZW1vdmUgJ2FueScgbGF0ZXIuXG5cbiAgICBpZiAocGFyYW1ldGVyLmxlbmd0aCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGFyYW1ldGVyLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKHBhcmFtZXRlci52YWx1ZSAhPSBudWxsKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKHBhcmFtZXRlci52YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIChwYXJhbWV0ZXIudmFsdWUubGVuZ3RoIC8gMikgfHwgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpLmxlbmd0aCB8fCAxO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5tYXhpbXVtTGVuZ3RoO1xuICAgIH1cbiAgfSxcblxuICB3cml0ZVR5cGVJbmZvKGJ1ZmZlciwgcGFyYW1ldGVyKSB7XG4gICAgYnVmZmVyLndyaXRlVUludDgodGhpcy5pZCk7XG4gICAgYnVmZmVyLndyaXRlVUludDE2TEUocGFyYW1ldGVyLmxlbmd0aCEgKiAyKTtcbiAgICBpZiAocGFyYW1ldGVyLmNvbGxhdGlvbikge1xuICAgICAgYnVmZmVyLndyaXRlQnVmZmVyKHBhcmFtZXRlci5jb2xsYXRpb24udG9CdWZmZXIoKS5zdWJhcnJheSgwLCA1KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcihOT19DT0xMQVRJT04pO1xuICAgIH1cbiAgfSxcblxuICB3cml0ZVZhbHVlKGJ1ZmZlciwgcGFyYW1ldGVyKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbWV0ZXIudmFsdWU7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGJ1ZmZlci53cml0ZUJ1ZmZlcihOVUxMX0xFTkdUSCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQxNkxFKHZhbHVlLmxlbmd0aCk7XG4gICAgICBidWZmZXIud3JpdGVCdWZmZXIodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJpbmcgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2TEUoc3RyaW5nLmxlbmd0aCAqIDIpO1xuICAgICAgYnVmZmVyLndyaXRlU3RyaW5nKHN0cmluZywgJ3VjczInKTtcbiAgICB9XG4gIH0sXG5cbiAgdmFsaWRhdGU6IGZ1bmN0aW9uKHZhbHVlKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHN0cmluZy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IE5DaGFyO1xubW9kdWxlLmV4cG9ydHMgPSBOQ2hhcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRUEsTUFBTUEsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUM3QyxNQUFNQyxZQUFZLEdBQUdGLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBRWhFLE1BQU1FLEtBQTJDLEdBQUc7RUFDbERDLEVBQUUsRUFBRSxJQUFJO0VBQ1JDLElBQUksRUFBRSxPQUFPO0VBQ2JDLElBQUksRUFBRSxPQUFPO0VBQ2JDLGFBQWEsRUFBRSxJQUFJO0VBRW5CQyxXQUFXLEVBQUUsU0FBQUEsQ0FBU0MsU0FBUyxFQUFFO0lBQy9CO0lBQ0EsTUFBTUMsS0FBSyxHQUFHRCxTQUFTLENBQUNDLEtBQVksQ0FBQyxDQUFDOztJQUV0QyxJQUFJQyxNQUFNO0lBQ1YsSUFBSUYsU0FBUyxDQUFDRSxNQUFNLEVBQUU7TUFDcEJBLE1BQU0sR0FBR0YsU0FBUyxDQUFDRSxNQUFNO0lBQzNCLENBQUMsTUFBTSxJQUFJRixTQUFTLENBQUNDLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDbENDLE1BQU0sR0FBR0QsS0FBSyxDQUFDRSxRQUFRLENBQUMsQ0FBQyxDQUFDRCxNQUFNLElBQUksQ0FB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