You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-07-29 08:21:15 +03:00
363 lines
9.1 KiB
C++
363 lines
9.1 KiB
C++
/* Copyright (C) 2014 InfiniDB, Inc.
|
|
|
|
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; version 2 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; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
|
MA 02110-1301, USA. */
|
|
|
|
/*******************************************************************************
|
|
* $Id$
|
|
*
|
|
*******************************************************************************/
|
|
#pragma once
|
|
|
|
#include <set>
|
|
|
|
#include <boost/uuid/uuid.hpp>
|
|
#include <boost/uuid/nil_generator.hpp>
|
|
|
|
#include "we_xmlgetter.h"
|
|
#include "we_type.h"
|
|
|
|
namespace boost::program_options
|
|
{
|
|
class options_description;
|
|
}
|
|
|
|
namespace WriteEngine
|
|
{
|
|
class WECmdArgs
|
|
{
|
|
public:
|
|
WECmdArgs(int argc, char** argv);
|
|
virtual ~WECmdArgs();
|
|
|
|
typedef std::vector<unsigned int> VecInts;
|
|
typedef std::vector<std::string> VecArgs;
|
|
|
|
void appTestFunction();
|
|
void parseCmdLineArgs(int argc, char** argv);
|
|
std::string getCpImportCmdLine(bool skipRows);
|
|
void setSchemaAndTableFromJobFile(std::string& JobName);
|
|
void setEnclByAndEscCharFromJobFile(std::string& JobName);
|
|
void usage();
|
|
bool checkForCornerCases();
|
|
void checkForBulkLogDir(const std::string& BulkRoot);
|
|
|
|
void addJobFilesToVector(std::string& JobName);
|
|
void splitConfigFilePerTable(std::string& ConfigName, int tblCount);
|
|
void write2ConfigFiles(std::vector<std::ofstream*>& Files, char* pBuff, int FileIdx);
|
|
void updateWithJobFile(int Idx);
|
|
|
|
std::string getJobFileName();
|
|
std::string getBrmRptFileName();
|
|
std::string getTmpFileDir();
|
|
std::string getBulkRootDir();
|
|
unsigned int getBatchQuantity();
|
|
void checkJobIdCase();
|
|
std::string getFileNameFromPath(const std::string& Path) const;
|
|
std::string getModuleID();
|
|
std::string replaceCharInStr(const std::string& Str, char C, char R);
|
|
|
|
std::string getJobId() const
|
|
{
|
|
return fJobId;
|
|
}
|
|
std::string getOrigJobId() const
|
|
{
|
|
return fOrigJobId;
|
|
}
|
|
std::string getLocFile() const
|
|
{
|
|
return fLocFile;
|
|
}
|
|
int getReadBufSize() const
|
|
{
|
|
return fReadBufSize;
|
|
}
|
|
int getMode() const
|
|
{
|
|
return fMode;
|
|
}
|
|
int getArgMode() const
|
|
{
|
|
return fArgMode;
|
|
}
|
|
bool isHelpMode() const
|
|
{
|
|
return fHelp;
|
|
}
|
|
int getDebugLvl() const
|
|
{
|
|
return fDebugLvl;
|
|
}
|
|
char getEnclChar() const
|
|
{
|
|
return fEnclosedChar;
|
|
}
|
|
char getEscChar() const
|
|
{
|
|
return fEscChar;
|
|
}
|
|
char getDelimChar() const
|
|
{
|
|
return fColDelim;
|
|
}
|
|
int getSkipRows() const
|
|
{
|
|
return fSkipRows;
|
|
}
|
|
ImportDataMode getImportDataMode() const
|
|
{
|
|
return fImportDataMode;
|
|
}
|
|
bool getConsoleLog() const
|
|
{
|
|
return fConsoleLog;
|
|
}
|
|
|
|
bool isCpimportInvokeMode() const
|
|
{
|
|
return (fBlockMode3) ? false : fCpiInvoke;
|
|
}
|
|
bool isQuiteMode() const
|
|
{
|
|
return fQuiteMode;
|
|
}
|
|
void setJobId(const std::string& fJobId)
|
|
{
|
|
this->fJobId = fJobId;
|
|
}
|
|
void setOrigJobId()
|
|
{
|
|
this->fOrigJobId = fJobId;
|
|
}
|
|
void setLocFile(const std::string& fLocFile)
|
|
{
|
|
this->fLocFile = fLocFile;
|
|
}
|
|
void setMode(int fMode)
|
|
{
|
|
this->fMode = fMode;
|
|
}
|
|
void setArgMode(int ArgMode)
|
|
{
|
|
this->fArgMode = ArgMode;
|
|
}
|
|
void setPmFile(const std::string& fPmFile)
|
|
{
|
|
this->fPmFile = fPmFile;
|
|
}
|
|
void setQuiteMode(bool fQuiteMode)
|
|
{
|
|
this->fQuiteMode = fQuiteMode;
|
|
}
|
|
void setVerbose(int fVerbose)
|
|
{
|
|
this->fVerbose = fVerbose;
|
|
}
|
|
void setJobFileName(std::string& JobFileName)
|
|
{
|
|
fJobFile = JobFileName;
|
|
}
|
|
void setBrmRptFileName(std::string& BrmFileName)
|
|
{
|
|
this->fBrmRptFile = BrmFileName;
|
|
}
|
|
void setCpiInvoke(bool CpiInvoke = true)
|
|
{
|
|
this->fCpiInvoke = CpiInvoke;
|
|
}
|
|
void setBlockMode3(bool Block)
|
|
{
|
|
this->fBlockMode3 = Block;
|
|
}
|
|
void setTruncationAsError(bool bTruncationAsError)
|
|
{
|
|
fbTruncationAsError = bTruncationAsError;
|
|
}
|
|
void setUsername(const std::string& username);
|
|
|
|
bool isJobLogOnly() const
|
|
{
|
|
return fJobLogOnly;
|
|
}
|
|
void setJobUUID(const boost::uuids::uuid& jobUUID)
|
|
{
|
|
fUUID = jobUUID;
|
|
}
|
|
bool getConsoleOutput() const
|
|
{
|
|
return fConsoleOutput;
|
|
}
|
|
const std::string& getTimeZone() const
|
|
{
|
|
return fTimeZone;
|
|
}
|
|
|
|
bool getPmStatus(int Id);
|
|
bool str2PmList(std::string& PmList, VecInts& V);
|
|
size_t getPmVecSize() const
|
|
{
|
|
return fPmVec.size();
|
|
}
|
|
void add2PmVec(int PmId)
|
|
{
|
|
fPmVec.push_back(PmId);
|
|
}
|
|
|
|
WECmdArgs::VecInts& getPmVec()
|
|
{
|
|
return fPmVec;
|
|
}
|
|
std::string getPmFile() const
|
|
{
|
|
return fPmFile;
|
|
}
|
|
int getVerbose() const
|
|
{
|
|
return fVerbose;
|
|
}
|
|
std::string getTableName() const
|
|
{
|
|
return fTable;
|
|
}
|
|
std::string getSchemaName() const
|
|
{
|
|
return fSchema;
|
|
}
|
|
bool getTruncationAsError() const
|
|
{
|
|
return fbTruncationAsError;
|
|
}
|
|
|
|
int getMultiTableCount() const
|
|
{
|
|
return fMultiTableCount;
|
|
}
|
|
void setMultiTableCount(int Count)
|
|
{
|
|
fMultiTableCount = Count;
|
|
}
|
|
|
|
bool isS3Import() const
|
|
{
|
|
return !fS3Key.empty();
|
|
}
|
|
std::string getS3Key() const
|
|
{
|
|
return fS3Key;
|
|
}
|
|
std::string getS3Bucket() const
|
|
{
|
|
return fS3Bucket;
|
|
}
|
|
std::string getS3Host() const
|
|
{
|
|
return fS3Host;
|
|
}
|
|
std::string getS3Secret() const
|
|
{
|
|
return fS3Secret;
|
|
}
|
|
std::string getS3Region() const
|
|
{
|
|
return fS3Region;
|
|
}
|
|
std::string getErrorDir() const
|
|
{
|
|
return fErrorDir;
|
|
}
|
|
void setErrorDir(const std::string& fErrorDir)
|
|
{
|
|
this->fErrorDir = fErrorDir;
|
|
}
|
|
std::string& getUsername();
|
|
std::string PrepMode2ListOfFiles(std::string& FileName); // Bug 4342
|
|
void getColumnList(std::set<std::string>& columnList) const;
|
|
|
|
private:
|
|
static void checkIntArg(const std::string& name, long min, long max, int value);
|
|
private: // variables for SplitterApp
|
|
VecArgs fVecArgs;
|
|
VecInts fPmVec;
|
|
|
|
VecArgs fVecJobFiles; // JobFiles splitter from master JobFile
|
|
int fMultiTableCount{0}; // MultiTable count
|
|
VecArgs fColFldsFromJobFile; // List of columns from any job file, that
|
|
// represent fields in the import data
|
|
|
|
std::string fJobId; // JobID
|
|
std::string fOrigJobId; // Original JobID, in case we have to split it
|
|
bool fJobLogOnly{false}; // Job number is only for log filename only
|
|
bool fHelp{false}; // Help mode
|
|
int fMode{1}; // splitter Mode
|
|
int fArgMode{-1}; // Argument mode, dep. on this fMode is decided.
|
|
bool fQuiteMode{true}; // in quite mode or not
|
|
bool fConsoleLog{false}; // Log everything to console - w.r.t cpimport
|
|
int fVerbose{0}; // how many v's
|
|
std::string fPmFile; // FileName at PM
|
|
std::string fPmFilePath; // Path of input file in PM
|
|
std::string fLocFile; // Local file name
|
|
std::string fBrmRptFile; // BRM report file
|
|
std::string fJobPath; // Path to Job File
|
|
std::string fTmpFileDir; // Temp file directory.
|
|
std::string fBulkRoot; // Bulk Root path
|
|
std::string fJobFile; // Job File Name
|
|
std::string fS3Key; // S3 key
|
|
std::string fS3Secret; // S3 Secret
|
|
std::string fS3Bucket; // S3 Bucket
|
|
std::string fS3Host; // S3 Host
|
|
std::string fS3Region; // S3 Region
|
|
|
|
int fBatchQty{10000}; // No. of batch Qty.
|
|
int fNoOfReadThrds{0}; // No. of read buffers
|
|
int fDebugLvl{0}; // Debug level
|
|
int fMaxErrors{MAX_ERRORS_DEFAULT}; // Max allowable errors
|
|
int fReadBufSize{0}; // Read buffer size
|
|
int fIOReadBufSize{0}; // I/O read buffer size
|
|
int fSetBufSize{0}; // Buff size w/setvbuf
|
|
char fColDelim{'|'}; // column delimiter
|
|
char fEnclosedChar{0}; // enclosed by char
|
|
char fEscChar{0}; // esc char
|
|
int fSkipRows{0}; // skip header
|
|
int fNoOfWriteThrds{0}; // No. of write threads
|
|
bool fNullStrMode{false}; // set null string mode - treat null as null
|
|
ImportDataMode fImportDataMode{IMPORT_DATA_TEXT}; // Importing text or binary data
|
|
std::string fPrgmName; // argv[0]
|
|
std::string fSchema; // Schema name - positional parmater
|
|
std::string fTable; // Table name - table name parameter
|
|
|
|
bool fCpiInvoke{false}; // invoke cpimport in mode 3
|
|
bool fBlockMode3{false}; // Do not allow Mode 3
|
|
bool fbTruncationAsError{false}; // Treat string truncation as error
|
|
boost::uuids::uuid fUUID{boost::uuids::nil_generator()()};
|
|
bool fConsoleOutput{true}; // If false, no output to console.
|
|
std::string fTimeZone{"SYSTEM"}; // Timezone to use for TIMESTAMP datatype
|
|
std::string fUsername; // Username of the data files owner
|
|
std::string fErrorDir{MCSLOGDIR "/cpimport/"};
|
|
std::unique_ptr<boost::program_options::options_description> fOptions;
|
|
};
|
|
//----------------------------------------------------------------------
|
|
|
|
inline void WECmdArgs::setUsername(const std::string& username)
|
|
{
|
|
fUsername = username;
|
|
}
|
|
inline std::string& WECmdArgs::getUsername()
|
|
{
|
|
return fUsername;
|
|
}
|
|
|
|
} // namespace WriteEngine
|