nmig/migration/fmtp/Conversion.js

84 lines
4 KiB
JavaScript

/*
* This file is a part of "NMIG" - the database migration tool.
*
* Copyright 2016 Anatoly Khaytovich <anatolyuss@gmail.com>
*
* This program is free software= you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License.
*
* This program is distributed in the hope that it will be useful;
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program (please see the "LICENSE.md" file).
* If not; see <http=//www.gnu.org/licenses/gpl.txt>.
*
* @author Anatoly Khaytovich <anatolyuss@gmail.com>
*/
'use strict';
const isIntNumeric = require('./IntegerValidator');
/**
* Constructor.
*
* @param {Object} config
*/
module.exports = function Conversion(config) {
this._config = config;
this._sourceConString = this._config.source;
this._targetConString = this._config.target;
this._tempDirPath = this._config.tempDirPath;
this._logsDirPath = this._config.logsDirPath;
this._dataTypesMapAddr = __dirname + '/DataTypesMap.json';
this._allLogsPath = this._logsDirPath + '/all.log';
this._errorLogsPath = this._logsDirPath + '/errors-only.log';
this._notCreatedViewsPath = this._logsDirPath + '/not_created_views';
this._noVacuum = this._config.no_vacuum;
this._excludeTables = this._config.exclude_tables;
this._timeBegin = new Date();
this._encoding = this._config.encoding === undefined ? 'utf8' : this._config.encoding;
this._dataChunkSize = this._config.data_chunk_size === undefined ? 1 : +this._config.data_chunk_size;
this._dataChunkSize = this._dataChunkSize < 1 ? 1 : this._dataChunkSize;
this._0777 = '0777';
this._mysql = null;
this._pg = null;
this._tablesToMigrate = [];
this._viewsToMigrate = [];
this._tablesCnt = 0;
this._viewsCnt = 0;
this._dataPool = [];
this._dicTables = Object.create(null);
this._mySqlDbName = this._sourceConString.database;
this._schema = this._config.schema === undefined ||
this._config.schema === ''
? this._mySqlDbName
: this._config.schema;
this._maxPoolSizeSource = this._config.max_pool_size_source !== undefined &&
isIntNumeric(this._config.max_pool_size_source)
? +this._config.max_pool_size_source
: 10;
this._maxPoolSizeTarget = this._config.max_pool_size_target !== undefined &&
isIntNumeric(this._config.max_pool_size_target)
? +this._config.max_pool_size_target
: 10;
this._maxPoolSizeSource = this._maxPoolSizeSource > 0 ? this._maxPoolSizeSource : 10;
this._maxPoolSizeTarget = this._maxPoolSizeTarget > 0 ? this._maxPoolSizeTarget : 10;
this._pipeWidth = this._config.pipe_width !== undefined &&
isIntNumeric(this._config.pipe_width)
? +this._config.pipe_width
: this._maxPoolSizeTarget;
this._pipeWidth = this._pipeWidth > this._maxPoolSizeTarget ? this._maxPoolSizeTarget : this._pipeWidth;
this._loaderMaxOldSpaceSize = this._config.loader_max_old_space_size;
this._loaderMaxOldSpaceSize = isIntNumeric(this._loaderMaxOldSpaceSize) ? this._loaderMaxOldSpaceSize : 'DEFAULT';
this._migrateOnlyData = this._config.migrate_only_data;
};