Comparing version 3.4.5 to 3.5.0
@@ -69,4 +69,4 @@ 'use strict'; | ||
characterSet: this.characterSet, | ||
encoding: this.encoding, | ||
columnLength: this.columnLength, | ||
columnType: this.columnType, | ||
type: this.columnType, | ||
@@ -78,2 +78,150 @@ flags: this.flags, | ||
[Symbol.for('nodejs.util.inspect.custom')](depth, inspectOptions, inspect) { | ||
const Types = require('../constants/types.js'); | ||
const typeNames = []; | ||
for (const t in Types) { | ||
typeNames[Types[t]] = t; | ||
} | ||
const fiedFlags = require('../constants/field_flags.js'); | ||
const flagNames = []; | ||
// TODO: respect inspectOptions.showHidden | ||
//const inspectFlags = inspectOptions.showHidden ? this.flags : this.flags & ~fiedFlags.PRI_KEY; | ||
const inspectFlags = this.flags; | ||
for (const f in fiedFlags) { | ||
if (inspectFlags & fiedFlags[f]) { | ||
if (f === 'PRI_KEY') { | ||
flagNames.push('PRIMARY KEY'); | ||
} else if (f === 'NOT_NULL') { | ||
flagNames.push('NOT NULL'); | ||
} else if (f === 'BINARY') { | ||
// ignore flag for now | ||
} else if (f === 'MULTIPLE_KEY') { | ||
// not sure if that should be part of inspection. | ||
// in the schema usually this is part of index definition | ||
// example: UNIQUE KEY `my_uniq_id` (`id_box_elements`,`id_router`) | ||
// note that only first column has MULTIPLE_KEY flag set in this case | ||
// so there is no good way of knowing that this is part of index just | ||
// by looking at indifidual field flags | ||
} else if (f === 'NO_DEFAULT_VALUE') { | ||
// almost the same as NOT_NULL? | ||
} else if (f === 'BLOB') { | ||
// included in the type | ||
} else if (f === 'UNSIGNED') { | ||
// this should be first after type | ||
} else if (f === 'TIMESTAMP') { | ||
// timestamp flag is redundant for inspection - already included in type | ||
} else if (f === 'ON_UPDATE_NOW') { | ||
flagNames.push('ON UPDATE CURRENT_TIMESTAMP'); | ||
} else { | ||
flagNames.push(f); | ||
} | ||
} | ||
} | ||
if (depth > 1) { | ||
return inspect({ | ||
...this.inspect(), | ||
typeName: typeNames[this.columnType], | ||
flags: flagNames, | ||
}); | ||
} | ||
const isUnsigned = this.flags & fiedFlags.UNSIGNED; | ||
let typeName = typeNames[this.columnType]; | ||
if (typeName === 'BLOB') { | ||
// TODO: check for non-utf8mb4 encoding | ||
if (this.columnLength === 4294967295) { | ||
typeName = 'LONGTEXT'; | ||
} else if (this.columnLength === 67108860) { | ||
typeName = 'MEDIUMTEXT'; | ||
} else if (this.columnLength === 262140) { | ||
typeName = 'TEXT'; | ||
} else if (this.columnLength === 1020) { // 255*4 | ||
typeName = 'TINYTEXT'; | ||
} else { | ||
typeName = `BLOB(${this.columnLength})`; | ||
} | ||
} else if (typeName === 'VAR_STRING') { | ||
// TODO: check for non-utf8mb4 encoding | ||
typeName = `VARCHAR(${Math.ceil(this.columnLength/4)})`; | ||
} else if (typeName === 'TINY') { | ||
if ( | ||
(this.columnLength === 3 && isUnsigned) || | ||
(this.columnLength === 4 && !isUnsigned) ) { | ||
typeName = 'TINYINT'; | ||
} else { | ||
typeName = `TINYINT(${this.columnLength})`; | ||
} | ||
} else if (typeName === 'LONGLONG') { | ||
if (this.columnLength === 20) { | ||
typeName = 'BIGINT'; | ||
} else { | ||
typeName = `BIGINT(${this.columnLength})`; | ||
} | ||
} else if (typeName === 'SHORT') { | ||
if (isUnsigned && this.columnLength === 5) { | ||
typeName = 'SMALLINT'; | ||
} else if (!isUnsigned && this.columnLength === 6) { | ||
typeName = 'SMALLINT'; | ||
} else { | ||
typeName = `SMALLINT(${this.columnLength})`; | ||
} | ||
} else if (typeName === 'LONG') { | ||
if (isUnsigned && this.columnLength === 10) { | ||
typeName = 'INT'; | ||
} else if (!isUnsigned && this.columnLength === 11) { | ||
typeName = 'INT'; | ||
} else { | ||
typeName = `INT(${this.columnLength})`; | ||
} | ||
} else if (typeName === 'INT24') { | ||
if (isUnsigned && this.columnLength === 8) { | ||
typeName = 'MEDIUMINT'; | ||
} else if (!isUnsigned && this.columnLength === 9) { | ||
typeName = 'MEDIUMINT'; | ||
} else { | ||
typeName = `MEDIUMINT(${this.columnLength})`; | ||
} | ||
} else if (typeName === 'DOUBLE') { | ||
// DOUBLE without modifiers is reported as DOUBLE(22, 31) | ||
if (this.columnLength === 22 && this.decimals === 31) { | ||
typeName = 'DOUBLE'; | ||
} else { | ||
typeName = `DOUBLE(${this.columnLength},${this.decimals})`; | ||
} | ||
} else if (typeName === 'FLOAT') { | ||
// FLOAT without modifiers is reported as FLOAT(12, 31) | ||
if (this.columnLength === 12 && this.decimals === 31) { | ||
typeName = 'FLOAT'; | ||
} else { | ||
typeName = `FLOAT(${this.columnLength},${this.decimals})`; | ||
} | ||
} else if (typeName === 'NEWDECIMAL') { | ||
if (this.columnLength === 11 && this.decimals === 0) { | ||
typeName = 'DECIMAL'; | ||
} else if (this.decimals === 0) { | ||
// not sure why, but DECIMAL(13) is reported as DECIMAL(14, 0) | ||
// and DECIMAL(13, 9) is reported as NEWDECIMAL(15, 9) | ||
if (isUnsigned) { | ||
typeName = `DECIMAL(${this.columnLength})`; | ||
} else { | ||
typeName = `DECIMAL(${this.columnLength - 1})`; | ||
} | ||
} else { | ||
typeName = `DECIMAL(${this.columnLength - 2},${this.decimals})`; | ||
} | ||
} else { | ||
typeName = `${typeNames[this.columnType]}(${this.columnLength})`; | ||
} | ||
if (isUnsigned) { | ||
typeName += ' UNSIGNED'; | ||
} | ||
// TODO respect colors option | ||
return `\`${this.name}\` ${[typeName, ...flagNames].join(' ')}`; | ||
} | ||
static toPacket(column, sequenceId) { | ||
@@ -80,0 +228,0 @@ let length = 17; // = 4 padding + 1 + 12 for the rest |
{ | ||
"name": "mysql2", | ||
"version": "3.4.5", | ||
"version": "3.5.0", | ||
"description": "fast mysql driver. Implements core protocol, prepared statements, ssl and compression in native JS", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
605985
15065