You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-10-30 07:25:34 +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
 |