123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- 'use strict';
- exports.__esModule = true;
- var _typeof2 = require('babel-runtime/helpers/typeof');
- var _typeof3 = _interopRequireDefault(_typeof2);
- var _assign2 = require('lodash/assign');
- var _assign3 = _interopRequireDefault(_assign2);
- var _flatten2 = require('lodash/flatten');
- var _flatten3 = _interopRequireDefault(_flatten2);
- var _chunk2 = require('lodash/chunk');
- var _chunk3 = _interopRequireDefault(_chunk2);
- var _isArray2 = require('lodash/isArray');
- var _isArray3 = _interopRequireDefault(_isArray2);
- var _isNumber2 = require('lodash/isNumber');
- var _isNumber3 = _interopRequireDefault(_isNumber2);
- exports.default = batchInsert;
- var _bluebird = require('bluebird');
- var _bluebird2 = _interopRequireDefault(_bluebird);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- function batchInsert(client, tableName, batch) {
- var chunkSize = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1000;
- var _returning = void 0;
- var autoTransaction = true;
- var transaction = null;
- var getTransaction = function getTransaction() {
- return new _bluebird2.default(function (resolve, reject) {
- if (transaction) {
- autoTransaction = false;
- return resolve(transaction);
- }
- autoTransaction = true;
- client.transaction(resolve).catch(reject);
- });
- };
- var wrapper = (0, _assign3.default)(new _bluebird2.default(function (resolve, reject) {
- var chunks = (0, _chunk3.default)(batch, chunkSize);
- if (!(0, _isNumber3.default)(chunkSize) || chunkSize < 1) {
- return reject(new TypeError('Invalid chunkSize: ' + chunkSize));
- }
- if (!(0, _isArray3.default)(batch)) {
- return reject(new TypeError('Invalid batch: Expected array, got ' + (typeof batch === 'undefined' ? 'undefined' : (0, _typeof3.default)(batch))));
- }
- //Next tick to ensure wrapper functions are called if needed
- return _bluebird2.default.delay(1).then(getTransaction).then(function (tr) {
- return _bluebird2.default.mapSeries(chunks, function (items) {
- return tr(tableName).insert(items, _returning);
- }).then(function (result) {
- result = (0, _flatten3.default)(result || []);
- if (autoTransaction) {
- //TODO: -- Oracle tr.commit() does not return a 'thenable' !? Ugly hack for now.
- return (tr.commit(result) || _bluebird2.default.resolve()).then(function () {
- return result;
- });
- }
- return result;
- }).catch(function (error) {
- if (autoTransaction) {
- return tr.rollback(error).then(function () {
- return _bluebird2.default.reject(error);
- });
- }
- return _bluebird2.default.reject(error);
- });
- }).then(resolve).catch(reject);
- }), {
- returning: function returning(columns) {
- _returning = columns;
- return this;
- },
- transacting: function transacting(tr) {
- transaction = tr;
- return this;
- }
- });
- return wrapper;
- }
- module.exports = exports['default'];
|