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

@ -93,6 +93,7 @@ CalpontSelectExecutionPlan::CalpontSelectExecutionPlan(const int location)
, // 100MB mem usage for disk based join,
fUMMemLimit(numeric_limits<int64_t>::max())
, fIsDML(false)
, fWithRollup(false)
{
fUuid = QueryTeleClient::genUUID();
}
@ -100,7 +101,7 @@ CalpontSelectExecutionPlan::CalpontSelectExecutionPlan(const int location)
CalpontSelectExecutionPlan::CalpontSelectExecutionPlan(
const ReturnedColumnList& returnedCols, ParseTree* filters, const SelectList& subSelects,
const GroupByColumnList& groupByCols, ParseTree* having, const OrderByColumnList& orderByCols,
const string alias, const int location, const bool dependent)
const string alias, const int location, const bool dependent, const bool withRollup)
: fReturnedCols(returnedCols)
, fFilters(filters)
, fSubSelects(subSelects)
@ -111,7 +112,7 @@ CalpontSelectExecutionPlan::CalpontSelectExecutionPlan(
, fLocation(location)
, fDependent(dependent)
, fPriority(querystats::DEFAULT_USER_PRIORITY_LEVEL)
, fWithRollup(withRollup)
{
fUuid = QueryTeleClient::genUUID();
}
@ -119,6 +120,7 @@ CalpontSelectExecutionPlan::CalpontSelectExecutionPlan(
CalpontSelectExecutionPlan::CalpontSelectExecutionPlan(string data)
: fData(data)
, fPriority(querystats::DEFAULT_USER_PRIORITY_LEVEL)
, fWithRollup(false)
{
fUuid = QueryTeleClient::genUUID();
}
@ -470,6 +472,7 @@ void CalpontSelectExecutionPlan::serialize(messageqcpp::ByteStream& b) const
messageqcpp::ByteStream::octbyte timeZone = fTimeZone;
b << timeZone;
b << fPron;
b << (uint8_t)fWithRollup;
}
void CalpontSelectExecutionPlan::unserialize(messageqcpp::ByteStream& b)
@ -672,6 +675,8 @@ void CalpontSelectExecutionPlan::unserialize(messageqcpp::ByteStream& b)
fTimeZone = timeZone;
b >> fPron;
utils::Pron::instance().pron(fPron);
b >> tmp8;
fWithRollup = tmp8;
}
bool CalpontSelectExecutionPlan::operator==(const CalpontSelectExecutionPlan& t) const