You've already forked mariadb-columnstore-engine
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:
@ -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;
|
||||
|
Reference in New Issue
Block a user