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

MCOL-1201 fix some regressions

This commit is contained in:
David Hall
2018-06-06 10:34:35 -05:00
parent 554e31b4ec
commit 5b3db71c8f
2 changed files with 57 additions and 21 deletions

View File

@@ -1505,10 +1505,17 @@ void TupleAggregateStep::prep1PhaseAggregate(
typeAgg.push_back(typeProj[colProj]); typeAgg.push_back(typeProj[colProj]);
widthAgg.push_back(width[colProj]); widthAgg.push_back(width[colProj]);
// If the param is const // If the param is const
ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get()); if (udafc)
if (cc)
{ {
funct->fpConstCol = udafc->aggParms()[udafcParamIdx]; ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get());
if (cc)
{
funct->fpConstCol = udafc->aggParms()[udafcParamIdx];
}
}
else
{
throw QueryDataExcept("prep1PhaseAggregate: UDAF multi function with no parms", aggregateFuncErr);
} }
++udafcParamIdx; ++udafcParamIdx;
} }
@@ -2123,10 +2130,17 @@ void TupleAggregateStep::prep1PhaseDistinctAggregate(
multiParmIndexes.push_back(colAgg); multiParmIndexes.push_back(colAgg);
++colAgg; ++colAgg;
// If the param is const // If the param is const
ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get()); if (udafc)
if (cc)
{ {
funct->fpConstCol = udafc->aggParms()[udafcParamIdx]; ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get());
if (cc)
{
funct->fpConstCol = udafc->aggParms()[udafcParamIdx];
}
}
else
{
throw QueryDataExcept("prep1PhaseDistinctAggregate: UDAF multi function with no parms", aggregateFuncErr);
} }
++udafcParamIdx; ++udafcParamIdx;
} }
@@ -3398,10 +3412,17 @@ void TupleAggregateStep::prep2PhasesAggregate(
widthAggPm.push_back(width[colProj]); widthAggPm.push_back(width[colProj]);
colAggPm++; colAggPm++;
// If the param is const // If the param is const
ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get()); if (udafc)
if (cc)
{ {
funct->fpConstCol = udafc->aggParms()[udafcParamIdx]; ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get());
if (cc)
{
funct->fpConstCol = udafc->aggParms()[udafcParamIdx];
}
}
else
{
throw QueryDataExcept("prep2PhasesAggregate: UDAF multi function with no parms", aggregateFuncErr);
} }
++udafcParamIdx; ++udafcParamIdx;
} }
@@ -4257,10 +4278,17 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate(
multiParmIndexes.push_back(colAggPm); multiParmIndexes.push_back(colAggPm);
colAggPm++; colAggPm++;
// If the param is const // If the param is const
ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get()); if (udafc)
if (cc)
{ {
funct->fpConstCol = udafc->aggParms()[udafcParamIdx]; ConstantColumn* cc = dynamic_cast<ConstantColumn*>(udafc->aggParms()[udafcParamIdx].get());
if (cc)
{
funct->fpConstCol = udafc->aggParms()[udafcParamIdx];
}
}
else
{
throw QueryDataExcept("prep2PhasesDistinctAggregate: UDAF multi function with no parms", aggregateFuncErr);
} }
++udafcParamIdx; ++udafcParamIdx;
} }

View File

@@ -4165,7 +4165,7 @@ ReturnedColumn* buildAggregateColumn(Item* item, gp_walk_info& gwi)
rowCol->columnVec(selCols); rowCol->columnVec(selCols);
(dynamic_cast<GroupConcatColumn*>(ac))->orderCols(orderCols); (dynamic_cast<GroupConcatColumn*>(ac))->orderCols(orderCols);
parm.reset(rowCol); parm.reset(rowCol);
ac->aggParms().push_back(parm); ac->aggParms().push_back(parm);
if (gc->str_separator()) if (gc->str_separator())
{ {
@@ -4311,15 +4311,15 @@ ReturnedColumn* buildAggregateColumn(Item* item, gp_walk_info& gwi)
gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_AGG_ARGS, args); gwi.parseErrorText = IDBErrorInfo::instance()->errorMsg(ERR_NON_SUPPORT_AGG_ARGS, args);
} }
if (ac) if (ac)
delete ac; delete ac;
return NULL; return NULL;
} }
if (parm) if (parm)
{ {
// MCOL-1201 multi-argument aggregate // MCOL-1201 multi-argument aggregate
ac->aggParms().push_back(parm); ac->aggParms().push_back(parm);
} }
} }
} }
@@ -10033,7 +10033,15 @@ int getGroupPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, cal_gro
return ER_CHECK_NOT_IMPLEMENTED; return ER_CHECK_NOT_IMPLEMENTED;
} }
(*coliter)->aggParms().push_back(minSc); // Replace the last (presumably constant) object with minSc
if ((*coliter)->aggParms().empty())
{
(*coliter)->aggParms().push_back(minSc);
}
else
{
(*coliter)->aggParms()[0] = minSc;
}
} }
std::vector<FunctionColumn*>::iterator funciter; std::vector<FunctionColumn*>::iterator funciter;