DiscofyAPI/node_modules/mariadb/lib/misc/connection-information.js

97 lines
2.3 KiB
JavaScript

'use strict';
const Queue = require('denque');
const _addPacket = function (msg) {
this.lastPackets.push(msg);
while (this.lastPackets.size() > 32) this.lastPackets.shift();
};
const _getLastPackets = function () {
let output = '';
let packet;
while ((packet = this.lastPackets.shift())) {
output += '\n' + packet;
}
return output;
};
class ConnectionInformation {
constructor() {
this.threadId = -1;
this.status = null;
this.serverVersion = null;
this.serverCapabilities = null;
}
addPacket(msg) {}
getLastPackets() {
return '';
}
enableLogPacket() {
this.lastPackets = new Queue();
this.addPacket = _addPacket.bind(this);
this.getLastPackets = _getLastPackets.bind(this);
}
hasMinVersion(major, minor, patch) {
if (!this.serverVersion)
throw new Error('cannot know if server version until connection is established');
if (!major) throw new Error('a major version must be set');
if (!minor) minor = 0;
if (!patch) patch = 0;
let ver = this.serverVersion;
return (
ver.major > major ||
(ver.major === major && ver.minor > minor) ||
(ver.major === major && ver.minor === minor && ver.patch >= patch)
);
}
isMariaDB() {
if (!this.serverVersion)
throw new Error('cannot know if server is MariaDB until connection is established');
return this.serverVersion.mariaDb;
}
/**
* Parse raw info to set server major/minor/patch values
* @param info
*/
static parseVersionString(info) {
let car;
let offset = 0;
let type = 0;
let val = 0;
for (; offset < info.serverVersion.raw.length; offset++) {
car = info.serverVersion.raw.charCodeAt(offset);
if (car < 48 || car > 57) {
switch (type) {
case 0:
info.serverVersion.major = val;
break;
case 1:
info.serverVersion.minor = val;
break;
case 2:
info.serverVersion.patch = val;
return;
}
type++;
val = 0;
} else {
val = val * 10 + car - 48;
}
}
//serverVersion finished by number like "5.5.57", assign patchVersion
if (type === 2) info.serverVersion.patch = val;
}
}
module.exports = ConnectionInformation;