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
MCOL-5021 Add prototype support for the AUX column in CREATE/DROP
DDL commands, single and multi-value INSERTs, cpimport, and DELETE.
This commit is contained in:
@ -265,7 +265,7 @@ int BulkLoad::loadJobInfo(const string& fullName, bool bUseTempJobFile, int argc
|
||||
return rc;
|
||||
}
|
||||
|
||||
const Job& curJob = fJobInfo.getJob();
|
||||
Job& curJob = const_cast<Job&>(fJobInfo.getJob());
|
||||
string logFile, errlogFile;
|
||||
logFile = std::string(MCSLOGDIR) + "/cpimport/" + "Job_" + Convertor::int2Str(curJob.id) + LOG_SUFFIX;
|
||||
errlogFile =
|
||||
@ -314,6 +314,84 @@ int BulkLoad::loadJobInfo(const string& fullName, bool bUseTempJobFile, int argc
|
||||
rc, MSGLVL_ERROR);
|
||||
return rc;
|
||||
}
|
||||
|
||||
// MCOL-5021
|
||||
execplan::CalpontSystemCatalog::OID tableAUXColOid;
|
||||
std::string tblName;
|
||||
std::string curTblName = curJob.jobTableList[i].tblName;
|
||||
string::size_type startName = curTblName.rfind('.');
|
||||
|
||||
if (startName == std::string::npos)
|
||||
tblName.assign(curTblName);
|
||||
else
|
||||
tblName.assign(curTblName.substr(startName + 1));
|
||||
|
||||
execplan::CalpontSystemCatalog::TableName table(curJob.schema, tblName);
|
||||
|
||||
try
|
||||
{
|
||||
boost::shared_ptr<execplan::CalpontSystemCatalog> cat =
|
||||
execplan::CalpontSystemCatalog::makeCalpontSystemCatalog(BULK_SYSCAT_SESSION_ID);
|
||||
tableAUXColOid = cat->tableAUXColumnOID(table);
|
||||
}
|
||||
catch (logging::IDBExcept& ie)
|
||||
{
|
||||
rc = ERR_UNKNOWN;
|
||||
std::ostringstream oss;
|
||||
|
||||
if (ie.errorCode() == logging::ERR_TABLE_NOT_IN_CATALOG)
|
||||
{
|
||||
oss << "Table " << table.toString();
|
||||
oss << "does not exist in the system catalog.";
|
||||
}
|
||||
else
|
||||
{
|
||||
oss << "Error getting AUX column OID for table " << table.toString();
|
||||
oss << " due to: " << ie.what();
|
||||
}
|
||||
|
||||
fLog.logMsg(oss.str(), rc, MSGLVL_ERROR);
|
||||
return rc;
|
||||
}
|
||||
catch(std::exception& ex)
|
||||
{
|
||||
rc = ERR_UNKNOWN;
|
||||
std::ostringstream oss;
|
||||
oss << "Error getting AUX column OID for table " << table.toString();
|
||||
oss << " due to: " << ex.what();
|
||||
fLog.logMsg(oss.str(), rc, MSGLVL_ERROR);
|
||||
return rc;
|
||||
}
|
||||
catch(...)
|
||||
{
|
||||
rc = ERR_UNKNOWN;
|
||||
std::ostringstream oss;
|
||||
oss << "Error getting AUX column OID for table " << table.toString();
|
||||
fLog.logMsg(oss.str(), rc, MSGLVL_ERROR);
|
||||
return rc;
|
||||
}
|
||||
|
||||
// MCOL-5021 Valid AUX column OID for a table is > 3000
|
||||
// Tables that were created before this feature was added will have
|
||||
// tableAUXColOid = 0
|
||||
if (tableAUXColOid > 3000)
|
||||
{
|
||||
JobColumn curColumn;
|
||||
curColumn.colName = "aux";
|
||||
curColumn.mapOid = tableAUXColOid;
|
||||
curColumn.typeName = "unsigned-tinyint";
|
||||
curColumn.width = 1;
|
||||
curColumn.definedWidth = 1;
|
||||
curColumn.compressionType = 2;
|
||||
curColumn.dctnry.fCompressionType = 2;
|
||||
curColumn.fMinIntSat = MIN_UTINYINT;
|
||||
curColumn.fMaxIntSat = MAX_UTINYINT;
|
||||
curColumn.fWithDefault = true;
|
||||
curColumn.fDefaultUInt = 1;
|
||||
curJob.jobTableList[i].colList.push_back(curColumn);
|
||||
JobFieldRef fieldRef(BULK_FLDCOL_COLUMN_DEFAULT, curJob.jobTableList[i].colList.size() - 1);
|
||||
curJob.jobTableList[i].fFldRefs.push_back(fieldRef);
|
||||
}
|
||||
}
|
||||
|
||||
// Validate that the user's xml file has been regenerated since the
|
||||
|
Reference in New Issue
Block a user