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-641 atoi128 now correctly processes decimal point and - signs.
There are multiple overloaded version of the low level DML write methods to push down CSC column type. WE needs the type to convert values correctly. Replaced WE_INT128 with CSC data type that is more informative. Removed commented and obsolete code. Replaced switch-case blocks with oneliners.
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/* Copyright (C) 2014 InfiniDB, Inc.
|
||||
Copyright (C) 2016 MariaDB Corporation
|
||||
Copyright (C) 2016-2019 MariaDB Corporation
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
@ -116,6 +116,7 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
RowList rows = tablePtr->get_RowList();
|
||||
|
||||
WriteEngine::ColStructList colStructs;
|
||||
WriteEngine::CSCTypesList cscColTypes;
|
||||
WriteEngine::DctnryStructList dctnryStructList;
|
||||
WriteEngine::DctnryValueList dctnryValueList;
|
||||
WriteEngine::ColValueList colValuesList;
|
||||
@ -139,12 +140,18 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
{
|
||||
Row* rowPtr = rows.at(0);
|
||||
ColumnList columns = rowPtr->get_ColumnList();
|
||||
unsigned int numcols = rowPtr->get_NumberOfColumns();
|
||||
cscColTypes.reserve(numcols);
|
||||
// WIP
|
||||
// We presume that DictCols number is low
|
||||
colStructs.reserve(numcols);
|
||||
ColumnList::const_iterator column_iterator = columns.begin();
|
||||
|
||||
while (column_iterator != columns.end())
|
||||
{
|
||||
DMLColumn* columnPtr = *column_iterator;
|
||||
tableColName.column = columnPtr->get_Name();
|
||||
// WIP MCOL-641 replace with getColRidsOidsTypes()
|
||||
CalpontSystemCatalog::ROPair roPair = systemCatalogPtr->columnRID(tableColName);
|
||||
|
||||
CalpontSystemCatalog::OID oid = systemCatalogPtr->lookupOID(tableColName);
|
||||
@ -152,6 +159,7 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
CalpontSystemCatalog::ColType colType;
|
||||
colType = systemCatalogPtr->colType(oid);
|
||||
|
||||
cscColTypes.push_back(colType);
|
||||
WriteEngine::ColStruct colStruct;
|
||||
colStruct.fColDbRoot = dbroot;
|
||||
WriteEngine::DctnryStruct dctnryStruct;
|
||||
@ -163,6 +171,7 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
// Token
|
||||
if ( isDictCol(colType) )
|
||||
{
|
||||
// WIP Hardcoded value
|
||||
colStruct.colWidth = 8;
|
||||
colStruct.tokenFlag = true;
|
||||
}
|
||||
@ -194,7 +203,6 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
++column_iterator;
|
||||
}
|
||||
|
||||
unsigned int numcols = rowPtr->get_NumberOfColumns();
|
||||
std::string tmpStr("");
|
||||
|
||||
for (unsigned int i = 0; i < numcols; i++)
|
||||
@ -210,6 +218,7 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
const DMLColumn* columnPtr = rowPtr->get_ColumnAt(i);
|
||||
|
||||
tableColName.column = columnPtr->get_Name();
|
||||
// WIP MCOL-641 remove these calls
|
||||
CalpontSystemCatalog::OID oid = systemCatalogPtr->lookupOID(tableColName);
|
||||
|
||||
CalpontSystemCatalog::ColType colType;
|
||||
@ -303,6 +312,8 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
{
|
||||
try
|
||||
{
|
||||
// WIP What if we combine this and previous loop and fail
|
||||
// after get nextAIValue ?
|
||||
nextVal = systemCatalogPtr->nextAutoIncrValue(tableName);
|
||||
fDbrm.startAISequence(oid, nextVal, colType.colWidth, colType.colDataType);
|
||||
}
|
||||
@ -359,6 +370,8 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
|
||||
try
|
||||
{
|
||||
// WIP
|
||||
// make convertColumnData a template
|
||||
datavalue = DataConvert::convertColumnData(colType, indata, pushWarning, insertPkg.get_TimeZone(), isNULL, false, false);
|
||||
}
|
||||
catch (exception&)
|
||||
@ -412,6 +425,7 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
|
||||
// call the write engine to write the rows
|
||||
int error = NO_ERROR;
|
||||
// WIP
|
||||
fWEWrapper.setDebugLevel(WriteEngine::DEBUG_3);
|
||||
cout << "inserting a row with transaction id " << txnid.id << endl;
|
||||
fWEWrapper.setIsInsert(true);
|
||||
@ -420,6 +434,7 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
//For hdfs use only
|
||||
uint32_t tblOid = tableRoPair.objnum;
|
||||
|
||||
// WIP are we saving HDFS?
|
||||
if (idbdatafile::IDBPolicy::useHdfs())
|
||||
{
|
||||
|
||||
@ -523,7 +538,7 @@ uint8_t WE_DMLCommandProc::processSingleInsert(messageqcpp::ByteStream& bs, std:
|
||||
if (colValuesList[0].size() > 0)
|
||||
{
|
||||
if (NO_ERROR !=
|
||||
(error = fWEWrapper.insertColumnRec_Single(txnid.id, colStructs, colValuesList, dctnryStructList, dicStringList, tableRoPair.objnum)))
|
||||
(error = fWEWrapper.insertColumnRec_Single(txnid.id, cscColTypes, colStructs, colValuesList, dctnryStructList, dicStringList, tableRoPair.objnum)))
|
||||
{
|
||||
if (error == ERR_BRM_DEAD_LOCK)
|
||||
{
|
||||
|
Reference in New Issue
Block a user