tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
73 lines (71 loc) • 10.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _datetimen = _interopRequireDefault(require("./datetimen"));
var _core = require("@js-joda/core");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const EPOCH_DATE = _core.LocalDate.ofYearDay(1900, 1);
const TYPE_INFO = Buffer.from([_datetimen.default.id, 0x08]);
const DateTime = {
id: 0x3D,
type: 'DATETIME',
name: 'DateTime',
declaration: function () {
return 'datetime';
},
writeTypeInfo(buffer) {
buffer.writeBuffer(TYPE_INFO);
},
writeValue(buffer, parameter, options) {
const value = parameter.value;
if (value == null) {
buffer.writeUInt8(0x00);
return;
}
let days, milliseconds;
if (options.useUTC) {
days = EPOCH_DATE.until(_core.LocalDate.of(value.getUTCFullYear(), value.getUTCMonth() + 1, value.getUTCDate()), _core.ChronoUnit.DAYS);
milliseconds = ((value.getUTCHours() * 60 + value.getUTCMinutes()) * 60 + value.getUTCSeconds()) * 1000 + value.getUTCMilliseconds();
} else {
days = EPOCH_DATE.until(_core.LocalDate.of(value.getFullYear(), value.getMonth() + 1, value.getDate()), _core.ChronoUnit.DAYS);
milliseconds = ((value.getHours() * 60 + value.getMinutes()) * 60 + value.getSeconds()) * 1000 + value.getMilliseconds();
}
let threeHundredthsOfSecond = Math.round(milliseconds / (3 + 1 / 3));
// 25920000 equals one day
if (threeHundredthsOfSecond === 25920000) {
days += 1;
threeHundredthsOfSecond = 0;
}
buffer.writeUInt8(0x08);
buffer.writeInt32LE(days);
buffer.writeUInt32LE(threeHundredthsOfSecond);
},
// TODO: type 'any' needs to be revisited.
validate: function (value, collation, options) {
if (value == null) {
return null;
}
if (!(value instanceof Date)) {
value = new Date(Date.parse(value));
}
value = value;
let year;
if (options && options.useUTC) {
year = value.getUTCFullYear();
} else {
year = value.getFullYear();
}
if (year < 1753 || year > 9999) {
throw new TypeError('Out of range.');
}
if (isNaN(value)) {
throw new TypeError('Invalid date.');
}
return value;
}
};
var _default = exports.default = DateTime;
module.exports = DateTime;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGF0ZXRpbWVuIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfY29yZSIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIkVQT0NIX0RBVEUiLCJMb2NhbERhdGUiLCJvZlllYXJEYXkiLCJUWVBFX0lORk8iLCJCdWZmZXIiLCJmcm9tIiwiRGF0ZVRpbWVOIiwiaWQiLCJEYXRlVGltZSIsInR5cGUiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJ3cml0ZVR5cGVJbmZvIiwiYnVmZmVyIiwid3JpdGVCdWZmZXIiLCJ3cml0ZVZhbHVlIiwicGFyYW1ldGVyIiwib3B0aW9ucyIsInZhbHVlIiwid3JpdGVVSW50OCIsImRheXMiLCJtaWxsaXNlY29uZHMiLCJ1c2VVVEMiLCJ1bnRpbCIsIm9mIiwiZ2V0VVRDRnVsbFllYXIiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJDaHJvbm9Vbml0IiwiREFZUyIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJnZXRNaWxsaXNlY29uZHMiLCJ0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCIsIk1hdGgiLCJyb3VuZCIsIndyaXRlSW50MzJMRSIsIndyaXRlVUludDMyTEUiLCJ2YWxpZGF0ZSIsImNvbGxhdGlvbiIsIkRhdGUiLCJwYXJzZSIsInllYXIiLCJUeXBlRXJyb3IiLCJpc05hTiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL2RhdGV0aW1lLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRGF0YVR5cGUgfSBmcm9tICcuLi9kYXRhLXR5cGUnO1xuaW1wb3J0IERhdGVUaW1lTiBmcm9tICcuL2RhdGV0aW1lbic7XG5pbXBvcnQgeyBDaHJvbm9Vbml0LCBMb2NhbERhdGUgfSBmcm9tICdAanMtam9kYS9jb3JlJztcblxuY29uc3QgRVBPQ0hfREFURSA9IExvY2FsRGF0ZS5vZlllYXJEYXkoMTkwMCwgMSk7XG5jb25zdCBUWVBFX0lORk8gPSBCdWZmZXIuZnJvbShbRGF0ZVRpbWVOLmlkLCAweDA4XSk7XG5cbmNvbnN0IERhdGVUaW1lOiBEYXRhVHlwZSA9IHtcbiAgaWQ6IDB4M0QsXG4gIHR5cGU6ICdEQVRFVElNRScsXG4gIG5hbWU6ICdEYXRlVGltZScsXG5cbiAgZGVjbGFyYXRpb246IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnZGF0ZXRpbWUnO1xuICB9LFxuXG4gIHdyaXRlVHlwZUluZm8oYnVmZmVyKSB7XG4gICAgYnVmZmVyLndyaXRlQnVmZmVyKFRZUEVfSU5GTyk7XG4gIH0sXG5cbiAgd3JpdGVWYWx1ZShidWZmZXIsIHBhcmFtZXRlciwgb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gcGFyYW1ldGVyLnZhbHVlIGFzIERhdGUgfCBudWxsO1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICBidWZmZXIud3JpdGVVSW50OCgweDAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZGF5czogbnVtYmVyLCBtaWxsaXNlY29uZHM6IG51bWJlcjtcbiAgICBpZiAob3B0aW9ucy51c2VVVEMpIHtcbiAgICAgIGRheXMgPSBFUE9DSF9EQVRFLnVudGlsKExvY2FsRGF0ZS5vZih2YWx1ZS5nZXRVVENGdWxsWWVhcigpLCB2YWx1ZS5nZXRVVENNb250aCgpICsgMSwgdmFsdWUuZ2V0VVRDRGF0ZSgpKSwgQ2hyb25vVW5pdC5EQVlTKTtcbiAgICAgIG1pbGxpc2Vjb25kcyA9ICgodmFsdWUuZ2V0VVRDSG91cnMoKSAqIDYwICsgdmFsdWUuZ2V0VVRDTWludXRlcygpKSAqIDYwICsgdmFsdWUuZ2V0VVRDU2Vjb25kcygpKSAqIDEwMDAgKyB2YWx1ZS5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5cyA9IEVQT0NIX0RBVEUudW50aWwoTG9jYWxEYXRlLm9mKHZhbHVlLmdldEZ1bGxZZWFyKCksIHZhbHVlLmdldE1vbnRoKCkgKyAxLCB2YWx1ZS5nZXREYXRlKCkpLCBDaHJvbm9Vbml0LkRBWVMpO1xuICAgICAgbWlsbGlzZWNvbmRzID0gKCh2YWx1ZS5nZXRIb3VycygpICogNjAgKyB2YWx1ZS5nZXRNaW51dGVzKCkpICogNjAgKyB2YWx1ZS5nZXRTZWNvbmRzKCkpICogMTAwMCArIHZhbHVlLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIH1cblxuICAgIGxldCB0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCA9IE1hdGgucm91bmQobWlsbGlzZWNvbmRzIC8gKDMgKyAoMSAvIDMpKSk7XG5cbiAgICAvLyAyNTkyMDAwMCBlcXVhbHMgb25lIGRheVxuICAgIGlmICh0aHJlZUh1bmRyZWR0aHNPZlNlY29uZCA9PT0gMjU5MjAwMDApIHtcbiAgICAgIGRheXMgKz0gMTtcbiAgICAgIHRocmVlSHVuZHJlZHRoc09mU2Vjb25kID0gMDtcbiAgICB9XG5cbiAgICBidWZmZXIud3JpdGVVSW50OCgweDA4KTtcbiAgICBidWZmZXIud3JpdGVJbnQzMkxFKGRheXMpO1xuICAgIGJ1ZmZlci53cml0ZVVJbnQzMkxFKHRocmVlSHVuZHJlZHRoc09mU2Vjb25kKTtcbiAgfSxcblxuICAvLyBUT0RPOiB0eXBlICdhbnknIG5lZWRzIHRvIGJlIHJldmlzaXRlZC5cbiAgdmFsaWRhdGU6IGZ1bmN0aW9uKHZhbHVlOiBhbnksIGNvbGxhdGlvbiwgb3B0aW9ucyk6IG51bGwgfCBudW1iZXIge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICB2YWx1ZSA9IG5ldyBEYXRlKERhdGUucGFyc2UodmFsdWUpKTtcbiAgICB9XG5cbiAgICB2YWx1ZSA9IHZhbHVlIGFzIERhdGU7XG5cbiAgICBsZXQgeWVhcjtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVzZVVUQykge1xuICAgICAgeWVhciA9IHZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHllYXIgPSB2YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgIH1cblxuICAgIGlmICh5ZWFyIDwgMTc1MyB8fCB5ZWFyID4gOTk5OSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0IG9mIHJhbmdlLicpO1xuICAgIH1cblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZGF0ZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVUaW1lO1xubW9kdWxlLmV4cG9ydHMgPSBEYXRlVGltZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBRCxPQUFBO0FBQXNELFNBQUFELHVCQUFBRyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXRELE1BQU1HLFVBQVUsR0FBR0MsZUFBUyxDQUFDQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztBQUMvQyxNQUFNQyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLENBQUNDLGtCQUFTLENBQUNDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUVuRCxNQUFNQyxRQUFrQixHQUFHO0VBQ3pCRCxFQUFFLEVBQUUsSUFBSTtFQUNSRSxJQUFJLEVBQUUsVUFBVTtFQUNoQkMsSUFBSSxFQUFFLFVBQVU7RUFFaEJDLFdBQVcsRUFBRSxTQUFBQSxDQUFBLEVBQVc7SUFDdEIsT0FBTyxVQUFVO0VBQ25CLENB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