tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
118 lines (96 loc) • 10.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _writableTrackingBuffer = _interopRequireDefault(require("../tracking-buffer/writable-tracking-buffer"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const NULL_LENGTH = Buffer.from([0x00]);
const Time = {
id: 0x29,
type: 'TIMEN',
name: 'Time',
declaration: function (parameter) {
return 'time(' + this.resolveScale(parameter) + ')';
},
resolveScale: function (parameter) {
if (parameter.scale != null) {
return parameter.scale;
} else if (parameter.value === null) {
return 0;
} else {
return 7;
}
},
generateTypeInfo(parameter) {
return Buffer.from([this.id, parameter.scale]);
},
generateParameterLength(parameter, options) {
if (parameter.value == null) {
return NULL_LENGTH;
}
switch (parameter.scale) {
case 0:
case 1:
case 2:
return Buffer.from([0x03]);
case 3:
case 4:
return Buffer.from([0x04]);
case 5:
case 6:
case 7:
return Buffer.from([0x05]);
default:
throw new Error('invalid scale');
}
},
*generateParameterData(parameter, options) {
if (parameter.value == null) {
return;
}
const buffer = new _writableTrackingBuffer.default(16);
const time = parameter.value;
let timestamp;
if (options.useUTC) {
timestamp = ((time.getUTCHours() * 60 + time.getUTCMinutes()) * 60 + time.getUTCSeconds()) * 1000 + time.getUTCMilliseconds();
} else {
timestamp = ((time.getHours() * 60 + time.getMinutes()) * 60 + time.getSeconds()) * 1000 + time.getMilliseconds();
}
timestamp = timestamp * Math.pow(10, parameter.scale - 3);
timestamp += (parameter.value.nanosecondDelta != null ? parameter.value.nanosecondDelta : 0) * Math.pow(10, parameter.scale);
timestamp = Math.round(timestamp);
switch (parameter.scale) {
case 0:
case 1:
case 2:
buffer.writeUInt24LE(timestamp);
break;
case 3:
case 4:
buffer.writeUInt32LE(timestamp);
break;
case 5:
case 6:
case 7:
buffer.writeUInt40LE(timestamp);
}
yield buffer.data;
},
validate: function (value) {
if (value == null) {
return null;
}
if (!(value instanceof Date)) {
value = new Date(Date.parse(value));
}
if (isNaN(value)) {
throw new TypeError('Invalid time.');
}
return value;
}
};
var _default = Time;
exports.default = _default;
module.exports = Time;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOVUxMX0xFTkdUSCIsIkJ1ZmZlciIsImZyb20iLCJUaW1lIiwiaWQiLCJ0eXBlIiwibmFtZSIsImRlY2xhcmF0aW9uIiwicGFyYW1ldGVyIiwicmVzb2x2ZVNjYWxlIiwic2NhbGUiLCJ2YWx1ZSIsImdlbmVyYXRlVHlwZUluZm8iLCJnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aCIsIm9wdGlvbnMiLCJFcnJvciIsImdlbmVyYXRlUGFyYW1ldGVyRGF0YSIsImJ1ZmZlciIsIldyaXRhYmxlVHJhY2tpbmdCdWZmZXIiLCJ0aW1lIiwidGltZXN0YW1wIiwidXNlVVRDIiwiZ2V0VVRDSG91cnMiLCJnZXRVVENNaW51dGVzIiwiZ2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbGxpc2Vjb25kcyIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJNYXRoIiwicG93IiwibmFub3NlY29uZERlbHRhIiwicm91bmQiLCJ3cml0ZVVJbnQyNExFIiwid3JpdGVVSW50MzJMRSIsIndyaXRlVUludDQwTEUiLCJkYXRhIiwidmFsaWRhdGUiLCJEYXRlIiwicGFyc2UiLCJpc05hTiIsIlR5cGVFcnJvciIsIm1vZHVsZSIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YS10eXBlcy90aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi4vZGF0YS10eXBlJztcbmltcG9ydCBXcml0YWJsZVRyYWNraW5nQnVmZmVyIGZyb20gJy4uL3RyYWNraW5nLWJ1ZmZlci93cml0YWJsZS10cmFja2luZy1idWZmZXInO1xuXG5jb25zdCBOVUxMX0xFTkdUSCA9IEJ1ZmZlci5mcm9tKFsweDAwXSk7XG5cbmNvbnN0IFRpbWU6IERhdGFUeXBlID0ge1xuICBpZDogMHgyOSxcbiAgdHlwZTogJ1RJTUVOJyxcbiAgbmFtZTogJ1RpbWUnLFxuXG4gIGRlY2xhcmF0aW9uOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICByZXR1cm4gJ3RpbWUoJyArICh0aGlzLnJlc29sdmVTY2FsZSEocGFyYW1ldGVyKSkgKyAnKSc7XG4gIH0sXG5cbiAgcmVzb2x2ZVNjYWxlOiBmdW5jdGlvbihwYXJhbWV0ZXIpIHtcbiAgICBpZiAocGFyYW1ldGVyLnNjYWxlICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXJhbWV0ZXIuc2NhbGU7XG4gICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIudmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gNztcbiAgICB9XG4gIH0sXG5cbiAgZ2VuZXJhdGVUeXBlSW5mbyhwYXJhbWV0ZXIpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20oW3RoaXMuaWQsIHBhcmFtZXRlci5zY2FsZSFdKTtcbiAgfSxcblxuICBnZW5lcmF0ZVBhcmFtZXRlckxlbmd0aChwYXJhbWV0ZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAocGFyYW1ldGVyLnZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBOVUxMX0xFTkdUSDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHBhcmFtZXRlci5zY2FsZSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgY2FzZSAxOlxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oWzB4MDNdKTtcbiAgICAgIGNhc2UgMzpcbiAgICAgIGNhc2UgNDpcbiAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKFsweDA0XSk7XG4gICAgICBjYXNlIDU6XG4gICAgICBjYXNlIDY6XG4gICAgICBjYXNlIDc6XG4gICAgICAgIHJldHVybiBCdWZmZXIuZnJvbShbMHgwNV0pO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHNjYWxlJyk7XG4gICAgfVxuICB9LFxuXG4gICogZ2VuZXJhdGVQYXJhbWV0ZXJEYXRhKHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGlmIChwYXJhbWV0ZXIudmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IG5ldyBXcml0YWJsZVRyYWNraW5nQnVmZmVyKDE2KTtcbiAgICBjb25zdCB0aW1lID0gcGFyYW1ldGVyLnZhbHVlO1xuXG4gICAgbGV0IHRpbWVzdGFtcDtcbiAgICBpZiAob3B0aW9ucy51c2VVVEMpIHtcbiAgICAgIHRpbWVzdGFtcCA9ICgodGltZS5nZXRVVENIb3VycygpICogNjAgKyB0aW1lLmdldFVUQ01pbnV0ZXMoKSkgKiA2MCArIHRpbWUuZ2V0VVRDU2Vjb25kcygpKSAqIDEwMDAgKyB0aW1lLmdldFVUQ01pbGxpc2Vjb25kcygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lc3RhbXAgPSAoKHRpbWUuZ2V0SG91cnMoKSAqIDYwICsgdGltZS5nZXRNaW51dGVzKCkpICogNjAgKyB0aW1lLmdldFNlY29uZHMoKSkgKiAxMDAwICsgdGltZS5nZXRNaWxsaXNlY29uZHMoKTtcbiAgICB9XG5cbiAgICB0aW1lc3RhbXAgPSB0aW1lc3RhbXAgKiBNYXRoLnBvdygxMCwgcGFyYW1ldGVyLnNjYWxlISAtIDMpO1xuICAgIHRpbWVzdGFtcCArPSAocGFyYW1ldGVyLnZhbHVlLm5hbm9zZWNvbmREZWx0YSAhPSBudWxsID8gcGFyYW1ldGVyLnZhbHVlLm5hbm9zZWNvbmREZWx0YSA6IDApICogTWF0aC5wb3coMTAsIHBhcmFtZXRlci5zY2FsZSEpO1xuICAgIHRpbWVzdGFtcCA9IE1hdGgucm91bmQodGltZXN0YW1wKTtcblxuICAgIHN3aXRjaCAocGFyYW1ldGVyLnNjYWxlKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICBjYXNlIDE6XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGJ1ZmZlci53cml0ZVVJbnQyNExFKHRpbWVzdGFtcCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAzOlxuICAgICAgY2FzZSA0OlxuICAgICAgICBidWZmZXIud3JpdGVVSW50MzJMRSh0aW1lc3RhbXApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgNTpcbiAgICAgIGNhc2UgNjpcbiAgICAgIGNhc2UgNzpcbiAgICAgICAgYnVmZmVyLndyaXRlVUludDQwTEUodGltZXN0YW1wKTtcbiAgICB9XG5cbiAgICB5aWVsZCBidWZmZXIuZGF0YTtcbiAgfSxcblxuICB2YWxpZGF0ZTogZnVuY3Rpb24odmFsdWUpOiBudWxsIHwgbnVtYmVyIHwgRGF0ZSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIHZhbHVlID0gbmV3IERhdGUoRGF0ZS5wYXJzZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgdGltZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cblxuZXhwb3J0IGRlZmF1bHQgVGltZTtcbm1vZHVsZS5leHBvcnRzID0gVGltZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUNBOzs7O0FBRUEsTUFBTUEsV0FBVyxHQUFHQyxNQUFNLENBQUNDLElBQVAsQ0FBWSxDQUFDLElBQUQsQ0FBWixDQUFwQjtBQUVBLE1BQU1DLElBQWMsR0FBRztFQUNyQkMsRUFBRSxFQUFFLElBRGlCO0VBRXJCQyxJQUFJLEVBQUUsT0FGZTtFQUdyQkMsSUFBSSxFQUFFLE1BSGU7RUFLckJDLFdBQVcsRUFBRSxVQUFTQyxTQUFULEVBQW9CO0lBQy9CLE9BQU8sVUFBVyxLQUFLQyxZQUFMLENBQW1CRCxTQUFuQixDQUFYLEdBQTRDLEdBQW5EO0VBQ0QsQ0FQb0I7RUFTckJDLFlBQVksRUFBRSxVQUFTRCxTQUFULEVBQW9CO0lBQ2hDLElBQUlBLFNBQVMsQ0FBQ0UsS0FBVixJQUFtQixJQUF2QixFQUE2QjtNQUMzQixPQUFPRixTQUFTLENB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