1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-08-01 06:46:55 +03:00

feat(runtime)!: MCOL-678 A "GROUP BY ... WITH ROLLUP" support

Adds a special column which helps to differentiate data and rollups of
various depts and a simple logic to row aggregation to add processing of
subtotals.
This commit is contained in:
Sergey Zefirov
2023-09-26 17:01:53 +03:00
committed by GitHub
parent 5013717730
commit 920607520c
20 changed files with 650 additions and 74 deletions

View File

@ -296,6 +296,66 @@ void ConstantColumn::unserialize(messageqcpp::ByteStream& b)
b >> (uint8_t&)fResult.decimalVal.precision;
}
RollupMarkColumn::RollupMarkColumn()
{
fExpressionId = 0x55667788ULL;
fResultType.colDataType = CalpontSystemCatalog::INT;
fResultType.colWidth = 4;
// no-op.
}
RollupMarkColumn::~RollupMarkColumn()
{
// no-op
}
void RollupMarkColumn::serialize(messageqcpp::ByteStream& b) const
{
b << (ObjectReader::id_t)ObjectReader::ROLLUPMARKCOLUMN;
ReturnedColumn::serialize(b);
messageqcpp::ByteStream::octbyte timeZone = fTimeZone;
b << timeZone;
b << static_cast<ByteStream::doublebyte>(fReturnAll);
b << (uint64_t)fResult.intVal;
b << fResult.uintVal;
b << fResult.doubleVal;
b << fResult.longDoubleVal;
b << fResult.floatVal;
b << (uint8_t)fResult.boolVal;
b << fResult.strVal;
b << (uint64_t)fResult.decimalVal.value;
b << fResult.decimalVal.s128Value;
b << (uint8_t)fResult.decimalVal.scale;
b << (uint8_t)fResult.decimalVal.precision;
}
void RollupMarkColumn::unserialize(messageqcpp::ByteStream& b)
{
ObjectReader::checkType(b, ObjectReader::ROLLUPMARKCOLUMN);
ReturnedColumn::unserialize(b);
// uint64_t val;
messageqcpp::ByteStream::octbyte timeZone;
b >> timeZone;
fTimeZone = timeZone;
b >> reinterpret_cast<ByteStream::doublebyte&>(fReturnAll);
b >> (uint64_t&)fResult.intVal;
b >> fResult.uintVal;
b >> fResult.doubleVal;
b >> fResult.longDoubleVal;
b >> fResult.floatVal;
b >> (uint8_t&)fResult.boolVal;
b >> fResult.strVal;
b >> (uint64_t&)fResult.decimalVal.value;
b >> fResult.decimalVal.s128Value;
b >> (uint8_t&)fResult.decimalVal.scale;
b >> (uint8_t&)fResult.decimalVal.precision;
}
static utils::NullString ns;
const utils::NullString& RollupMarkColumn::getStrVal(rowgroup::Row& row, bool& isNull)
{
return ns;
}
bool ConstantColumn::operator==(const ConstantColumn& t) const
{
const ReturnedColumn *rc1, *rc2;