1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-29 08:21:15 +03:00

::writeRow now treats WR_BINARY as int128 for 16 bytes DT only

WF avg uses const & as arguments types

Removed BINARY from DDL parser
This commit is contained in:
Roman Nozdrin
2020-08-28 12:50:29 +00:00
parent 88e106f018
commit f7002e20b5
7 changed files with 42 additions and 102 deletions

View File

@ -47,6 +47,7 @@ using namespace execplan;
using namespace idbdatafile;
#include "emptyvaluemanip.h"
#include "mcs_decimal.h"
namespace WriteEngine
{
@ -1670,8 +1671,6 @@ int ColumnOp::writeRow(Column& curCol, uint64_t totalRow, const RID* rowIdArray,
bDataDirty = true;
}
// This is a awkward way to convert void* and get its element, I just don't have a good solution for that
// How about pVal = valArray + i*curCol.colWidth?
switch (curCol.colType)
{
case WriteEngine::WR_FLOAT :
@ -1735,7 +1734,11 @@ int ColumnOp::writeRow(Column& curCol, uint64_t totalRow, const RID* rowIdArray,
break;
case WriteEngine::WR_BINARY:
if (!bDelete) pVal = &((int128_t*) valArray)[i];
if (!bDelete)
{
if (curCol.colWidth == datatypes::MAXDECIMALWIDTH)
pVal = &((int128_t*) valArray)[i];
}
break;
default :

View File

@ -837,84 +837,22 @@ int WriteEngineWrapper::deleteRow(const TxnID& txnid, const vector<CSCTypesList>
inline void allocateValArray(void*& valArray, ColTupleList::size_type totalRow,
ColType colType, int colWidth)
{
// MCS allocates 8 bytes even for CHARs smaller then 8 bytes.
switch (colType)
{
case WriteEngine::WR_VARBINARY : // treat same as char for now
case WriteEngine::WR_CHAR:
case WriteEngine::WR_BLOB:
case WriteEngine::WR_TEXT:
valArray = (char*) calloc(sizeof(char), totalRow * MAX_COLUMN_BOUNDARY);
valArray = calloc(sizeof(char), totalRow * MAX_COLUMN_BOUNDARY);
break;
case WriteEngine::WR_TOKEN:
valArray = (Token*) calloc(sizeof(Token), totalRow);
valArray = calloc(sizeof(Token), totalRow);
break;
default:
valArray = calloc(totalRow, colWidth);
break;
}
// TODO MCOL-641 is commenting out the switch statement below correct?
#if 0
switch (colType)
{
case WriteEngine::WR_INT:
case WriteEngine::WR_MEDINT:
valArray = (int*) calloc(sizeof(int), totalRow);
break;
case WriteEngine::WR_UINT:
case WriteEngine::WR_UMEDINT:
valArray = (uint32_t*) calloc(sizeof(uint32_t), totalRow);
break;
case WriteEngine::WR_VARBINARY : // treat same as char for now
case WriteEngine::WR_CHAR:
case WriteEngine::WR_BLOB:
case WriteEngine::WR_TEXT:
valArray = (char*) calloc(sizeof(char), totalRow * MAX_COLUMN_BOUNDARY);
break;
case WriteEngine::WR_FLOAT:
valArray = (float*) calloc(sizeof(float), totalRow);
break;
case WriteEngine::WR_DOUBLE:
valArray = (double*) calloc(sizeof(double), totalRow);
break;
case WriteEngine::WR_BYTE:
valArray = (char*) calloc(sizeof(char), totalRow);
break;
case WriteEngine::WR_UBYTE:
valArray = (uint8_t*) calloc(sizeof(uint8_t), totalRow);
break;
case WriteEngine::WR_SHORT:
valArray = (short*) calloc(sizeof(short), totalRow);
break;
case WriteEngine::WR_USHORT:
valArray = (uint16_t*) calloc(sizeof(uint16_t), totalRow);
break;
case WriteEngine::WR_LONGLONG:
valArray = (long long*) calloc(sizeof(long long), totalRow);
break;
case WriteEngine::WR_ULONGLONG:
valArray = (uint64_t*) calloc(sizeof(uint64_t), totalRow);
break;
case WriteEngine::WR_TOKEN:
valArray = (Token*) calloc(sizeof(Token), totalRow);
break;
case WriteEngine::WR_BINARY:
valArray = calloc(totalRow, colWidth);
break;
}
#endif
}
int WriteEngineWrapper::deleteBadRows(const TxnID& txnid, ColStructList& colStructs,