diff --git a/appveyor.yml b/appveyor.yml index a6a88e6..188476d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -52,7 +52,8 @@ install: - cmd: echo [mysqld] > c:\projects\server\data\my.ini - cmd: echo datadir=C:/projects/server/data >> c:\projects\server\data\my.ini - cmd: echo port=3306 >> c:\projects\server\data\my.ini - - cmd: echo innodb_buffer_pool_size=195M >> c:\projects\server\data\my.ini + - cmd: echo innodb_log_file_size=50M >> c:\projects\server\data\my.ini + - cmd: echo innodb_buffer_pool_size=200M >> c:\projects\server\data\my.ini - cmd: echo character-set-server=utf8mb4 >> c:\projects\server\data\my.ini - cmd: echo collation-server=utf8mb4_unicode_ci >> c:\projects\server\data\my.ini - cmd: type c:\projects\server\data\my.ini diff --git a/documentation/readme.md b/documentation/readme.md index 8ecb173..feffaae 100644 --- a/documentation/readme.md +++ b/documentation/readme.md @@ -224,11 +224,14 @@ connection.query({rowsAsArray:true, sql:'select * from animals'}, (err, res, fie ### Field metadata properties -* `schema`: field schema +* `db`: database schema name (alias `schema` exists for compatibilit with mysql2) * `table`: field table alias * `orgTable`: field table * `name`: field alias * `orgName`: field name +* `columnLength`: column length +* `columnType`: column type (see FieldType) +* `decimals`: decimal length (for DECIMAL field type) methods * `isUnsigned()`: indicate if field type is unsigned diff --git a/src/cmd/column-definition.js b/src/cmd/column-definition.js index 598d63d..e921bec 100644 --- a/src/cmd/column-definition.js +++ b/src/cmd/column-definition.js @@ -22,31 +22,31 @@ class ColumnDefinition { } isUnsigned() { - return this._flags & FieldDetail.UNSIGNED; + return (this._flags & FieldDetail.UNSIGNED) > 0; } canBeNull() { - return this._flags & FieldDetail.NOT_NULL; + return (this._flags & FieldDetail.NOT_NULL) === 0; } isPrimaryKey() { - return this._flags & FieldDetail.PRIMARY_KEY; + return (this._flags & FieldDetail.PRIMARY_KEY) > 0; } isUniqueKey() { - return this._flags & FieldDetail.UNIQUE_KEY; + return (this._flags & FieldDetail.UNIQUE_KEY) > 0; } isMultipleKey() { - return this._flags & FieldDetail.MULTIPLE_KEY; + return (this._flags & FieldDetail.MULTIPLE_KEY) > 0; } isBlob() { - return this._flags & FieldDetail.BLOB; + return (this._flags & FieldDetail.BLOB) > 0; } isZeroFill() { - return this._flags & FieldDetail.ZEROFILL_FLAG; + return (this._flags & FieldDetail.ZEROFILL_FLAG) > 0; } isBinary() { @@ -55,7 +55,7 @@ class ColumnDefinition { return this.collation.index === 63; } isAutoIncrement() { - return this._flags & FieldDetail.AUTO_INCREMENT; + return (this._flags & FieldDetail.AUTO_INCREMENT) > 0; } /** @@ -112,6 +112,6 @@ for (let i = 0; i < props.length; i++) { addProperty(props[i], i); } //add alias for mysql2 compatibility -addProperty("schema", 1); +addProperty("schema", 0); module.exports = ColumnDefinition; diff --git a/test/integration/test-metadata.js b/test/integration/test-metadata.js new file mode 100644 index 0000000..58dfa0c --- /dev/null +++ b/test/integration/test-metadata.js @@ -0,0 +1,86 @@ +"use strict"; + +const base = require("../base.js"); +const assert = require("chai").assert; +const Collations = require("../../src/const/collations.js"); +const FieldType = require("../../src/const/field-type"); + +describe("metadata", () => { + + it("result metadata values", function(done) { + shareConn.query( + "CREATE TEMPORARY TABLE metadatatable (id BIGINT not null primary key auto_increment, t varchar(32) UNIQUE, d DECIMAL(10,4) UNSIGNED ZEROFILL) COLLATE='utf8mb4_unicode_ci'" + ); + shareConn.query("SELECT id as id1, t as t1, d as d1 FROM metadatatable as tm", (err, rows, meta) => { + assert.equal(meta.length, 3); + + assert.equal(meta[0].db, 'testn'); + assert.equal(meta[0].schema, 'testn'); + assert.equal(meta[0].table, 'tm'); + assert.equal(meta[0].orgTable, 'metadatatable'); + assert.equal(meta[0].name, 'id1'); + assert.equal(meta[0].orgName, 'id'); + assert.equal(meta[0].collation, Collations.fromName("BINARY")); + assert.equal(meta[0].columnLength, 20); + assert.equal(meta[0].columnType, FieldType.LONGLONG); + assert.equal(meta[0].decimals, 0); + assert.equal(meta[0].isUnsigned(), false); + assert.equal(meta[0].canBeNull(), false); + assert.equal(meta[0].isPrimaryKey(), true); + assert.equal(meta[0].isUniqueKey(), false); + assert.equal(meta[0].isMultipleKey(), false); + assert.equal(meta[0].isBlob(), false); + assert.equal(meta[0].isZeroFill(), false); + assert.equal(meta[0].isBinary(), true); + assert.equal(meta[0].isAutoIncrement(), true); + assert.equal(meta[0].getPrecision(), 20); + assert.equal(meta[0].getDisplaySize(), 20); + + assert.equal(meta[1].db, 'testn'); + assert.equal(meta[1].schema, 'testn'); + assert.equal(meta[1].table, 'tm'); + assert.equal(meta[1].orgTable, 'metadatatable'); + assert.equal(meta[1].name, 't1'); + assert.equal(meta[1].orgName, 't'); + assert.equal(meta[1].collation, Collations.fromName("UTF8MB4_UNICODE_CI")); + assert.equal(meta[1].columnLength, 128); + assert.equal(meta[1].columnType, FieldType.VAR_STRING); + assert.equal(meta[1].decimals, 0); + assert.equal(meta[1].isUnsigned(), false); + assert.equal(meta[1].canBeNull(), true); + assert.equal(meta[1].isPrimaryKey(), false); + assert.equal(meta[1].isUniqueKey(), true); + assert.equal(meta[1].isMultipleKey(), false); + assert.equal(meta[1].isBlob(), false); + assert.equal(meta[1].isZeroFill(), false); + assert.equal(meta[1].isBinary(), false); + assert.equal(meta[1].isAutoIncrement(), false); + assert.equal(meta[1].getPrecision(), 128); + assert.equal(meta[1].getDisplaySize(), 32); + + assert.equal(meta[2].db, 'testn'); + assert.equal(meta[2].schema, 'testn'); + assert.equal(meta[2].table, 'tm'); + assert.equal(meta[2].orgTable, 'metadatatable'); + assert.equal(meta[2].name, 'd1'); + assert.equal(meta[2].orgName, 'd'); + assert.equal(meta[2].collation, Collations.fromName("BINARY")); + assert.equal(meta[2].columnLength, 11); + assert.equal(meta[2].columnType, FieldType.NEWDECIMAL); + assert.equal(meta[2].decimals, 4); + assert.equal(meta[2].isUnsigned(), true); + assert.equal(meta[2].canBeNull(), true); + assert.equal(meta[2].isPrimaryKey(), false); + assert.equal(meta[2].isUniqueKey(), false); + assert.equal(meta[2].isMultipleKey(), false); + assert.equal(meta[2].isBlob(), false); + assert.equal(meta[2].isZeroFill(), true); + assert.equal(meta[2].isBinary(), true); + assert.equal(meta[2].isAutoIncrement(), false); + assert.equal(meta[2].getPrecision(), 11); + assert.equal(meta[2].getDisplaySize(), 11); + done(); + }); + }); + +});