tedious
Version:
A TDS driver, for connecting to MS SQLServer databases.
77 lines (76 loc) • 10.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _datetimen = _interopRequireDefault(require("./datetimen"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const EPOCH_DATE = new Date(1900, 0, 1);
const UTC_EPOCH_DATE = new Date(Date.UTC(1900, 0, 1));
const TYPE_INFO = Buffer.from([_datetimen.default.id, 0x04]);
const SmallDateTime = {
id: 0x3A,
type: 'DATETIM4',
name: 'SmallDateTime',
declaration: function () {
return 'smalldatetime';
},
writeTypeInfo(buffer) {
buffer.writeBuffer(TYPE_INFO);
},
writeValue(buffer, parameter, options) {
const value = parameter.value;
if (value == null) {
buffer.writeUInt8(0x00);
return;
}
let days, minutes;
if (options.useUTC) {
days = Math.floor((value.getTime() - UTC_EPOCH_DATE.getTime()) / (1000 * 60 * 60 * 24));
minutes = value.getUTCHours() * 60 + value.getUTCMinutes();
} else {
const dstDiff = -(value.getTimezoneOffset() - EPOCH_DATE.getTimezoneOffset()) * 60 * 1000;
days = Math.floor((value.getTime() - EPOCH_DATE.getTime() + dstDiff) / (1000 * 60 * 60 * 24));
minutes = value.getHours() * 60 + value.getMinutes();
}
buffer.writeUInt8(0x04);
buffer.writeUInt16LE(days);
buffer.writeUInt16LE(minutes);
},
validate: function (value, collation, options) {
if (value == null) {
return null;
}
if (!(value instanceof Date)) {
value = new Date(Date.parse(value));
}
value = value;
let year, month, date;
if (options && options.useUTC) {
year = value.getUTCFullYear();
month = value.getUTCMonth();
date = value.getUTCDate();
} else {
year = value.getFullYear();
month = value.getMonth();
date = value.getDate();
}
if (year < 1900 || year > 2079) {
throw new TypeError('Out of range.');
}
if (year === 2079) {
// Month is 0-indexed, i.e. Jan = 0, Dec = 11
// See: https://learn.microsoft.com/en-us/sql/t-sql/data-types/smalldatetime-transact-sql?view=sql-server-ver16
if (month > 5 || month === 5 && date > 6) {
throw new TypeError('Out of range.');
}
}
if (isNaN(value)) {
throw new TypeError('Invalid date.');
}
return value;
}
};
var _default = exports.default = SmallDateTime;
module.exports = SmallDateTime;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGF0ZXRpbWVuIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJFUE9DSF9EQVRFIiwiRGF0ZSIsIlVUQ19FUE9DSF9EQVRFIiwiVVRDIiwiVFlQRV9JTkZPIiwiQnVmZmVyIiwiZnJvbSIsIkRhdGVUaW1lTiIsImlkIiwiU21hbGxEYXRlVGltZSIsInR5cGUiLCJuYW1lIiwiZGVjbGFyYXRpb24iLCJ3cml0ZVR5cGVJbmZvIiwiYnVmZmVyIiwid3JpdGVCdWZmZXIiLCJ3cml0ZVZhbHVlIiwicGFyYW1ldGVyIiwib3B0aW9ucyIsInZhbHVlIiwid3JpdGVVSW50OCIsImRheXMiLCJtaW51dGVzIiwidXNlVVRDIiwiTWF0aCIsImZsb29yIiwiZ2V0VGltZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImRzdERpZmYiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsIndyaXRlVUludDE2TEUiLCJ2YWxpZGF0ZSIsImNvbGxhdGlvbiIsInBhcnNlIiwieWVhciIsIm1vbnRoIiwiZGF0ZSIsImdldFVUQ0Z1bGxZZWFyIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJUeXBlRXJyb3IiLCJpc05hTiIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsIm1vZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhLXR5cGVzL3NtYWxsZGF0ZXRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBEYXRhVHlwZSB9IGZyb20gJy4uL2RhdGEtdHlwZSc7XG5pbXBvcnQgRGF0ZVRpbWVOIGZyb20gJy4vZGF0ZXRpbWVuJztcblxuY29uc3QgRVBPQ0hfREFURSA9IG5ldyBEYXRlKDE5MDAsIDAsIDEpO1xuY29uc3QgVVRDX0VQT0NIX0RBVEUgPSBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxKSk7XG5cbmNvbnN0IFRZUEVfSU5GTyA9IEJ1ZmZlci5mcm9tKFtEYXRlVGltZU4uaWQsIDB4MDRdKTtcblxuY29uc3QgU21hbGxEYXRlVGltZTogRGF0YVR5cGUgPSB7XG4gIGlkOiAweDNBLFxuICB0eXBlOiAnREFURVRJTTQnLFxuICBuYW1lOiAnU21hbGxEYXRlVGltZScsXG5cbiAgZGVjbGFyYXRpb246IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAnc21hbGxkYXRldGltZSc7XG4gIH0sXG5cbiAgd3JpdGVUeXBlSW5mbyhidWZmZXIpIHtcbiAgICBidWZmZXIud3JpdGVCdWZmZXIoVFlQRV9JTkZPKTtcbiAgfSxcblxuICB3cml0ZVZhbHVlKGJ1ZmZlciwgcGFyYW1ldGVyLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJhbWV0ZXIudmFsdWUgYXMgRGF0ZSB8IG51bGw7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQ4KDB4MDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBkYXlzOiBudW1iZXIsIG1pbnV0ZXM6IG51bWJlcjtcbiAgICBpZiAob3B0aW9ucy51c2VVVEMpIHtcbiAgICAgIGRheXMgPSBNYXRoLmZsb29yKCh2YWx1ZS5nZXRUaW1lKCkgLSBVVENfRVBPQ0hfREFURS5nZXRUaW1lKCkpIC8gKDEwMDAgKiA2MCAqIDYwICogMjQpKTtcbiAgICAgIG1pbnV0ZXMgPSAodmFsdWUuZ2V0VVRDSG91cnMoKSAqIDYwKSArIHZhbHVlLmdldFVUQ01pbnV0ZXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZHN0RGlmZiA9IC0odmFsdWUuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIEVQT0NIX0RBVEUuZ2V0VGltZXpvbmVPZmZzZXQoKSkgKiA2MCAqIDEwMDA7XG4gICAgICBkYXlzID0gTWF0aC5mbG9vcigodmFsdWUuZ2V0VGltZSgpIC0gRVBPQ0hfREFURS5nZXRUaW1lKCkgKyBkc3REaWZmKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSk7XG4gICAgICBtaW51dGVzID0gKHZhbHVlLmdldEhvdXJzKCkgKiA2MCkgKyB2YWx1ZS5nZXRNaW51dGVzKCk7XG4gICAgfVxuXG4gICAgYnVmZmVyLndyaXRlVUludDgoMHgwNCk7XG4gICAgYnVmZmVyLndyaXRlVUludDE2TEUoZGF5cyk7XG4gICAgYnVmZmVyLndyaXRlVUludDE2TEUobWludXRlcyk7XG4gIH0sXG5cbiAgdmFsaWRhdGU6IGZ1bmN0aW9uKHZhbHVlLCBjb2xsYXRpb24sIG9wdGlvbnMpOiBudWxsIHwgRGF0ZSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmICghKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgIHZhbHVlID0gbmV3IERhdGUoRGF0ZS5wYXJzZSh2YWx1ZSkpO1xuICAgIH1cblxuICAgIHZhbHVlID0gdmFsdWUgYXMgRGF0ZTtcblxuICAgIGxldCB5ZWFyLCBtb250aCwgZGF0ZTtcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnVzZVVUQykge1xuICAgICAgeWVhciA9IHZhbHVlLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICBtb250aCA9IHZhbHVlLmdldFVUQ01vbnRoKCk7XG4gICAgICBkYXRlID0gdmFsdWUuZ2V0VVRDRGF0ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB5ZWFyID0gdmFsdWUuZ2V0RnVsbFllYXIoKTtcbiAgICAgIG1vbnRoID0gdmFsdWUuZ2V0TW9udGgoKTtcbiAgICAgIGRhdGUgPSB2YWx1ZS5nZXREYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKHllYXIgPCAxOTAwIHx8IHllYXIgPiAyMDc5KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPdXQgb2YgcmFuZ2UuJyk7XG4gICAgfVxuXG4gICAgaWYgKHllYXIgPT09IDIwNzkpIHtcbiAgICAgIC8vIE1vbnRoIGlzIDAtaW5kZXhlZCwgaS5lLiBKYW4gPSAwLCBEZWMgPSAxMVxuICAgICAgLy8gU2VlOiBodHRwczovL2xlYXJuLm1pY3Jvc29mdC5jb20vZW4tdXMvc3FsL3Qtc3FsL2RhdGEtdHlwZXMvc21hbGxkYXRldGltZS10cmFuc2FjdC1zcWw/dmlldz1zcWwtc2VydmVyLXZlcjE2XG4gICAgICBpZiAobW9udGggPiA1IHx8IChtb250aCA9PT0gNSAmJiBkYXRlID4gNikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT3V0IG9mIHJhbmdlLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgZGF0ZS4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNtYWxsRGF0ZVRpbWU7XG5tb2R1bGUuZXhwb3J0cyA9IFNtYWxsRGF0ZVRpbWU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUFvQyxTQUFBRCx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVwQyxNQUFNRyxVQUFVLEdBQUcsSUFBSUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZDLE1BQU1DLGNBQWMsR0FBRyxJQUFJRCxJQUFJLENBQUNBLElBQUksQ0FBQ0UsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFFckQsTUFBTUMsU0FBUyxHQUFHQyxNQUFNLENBQUNDLElBQUksQ0FBQyxDQUFDQyxrQkFBUyxDQUFDQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFbkQsTUFBTUMsYUFBdUIsR0FBRztFQUM5QkQsRUFBRSxFQUFFLElBQUk7RUFDUkUsSUFBSSxFQUFFLFVBQVU7RUFDaEJDLElB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