mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-04-20 09:07:44 +03:00
159 lines
5.1 KiB
C++
159 lines
5.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: we_xmljob.h 4450 2013-01-21 14:13:24Z rdempsey $
|
|
*
|
|
*******************************************************************************/
|
|
/** @file */
|
|
|
|
#pragma once
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
#include <time.h>
|
|
#include <boost/filesystem/path.hpp>
|
|
|
|
#include "we_xmlop.h"
|
|
#include "calpontsystemcatalog.h"
|
|
|
|
#define EXPORT
|
|
|
|
/** Namespace WriteEngine */
|
|
namespace WriteEngine
|
|
{
|
|
class Log;
|
|
struct JobColumn;
|
|
|
|
/** @brief Reads Job XML file and loads into a "Job" object for use by
|
|
* cpimport.bin.
|
|
*
|
|
*/
|
|
class XMLJob : public XMLOp
|
|
{
|
|
public:
|
|
/**
|
|
* @brief Constructor
|
|
*/
|
|
EXPORT XMLJob();
|
|
|
|
/**
|
|
* @brief Default Destructor
|
|
*/
|
|
EXPORT ~XMLJob();
|
|
|
|
/**
|
|
* @brief Utility to generate a full path name for a Job XML file name
|
|
* @param sXMLJobDir Command line override for complete Job directory path
|
|
* @param jobDIr Job subdirectory under default <BulkRoot> path
|
|
* @param jobId Job ID
|
|
* @param bTempFile Are we creating a temporary Job XML File name
|
|
* @param schmaName If temp file, this is schema name to use
|
|
* @param tableName If temp file, this is the table name to use
|
|
* @param xmlDirPath The complete Job XML file path that is constructed
|
|
* @param errMsg Error message if return value is not NO_ERROR
|
|
*/
|
|
EXPORT static int genJobXMLFileName(const std::string& sXMLJobDir, const std::string& jobDir,
|
|
const std::string& jobId, bool bTempFile, const std::string& schemaName,
|
|
const std::string& tableName, boost::filesystem::path& xmlDirPath,
|
|
std::string& errMsg, const std::string& tableOIDStr);
|
|
|
|
/**
|
|
* @brief Get job structure
|
|
*/
|
|
const Job& getJob() const
|
|
{
|
|
return fJob;
|
|
}
|
|
|
|
/**
|
|
* @brief Get reference to job structure
|
|
*/
|
|
Job& getJob()
|
|
{
|
|
return fJob;
|
|
}
|
|
|
|
/**
|
|
* @brief Load job information
|
|
* @param fileName Name of Job XML file to be read
|
|
* @param bTempFile Are we creating a temporary Job XML File that will be
|
|
* deleted by the destructor
|
|
* @param bValidateColumnList Validate that all columns have an XML tag
|
|
* @param errMsg Error message if return value is not NO_ERROR
|
|
*/
|
|
EXPORT int loadJobXmlFile(const std::string& fileName, bool bTempFile, bool bValidateColumnList,
|
|
std::string& errMsg);
|
|
|
|
/**
|
|
* @brief Print job related information
|
|
* @param logger Log object that is to receive the print output
|
|
*/
|
|
EXPORT void printJobInfo(Log& logger) const;
|
|
|
|
/**
|
|
* @brief Print abbreviated job related information
|
|
* @param logger Log object that is to receive the print output
|
|
*/
|
|
EXPORT void printJobInfoBrief(Log& logger) const;
|
|
|
|
/**
|
|
* @brief Process node
|
|
* @param pParentNode Node to be parsed from XML
|
|
*/
|
|
EXPORT bool processNode(xmlNode* pParentNode);
|
|
|
|
/**
|
|
* @brief Set timezone
|
|
*/
|
|
void setTimeZone(long timeZone)
|
|
{
|
|
fTimeZone = timeZone;
|
|
}
|
|
|
|
private:
|
|
void setJobData(xmlNode* pNode, const xmlTag tag, bool bExpectContent, XML_DTYPE tagType);
|
|
void setJobDataColumn(xmlNode* pNode, bool bDefaultCol);
|
|
void setJobDataIgnoreField();
|
|
void setJobDataTable(xmlNode* pNode);
|
|
void setReadBuffers(xmlNode* pNode);
|
|
void setSchema(xmlNode* pNode);
|
|
void initSatLimits(JobColumn& column) const;
|
|
void fillInXMLDataAsLoaded(execplan::CalpontSystemCatalog::RIDList& colRidList);
|
|
void fillInXMLDataNotNullDefault(const std::string& fullTblName,
|
|
execplan::CalpontSystemCatalog::ColType& colType, JobColumn& col);
|
|
void validateAllColumnsHaveTags(const execplan::CalpontSystemCatalog::RIDList& colRidList) const;
|
|
void postProcessTableNode();
|
|
static int createTempJobDir(const std::string& xmlFilePath, std::string& errMsg);
|
|
|
|
Job fJob; // current job xml
|
|
|
|
DebugLevel fDebugLevel; // internal use debug level
|
|
bool fDeleteTempFile; // delete tmp jobfile in destructor
|
|
std::string fJobFileName; // job file name
|
|
JobColList fDefaultColumns; // temporary list of default cols
|
|
// for table node being processed
|
|
bool fValidateColList; // Validate all cols have XML tag
|
|
long fTimeZone; // Timezone offset (in seconds) relative to UTC,
|
|
// to use for TIMESTAMP data type. For example,
|
|
// for EST which is UTC-5:00, offset will be -18000s.
|
|
};
|
|
|
|
} // namespace WriteEngine
|
|
|
|
#undef EXPORT
|