diff --git a/lib/dialects/abstract/query.js b/lib/dialects/abstract/query.js index b60995bb31a4..76be2408c421 100755 --- a/lib/dialects/abstract/query.js +++ b/lib/dialects/abstract/query.js @@ -6,6 +6,22 @@ const SqlString = require('../../sql-string'); const Dot = require('dottie'); const QueryTypes = require('../../query-types'); +const NODE_ENV = process.env.NODE_ENV?.toLowerCase() ?? ''; +const IN_DEVELOPMENT = NODE_ENV === 'development'; + +function identity(result) { + return result; +} +const processRawRequeryResult = IN_DEVELOPMENT ? processRawRequeryResultInDevelopment : identity; + +function processRawRequeryResultInDevelopment(result) { + return Object.freeze(Object.assign({}, result)); +} + +function processRawRequeryResultWithTransforms(result) { + return Dot.transform(processRawRequeryResult(result)); +} + class AbstractQuery { /** @@ -264,21 +280,11 @@ class AbstractQuery { } // Raw queries if (this.options.raw) { - result = results.map(result => { - let o = {}; - - for (const key in result) { - if (result.hasOwnProperty(key)) { - o[key] = result[key]; - } - } - - if (this.options.nest) { - o = Dot.transform(o); - } - - return o; - }); + const cb = this.options.nest ? processRawRequeryResultWithTransforms : processRawRequeryResult; + result = []; + for (let i = 0; i < results.length; i++) { + result.push(cb(results[i])); + } // Queries with include } else if (this.options.hasJoin === true) { results = AbstractQuery._groupJoinData(results, {