diff --git a/lib/dialects/abstract/query.js b/lib/dialects/abstract/query.js index 9bbb3e4e6845..6cd6b8b0289d 100755 --- a/lib/dialects/abstract/query.js +++ b/lib/dialects/abstract/query.js @@ -248,7 +248,7 @@ class AbstractQuery { if (this.options.fieldMap) { const fieldMap = this.options.fieldMap; results = results.map(result => _.reduce(fieldMap, (result, name, field) => { - if (result[field] !== undefined) { + if (result[field] !== undefined && name !== field) { result[name] = result[field]; delete result[field]; } diff --git a/test/integration/sequelize.test.js b/test/integration/sequelize.test.js index 37559b438e02..cdca083c3d4a 100755 --- a/test/integration/sequelize.test.js +++ b/test/integration/sequelize.test.js @@ -468,6 +468,18 @@ describe(Support.getTestDialectTeaser('Sequelize'), () => { }); }); + it('keeps field names that are mapped to the same name', function() { + return this.sequelize.query(this.insertQuery).then(() => { + return this.sequelize.query(`SELECT * FROM ${qq(this.User.tableName)};`, { + type: 'SELECT', + fieldMap: { username: 'username', email_address: 'email' } + }); + }).then(users => { + expect(users[0].username).to.be.equal('john'); + expect(users[0].email).to.be.equal('john@gmail.com'); + }); + }); + it('reject if `values` and `options.replacements` are both passed', function() { return this.sequelize.query({ query: 'select ? as foo, ? as bar', values: [1, 2] }, { raw: true, replacements: [1, 2] }) .should.be.rejectedWith(Error, 'Both `sql.values` and `options.replacements` cannot be set at the same time');