UNPKG

objection

Version:
69 lines (48 loc) 6.42 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (builder) { // Postgres is the only db engine that returns identifiers of all inserted rows. Therefore // we can insert batches only with postgres. var batchSize = (0, _dbUtils.isPostgres)(builder.knex()) ? POSTGRES_INSERT_BATCH_SIZE : 1; return function (tableInsertion) { var inputs = []; var others = []; var queries = []; var insertQuery = tableInsertion.modelClass.query().childQueryOf(builder); for (var i = 0, l = tableInsertion.models.length; i < l; ++i) { var model = tableInsertion.models[i]; // We need to validate here since at this point the models should no longer contain any special properties. var json = model.$validate(); // Set the return value back to model in case defaults were set. model.$set(json); if (tableInsertion.isInputModel[i]) { inputs.push(model); } else { others.push(model); } } batchInsert(inputs, insertQuery.clone().copyFrom(builder, /returning/), batchSize, queries); batchInsert(others, insertQuery.clone(), batchSize, queries); return _bluebird2.default.all(queries); }; }; var _lodash = require('lodash'); var _lodash2 = _interopRequireDefault(_lodash); var _bluebird = require('bluebird'); var _bluebird2 = _interopRequireDefault(_bluebird); var _dbUtils = require('../../utils/dbUtils'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var POSTGRES_INSERT_BATCH_SIZE = 100; /** * @param {QueryBuilder} builder * @return {function(TableInsertion)} */ function batchInsert(models, queryBuilder, batchSize, queries) { var batches = _lodash2.default.chunk(models, batchSize); for (var i = 0, l = batches.length; i < l; ++i) { queries.push(queryBuilder.clone().insert(batches[i])); } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluc2VydGVyLmpzIl0sIm5hbWVzIjpbImJ1aWxkZXIiLCJiYXRjaFNpemUiLCJrbmV4IiwiUE9TVEdSRVNfSU5TRVJUX0JBVENIX1NJWkUiLCJ0YWJsZUluc2VydGlvbiIsImlucHV0cyIsIm90aGVycyIsInF1ZXJpZXMiLCJpbnNlcnRRdWVyeSIsIm1vZGVsQ2xhc3MiLCJxdWVyeSIsImNoaWxkUXVlcnlPZiIsImkiLCJsIiwibW9kZWxzIiwibGVuZ3RoIiwibW9kZWwiLCJqc29uIiwiJHZhbGlkYXRlIiwiJHNldCIsImlzSW5wdXRNb2RlbCIsInB1c2giLCJiYXRjaEluc2VydCIsImNsb25lIiwiY29weUZyb20iLCJhbGwiLCJxdWVyeUJ1aWxkZXIiLCJiYXRjaGVzIiwiY2h1bmsiLCJpbnNlcnQiXSwibWFwcGluZ3MiOiI7Ozs7OztrQkFVZSxVQUFVQSxPQUFWLEVBQW1CO0FBQ2hDO0FBQ0E7QUFDQSxNQUFNQyxZQUFZLHlCQUFXRCxRQUFRRSxJQUFSLEVBQVgsSUFBNkJDLDBCQUE3QixHQUEwRCxDQUE1RTs7QUFFQSxTQUFPLFVBQUNDLGNBQUQsRUFBb0I7QUFDekIsUUFBTUMsU0FBUyxFQUFmO0FBQ0EsUUFBTUMsU0FBUyxFQUFmO0FBQ0EsUUFBTUMsVUFBVSxFQUFoQjs7QUFFQSxRQUFJQyxjQUFjSixlQUFlSyxVQUFmLENBQ2ZDLEtBRGUsR0FFZkMsWUFGZSxDQUVGWCxPQUZFLENBQWxCOztBQUlBLFNBQUssSUFBSVksSUFBSSxDQUFSLEVBQVdDLElBQUlULGVBQWVVLE1BQWYsQ0FBc0JDLE1BQTFDLEVBQWtESCxJQUFJQyxDQUF0RCxFQUF5RCxFQUFFRCxDQUEzRCxFQUE4RDtBQUM1RCxVQUFNSSxRQUFRWixlQUFlVSxNQUFmLENBQXNCRixDQUF0QixDQUFkOztBQUVBO0FBQ0EsVUFBTUssT0FBT0QsTUFBTUUsU0FBTixFQUFiOztBQUVBO0FBQ0FGLFlBQU1HLElBQU4sQ0FBV0YsSUFBWDs7QUFFQSxVQUFJYixlQUFlZ0IsWUFBZixDQUE0QlIsQ0FBNUIsQ0FBSixFQUFvQztBQUNsQ1AsZUFBT2dCLElBQVAsQ0FBWUwsS0FBWjtBQUNELE9BRkQsTUFFTztBQUNMVixlQUFPZSxJQUFQLENBQVlMLEtBQVo7QUFDRDtBQUNGOztBQUVETSxnQkFBWWpCLE1BQVosRUFBb0JHLFlBQVllLEtBQVosR0FBb0JDLFFBQXBCLENBQTZCeEIsT0FBN0IsRUFBc0MsV0FBdEMsQ0FBcEIsRUFBd0VDLFNBQXhFLEVBQW1GTSxPQUFuRjtBQUNBZSxnQkFBWWhCLE1BQVosRUFBb0JFLFlBQVllLEtBQVosRUFBcEIsRUFBeUN0QixTQUF6QyxFQUFvRE0sT0FBcEQ7O0FBRUEsV0FBTyxtQkFBUWtCLEdBQVIsQ0FBWWxCLE9BQVosQ0FBUDtBQUNELEdBN0JEO0FBOEJELEM7O0FBN0NEOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUVBLElBQU1KLDZCQUE2QixHQUFuQzs7QUFFQTs7Ozs7O0FBeUNBLFNBQVNtQixXQUFULENBQXFCUixNQUFyQixFQUE2QlksWUFBN0IsRUFBMkN6QixTQUEzQyxFQUFzRE0sT0FBdEQsRUFBK0Q7QUFDN0QsTUFBTW9CLFVBQVUsaUJBQUVDLEtBQUYsQ0FBUWQsTUFBUixFQUFnQmIsU0FBaEIsQ0FBaEI7O0FBRUEsT0FBSyxJQUFJVyxJQUFJLENBQVIsRUFBV0MsSUFBSWMsUUFBUVosTUFBNUIsRUFBb0NILElBQUlDLENBQXhDLEVBQTJDLEVBQUVELENBQTdDLEVBQWdEO0FBQzlDTCxZQUFRYyxJQUFSLENBQWFLLGFBQWFILEtBQWIsR0FBcUJNLE1BQXJCLENBQTRCRixRQUFRZixDQUFSLENBQTVCLENBQWI7QUFDRDtBQUNGIiwiZmlsZSI6Imluc2VydGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBQcm9taXNlIGZyb20gJ2JsdWViaXJkJztcbmltcG9ydCB7aXNQb3N0Z3Jlc30gZnJvbSAnLi4vLi4vdXRpbHMvZGJVdGlscyc7XG5cbmNvbnN0IFBPU1RHUkVTX0lOU0VSVF9CQVRDSF9TSVpFID0gMTAwO1xuXG4vKipcbiAqIEBwYXJhbSB7UXVlcnlCdWlsZGVyfSBidWlsZGVyXG4gKiBAcmV0dXJuIHtmdW5jdGlvbihUYWJsZUluc2VydGlvbil9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChidWlsZGVyKSB7XG4gIC8vIFBvc3RncmVzIGlzIHRoZSBvbmx5IGRiIGVuZ2luZSB0aGF0IHJldHVybnMgaWRlbnRpZmllcnMgb2YgYWxsIGluc2VydGVkIHJvd3MuIFRoZXJlZm9yZVxuICAvLyB3ZSBjYW4gaW5zZXJ0IGJhdGNoZXMgb25seSB3aXRoIHBvc3RncmVzLlxuICBjb25zdCBiYXRjaFNpemUgPSBpc1Bvc3RncmVzKGJ1aWxkZXIua25leCgpKSA/IFBPU1RHUkVTX0lOU0VSVF9CQVRDSF9TSVpFIDogMTtcblxuICByZXR1cm4gKHRhYmxlSW5zZXJ0aW9uKSA9PiB7XG4gICAgY29uc3QgaW5wdXRzID0gW107XG4gICAgY29uc3Qgb3RoZXJzID0gW107XG4gICAgY29uc3QgcXVlcmllcyA9IFtdO1xuXG4gICAgbGV0IGluc2VydFF1ZXJ5ID0gdGFibGVJbnNlcnRpb24ubW9kZWxDbGFzc1xuICAgICAgLnF1ZXJ5KClcbiAgICAgIC5jaGlsZFF1ZXJ5T2YoYnVpbGRlcik7XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHRhYmxlSW5zZXJ0aW9uLm1vZGVscy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gdGFibGVJbnNlcnRpb24ubW9kZWxzW2ldO1xuXG4gICAgICAvLyBXZSBuZWVkIHRvIHZhbGlkYXRlIGhlcmUgc2luY2UgYXQgdGhpcyBwb2ludCB0aGUgbW9kZWxzIHNob3VsZCBubyBsb25nZXIgY29udGFpbiBhbnkgc3BlY2lhbCBwcm9wZXJ0aWVzLlxuICAgICAgY29uc3QganNvbiA9IG1vZGVsLiR2YWxpZGF0ZSgpO1xuXG4gICAgICAvLyBTZXQgdGhlIHJldHVybiB2YWx1ZSBiYWNrIHRvIG1vZGVsIGluIGNhc2UgZGVmYXVsdHMgd2VyZSBzZXQuXG4gICAgICBtb2RlbC4kc2V0KGpzb24pO1xuXG4gICAgICBpZiAodGFibGVJbnNlcnRpb24uaXNJbnB1dE1vZGVsW2ldKSB7XG4gICAgICAgIGlucHV0cy5wdXNoKG1vZGVsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG90aGVycy5wdXNoKG1vZGVsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBiYXRjaEluc2VydChpbnB1dHMsIGluc2VydFF1ZXJ5LmNsb25lKCkuY29weUZyb20oYnVpbGRlciwgL3JldHVybmluZy8pLCBiYXRjaFNpemUsIHF1ZXJpZXMpO1xuICAgIGJhdGNoSW5zZXJ0KG90aGVycywgaW5zZXJ0UXVlcnkuY2xvbmUoKSwgYmF0Y2hTaXplLCBxdWVyaWVzKTtcblxuICAgIHJldHVybiBQcm9taXNlLmFsbChxdWVyaWVzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYmF0Y2hJbnNlcnQobW9kZWxzLCBxdWVyeUJ1aWxkZXIsIGJhdGNoU2l6ZSwgcXVlcmllcykge1xuICBjb25zdCBiYXRjaGVzID0gXy5jaHVuayhtb2RlbHMsIGJhdGNoU2l6ZSk7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBiYXRjaGVzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIHF1ZXJpZXMucHVzaChxdWVyeUJ1aWxkZXIuY2xvbmUoKS5pbnNlcnQoYmF0Y2hlc1tpXSkpO1xuICB9XG59XG5cbiJdfQ==