From 06e9772310005c3f824652ae8fbc5dc87d6f84e6 Mon Sep 17 00:00:00 2001 From: David Hall Date: Mon, 14 May 2018 17:28:24 -0500 Subject: [PATCH] MCOL-1201 some fixes from testing --- dbcon/joblist/tupleaggregatestep.cpp | 229 ++++++++++++--------------- dbcon/mysql/ha_calpont_execplan.cpp | 1 - utils/common/common.vpj | 2 + utils/rowgroup/rowaggregation.cpp | 4 +- 4 files changed, 106 insertions(+), 130 deletions(-) diff --git a/dbcon/joblist/tupleaggregatestep.cpp b/dbcon/joblist/tupleaggregatestep.cpp index ff490da5b..8f7755ad9 100644 --- a/dbcon/joblist/tupleaggregatestep.cpp +++ b/dbcon/joblist/tupleaggregatestep.cpp @@ -852,7 +852,6 @@ SJSTEP TupleAggregateStep::prepAggregate(SJSTEP& step, JobInfo& jobInfo) if (ac->aggOp() == ROWAGG_UDAF) { UDAFColumn* udafc = dynamic_cast(ac); - if (udafc) { constAggDataVec.push_back( @@ -1097,8 +1096,9 @@ void TupleAggregateStep::prep1PhaseAggregate( vector functionVec; uint32_t bigIntWidth = sizeof(int64_t); uint32_t bigUintWidth = sizeof(uint64_t); + // For UDAF uint32_t projColsUDAFIndex = 0; - + UDAFColumn* udafc = NULL; mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; // for count column of average function map avgFuncMap; @@ -1287,12 +1287,10 @@ void TupleAggregateStep::prep1PhaseAggregate( if (aggOp == ROWAGG_UDAF) { std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; - for (; it != jobInfo.projectionCols.end(); it++) { - UDAFColumn* udafc = dynamic_cast((*it).get()); + udafc = dynamic_cast((*it).get()); projColsUDAFIndex++; - if (udafc) { pUDAFFunc = udafc->getContext().getFunction(); @@ -1300,12 +1298,10 @@ void TupleAggregateStep::prep1PhaseAggregate( funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colProj, i)); break; } - } - if (it == jobInfo.projectionCols.end()) { - throw logic_error("(1)prep1PhaseAggregate: A UDAF function is called but there's no/not enough UDAFColumn/-s"); + throw logic_error("(1)prep1PhaseAggregate: A UDAF function is called but there\'s not enough UDAFColumns"); } } else @@ -1474,8 +1470,6 @@ void TupleAggregateStep::prep1PhaseAggregate( throw logic_error("(2)prep1PhaseAggregate: A UDAF function is called but there's no RowUDAFFunctionCol"); } - pUDAFFunc = udafFuncCol->fUDAFContext.getFunction(); - // Return column oidsAgg.push_back(oidsProj[colProj]); keysAgg.push_back(key); @@ -1677,8 +1671,11 @@ void TupleAggregateStep::prep1PhaseDistinctAggregate( uint32_t bigIntWidth = sizeof(int64_t); // map key = column key, operation (enum), and UDAF pointer if UDAF. AGG_MAP aggFuncMap; - mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; set avgSet; + + // fOR udaf + UDAFColumn* udafc = NULL; + mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; uint32_t projColsUDAFIndex = 0; // for count column of average function @@ -1847,7 +1844,7 @@ void TupleAggregateStep::prep1PhaseDistinctAggregate( for (; it != jobInfo.projectionCols.end(); it++) { - UDAFColumn* udafc = dynamic_cast((*it).get()); + udafc = dynamic_cast((*it).get()); projColsUDAFIndex++; if (udafc) @@ -1857,12 +1854,10 @@ void TupleAggregateStep::prep1PhaseDistinctAggregate( funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colProj, colAgg)); break; } - } - if (it == jobInfo.projectionCols.end()) { - throw logic_error("(1)prep1PhaseDistinctAggregate: A UDAF function is called but there's no/not enough UDAFColumn/-s"); + throw logic_error("(1)prep1PhaseDistinctAggregate: A UDAF function is called but there\'s not enough UDAFColumns"); } } else @@ -2142,6 +2137,7 @@ void TupleAggregateStep::prep1PhaseDistinctAggregate( // locate the return column position in aggregated rowgroup for (uint64_t i = 0; i < returnedColVec.size(); i++) { + udafc = NULL; pUDAFFunc = NULL; uint32_t retKey = returnedColVec[i].first; RowAggFunctionType aggOp = functionIdMap(returnedColVec[i].second); @@ -2150,10 +2146,21 @@ void TupleAggregateStep::prep1PhaseDistinctAggregate( if (aggOp == ROWAGG_UDAF) { - UDAFColumn* udafc = dynamic_cast(jobInfo.projectionCols[i].get()); - - if (udafc) - pUDAFFunc = udafc->getContext().getFunction(); + std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; + for (; it != jobInfo.projectionCols.end(); it++) + { + udafc = dynamic_cast((*it).get()); + projColsUDAFIndex++; + if (udafc) + { + pUDAFFunc = udafc->getContext().getFunction(); + break; + } + } + if (it == jobInfo.projectionCols.end()) + { + throw logic_error("(1)prep1PhaseDistinctAggregate: A UDAF function is called but there\'s not enough UDAFColumns"); + } } if (find(jobInfo.distinctColVec.begin(), jobInfo.distinctColVec.end(), retKey) != @@ -2473,26 +2480,7 @@ void TupleAggregateStep::prep1PhaseDistinctAggregate( SP_ROWAGG_FUNC_t funct; if (aggOp == ROWAGG_UDAF) { - std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; - - for (; it != jobInfo.projectionCols.end(); it++) - { - UDAFColumn* udafc = dynamic_cast((*it).get()); - projColsUDAFIndex++; - - if (udafc) - { - pUDAFFunc = udafc->getContext().getFunction(); - // Create a RowAggFunctionCol (UDAF subtype) with the context. - funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colAgg, i)); - break; - } - } - - if (it == jobInfo.projectionCols.end()) - { - throw logic_error("(3)prep1PhaseDistinctAggregate: A UDAF function is called but there's no/not enough UDAFColumn/-s"); - } + funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colAgg, i)); } else { @@ -2904,7 +2892,10 @@ void TupleAggregateStep::prep2PhasesAggregate( vector > aggColVec; set avgSet; vector >& returnedColVec = jobInfo.returnedColVec; + // For UDAF uint32_t projColsUDAFIndex = 0; + UDAFColumn* udafc = NULL; + mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; for (uint64_t i = 0; i < returnedColVec.size(); i++) { @@ -2947,7 +2938,6 @@ void TupleAggregateStep::prep2PhasesAggregate( uint32_t bigIntWidth = sizeof(int64_t); uint32_t bigUintWidth = sizeof(uint64_t); AGG_MAP aggFuncMap; - mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; // associate the columns between projected RG and aggregate RG on PM // populated the aggregate columns @@ -3084,12 +3074,10 @@ void TupleAggregateStep::prep2PhasesAggregate( if (aggOp == ROWAGG_UDAF) { std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; - for (; it != jobInfo.projectionCols.end(); it++) { - UDAFColumn* udafc = dynamic_cast((*it).get()); + udafc = dynamic_cast((*it).get()); projColsUDAFIndex++; - if (udafc) { pUDAFFunc = udafc->getContext().getFunction(); @@ -3098,10 +3086,9 @@ void TupleAggregateStep::prep2PhasesAggregate( break; } } - if (it == jobInfo.projectionCols.end()) { - throw logic_error("(1)prep2PhasesAggregate: A UDAF function is called but there's no/not enough UDAFColumn/-s"); + throw logic_error("(1)prep2PhasesAggregate: A UDAF function is called but there\'s not enough UDAFColumns"); } } else @@ -3350,10 +3337,6 @@ void TupleAggregateStep::prep2PhasesAggregate( // add back sum or count(column name) if omitted due to avg column // put count(column name) column to the end, if it is for avg only { - // Keep a count of the parms after the first for any aggregate. - // These will be skipped and the count needs to be subtracted - // from where the aux column will be. - int64_t multiParms = 0; // check if the count column for AVG is also a returned column, // if so, replace the "-1" to actual position in returned vec. map avgFuncMap; @@ -3369,6 +3352,8 @@ void TupleAggregateStep::prep2PhasesAggregate( } // locate the return column position in aggregated rowgroup from PM + // outIdx is i without the multi-columns, + uint64_t outIdx = 0; for (uint64_t i = 0; i < returnedColVec.size(); i++) { uint32_t retKey = returnedColVec[i].first; @@ -3379,19 +3364,30 @@ void TupleAggregateStep::prep2PhasesAggregate( if (aggOp == ROWAGG_MULTI_PARM) { // Skip on UM: Extra parms for an aggregate have no work on the UM - ++multiParms; continue; } + // Is this a UDAF? use the function as part of the key. - - mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; - + pUDAFFunc = NULL; + udafc = NULL; if (aggOp == ROWAGG_UDAF) { - UDAFColumn* udafc = dynamic_cast(jobInfo.projectionCols[i].get()); + std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; - if (udafc) - pUDAFFunc = udafc->getContext().getFunction(); + for (; it != jobInfo.projectionCols.end(); it++) + { + udafc = dynamic_cast((*it).get()); + projColsUDAFIndex++; + if (udafc) + { + pUDAFFunc = udafc->getContext().getFunction(); + break; + } + } + if (it == jobInfo.projectionCols.end()) + { + throw logic_error("(3)prep2PhasesAggregate: A UDAF function is called but there\'s not enough UDAFColumns"); + } } AGG_MAP::iterator it = aggFuncMap.find(boost::make_tuple(retKey, aggOp, pUDAFFunc)); @@ -3492,7 +3488,7 @@ void TupleAggregateStep::prep2PhasesAggregate( if (returnColMissing) { Message::Args args; - args.add(keyName(i, retKey, jobInfo)); + args.add(keyName(outIdx, retKey, jobInfo)); string emsg = IDBErrorInfo::instance()-> errorMsg(ERR_NOT_GROUPBY_EXPRESSION, args); cerr << "prep2PhasesAggregate: " << emsg << " oid=" @@ -3514,7 +3510,7 @@ void TupleAggregateStep::prep2PhasesAggregate( if (jobInfo.groupByColVec[j] == retKey) { if (groupByUm[j]->fOutputColumnIndex == (uint32_t) - 1) - groupByUm[j]->fOutputColumnIndex = i; + groupByUm[j]->fOutputColumnIndex = outIdx; else dupGroupbyIndex = groupByUm[j]->fOutputColumnIndex; } @@ -3525,7 +3521,7 @@ void TupleAggregateStep::prep2PhasesAggregate( if (jobInfo.distinctColVec[j] == retKey) { if (groupByUm[j]->fOutputColumnIndex == (uint32_t) - 1) - groupByUm[j]->fOutputColumnIndex = i; + groupByUm[j]->fOutputColumnIndex = outIdx; else dupGroupbyIndex = groupByUm[j]->fOutputColumnIndex; } @@ -3534,7 +3530,7 @@ void TupleAggregateStep::prep2PhasesAggregate( // a duplicate group by column if (dupGroupbyIndex != -1) functionVecUm.push_back(SP_ROWAGG_FUNC_t(new RowAggFunctionCol( - ROWAGG_DUP_FUNCT, ROWAGG_FUNCT_UNDEFINE, -1, i, dupGroupbyIndex))); + ROWAGG_DUP_FUNCT, ROWAGG_FUNCT_UNDEFINE, -1, outIdx, dupGroupbyIndex))); } else { @@ -3542,30 +3538,11 @@ void TupleAggregateStep::prep2PhasesAggregate( SP_ROWAGG_FUNC_t funct; if (aggOp == ROWAGG_UDAF) { - std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; - - for (; it != jobInfo.projectionCols.end(); it++) - { - UDAFColumn* udafc = dynamic_cast((*it).get()); - projColsUDAFIndex++; - - if (udafc) - { - pUDAFFunc = udafc->getContext().getFunction(); - // Create a RowAggFunctionCol (UDAF subtype) with the context. - funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colPm, i-multiParms)); - break; - } - } - - if (it == jobInfo.projectionCols.end()) - { - throw logic_error("(3)prep2PhasesAggregate: A UDAF function is called but there's no/not enough UDAFColumn/-s"); - } + funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colPm, outIdx)); } else { - funct.reset(new RowAggFunctionCol(aggOp, stats, colPm, i-multiParms)); + funct.reset(new RowAggFunctionCol(aggOp, stats, colPm, outIdx)); } if (aggOp == ROWAGG_COUNT_NO_OP) @@ -3600,6 +3577,7 @@ void TupleAggregateStep::prep2PhasesAggregate( if (returnedColVec[i].second == AggregateColumn::AVG) avgFuncMap.insert(make_pair(returnedColVec[i].first, funct)); } + ++outIdx; } // now fix the AVG function, locate the count(column) position @@ -3617,7 +3595,7 @@ void TupleAggregateStep::prep2PhasesAggregate( } // there is avg(k), but no count(k) in the select list - uint64_t lastCol = returnedColVec.size() - multiParms; + uint64_t lastCol = outIdx; for (map::iterator k = avgFuncMap.begin(); k != avgFuncMap.end(); k++) { @@ -3724,7 +3702,10 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( vector > aggColVec, aggNoDistColVec; set avgSet, avgDistSet; vector >& returnedColVec = jobInfo.returnedColVec; + // For UDAF uint32_t projColsUDAFIndex = 0; + UDAFColumn* udafc = NULL; + mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; for (uint64_t i = 0; i < returnedColVec.size(); i++) { @@ -3796,7 +3777,6 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( uint32_t bigIntWidth = sizeof(int64_t); map, uint64_t> avgFuncDistMap; AGG_MAP aggFuncMap; - mcsv1sdk::mcsv1_UDAF* pUDAFFunc = NULL; // associate the columns between projected RG and aggregate RG on PM // populated the aggregate columns @@ -3940,12 +3920,10 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( if (aggOp == ROWAGG_UDAF) { std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; - for (; it != jobInfo.projectionCols.end(); it++) { - UDAFColumn* udafc = dynamic_cast((*it).get()); + udafc = dynamic_cast((*it).get()); projColsUDAFIndex++; - if (udafc) { pUDAFFunc = udafc->getContext().getFunction(); @@ -3954,10 +3932,9 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( break; } } - if (it == jobInfo.projectionCols.end()) { - throw logic_error("(1)prep2PhasesDistinctAggregate: A UDAF function is called but there's no/not enough UDAFColumn/-s"); + throw logic_error("(1)prep2PhasesDistinctAggregate: A UDAF function is called but there\'s not enough UDAFColumns"); } } else @@ -4201,32 +4178,33 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( // associate the columns between the aggregate RGs on PM and UM without distinct aggregator // populated the returned columns { + int64_t multiParms = 0; + for (uint32_t idx = 0; idx < groupByPm.size(); idx++) { SP_ROWAGG_GRPBY_t groupby(new RowAggGroupByCol(idx, idx)); groupByUm.push_back(groupby); } - // Keep a count of the parms after the first for any aggregate. - // These will be skipped and the count needs to be subtracted - // from where the aux column will be. - int64_t multiParms = 0; for (uint32_t idx = 0; idx < functionVecPm.size(); idx++) - { SP_ROWAGG_FUNC_t funct; SP_ROWAGG_FUNC_t funcPm = functionVecPm[idx]; - // UDAF support if (funcPm->fAggFunction == ROWAGG_MULTI_PARM) { - // Multi-Parm is not used on the UM + // Skip on UM: Extra parms for an aggregate have no work on the UM ++multiParms; continue; } + if (funcPm->fAggFunction == ROWAGG_UDAF) { RowUDAFFunctionCol* udafFuncCol = dynamic_cast(funcPm.get()); + if (!udafFuncCol) + { + throw logic_error("(3)prep2PhasesDistinctAggregate: A UDAF function is called but there's no RowUDAFFunctionCol"); + } funct.reset(new RowUDAFFunctionCol( udafFuncCol->fUDAFContext, udafFuncCol->fOutputColumnIndex, @@ -4273,6 +4251,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( // These will be skipped and the count needs to be subtracted // from where the aux column will be. int64_t multiParms = 0; + projColsUDAFIndex = 0; // check if the count column for AVG is also a returned column, // if so, replace the "-1" to actual position in returned vec. map avgFuncMap, avgDistFuncMap; @@ -4286,9 +4265,12 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( } // locate the return column position in aggregated rowgroup from PM + // outIdx is i without the multi-columns, + uint64_t outIdx = 0; for (uint64_t i = 0; i < returnedColVec.size(); i++) { pUDAFFunc = NULL; + udafc = NULL; uint32_t retKey = returnedColVec[i].first; RowAggFunctionType aggOp = functionIdMap(returnedColVec[i].second); @@ -4304,10 +4286,21 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( if (aggOp == ROWAGG_UDAF) { - UDAFColumn* udafc = dynamic_cast(jobInfo.projectionCols[i].get()); - - if (udafc) - pUDAFFunc = udafc->getContext().getFunction(); + std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; + for (; it != jobInfo.projectionCols.end(); it++) + { + udafc = dynamic_cast((*it).get()); + projColsUDAFIndex++; + if (udafc) + { + pUDAFFunc = udafc->getContext().getFunction(); + break; + } + } + if (it == jobInfo.projectionCols.end()) + { + throw logic_error("(4)prep2PhasesDistinctAggregate: A UDAF function is called but there\'s not enough UDAFColumns"); + } } if (find(jobInfo.distinctColVec.begin(), jobInfo.distinctColVec.end(), retKey) != @@ -4436,7 +4429,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( if (it != aggFuncMap.end()) { - colUm = it->second - multiParms; + colUm = it->second; oidsAggDist.push_back(oidsAggUm[colUm]); keysAggDist.push_back(keysAggUm[colUm]); scaleAggDist.push_back(scaleAggUm[colUm]); @@ -4460,7 +4453,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( // false alarm returnColMissing = false; - colUm = it->second - multiParms; + colUm = it->second; if (aggOp == ROWAGG_SUM) { @@ -4528,7 +4521,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( if (returnColMissing) { Message::Args args; - args.add(keyName(i, retKey, jobInfo)); + args.add(keyName(outIdx, retKey, jobInfo)); string emsg = IDBErrorInfo::instance()-> errorMsg(ERR_NOT_GROUPBY_EXPRESSION, args); cerr << "prep2PhasesDistinctAggregate: " << emsg << " oid=" @@ -4552,7 +4545,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( if (jobInfo.groupByColVec[j] == retKey) { if (groupByNoDist[j]->fOutputColumnIndex == (uint32_t) - 1) - groupByNoDist[j]->fOutputColumnIndex = i; + groupByNoDist[j]->fOutputColumnIndex = outIdx; else dupGroupbyIndex = groupByNoDist[j]->fOutputColumnIndex; } @@ -4561,7 +4554,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( // a duplicate group by column if (dupGroupbyIndex != -1) functionVecUm.push_back(SP_ROWAGG_FUNC_t(new RowAggFunctionCol( - ROWAGG_DUP_FUNCT, ROWAGG_FUNCT_UNDEFINE, -1, i, dupGroupbyIndex))); + ROWAGG_DUP_FUNCT, ROWAGG_FUNCT_UNDEFINE, -1, outIdx, dupGroupbyIndex))); } else { @@ -4569,30 +4562,11 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( SP_ROWAGG_FUNC_t funct; if (aggOp == ROWAGG_UDAF) { - std::vector::iterator it = jobInfo.projectionCols.begin() + projColsUDAFIndex; - - for (; it != jobInfo.projectionCols.end(); it++) - { - UDAFColumn* udafc = dynamic_cast((*it).get()); - projColsUDAFIndex++; - - if (udafc) - { - pUDAFFunc = udafc->getContext().getFunction(); - // Create a RowAggFunctionCol (UDAF subtype) with the context. - funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colUm, i-multiParms)); - break; - } - } - - if (it == jobInfo.projectionCols.end()) - { - throw logic_error("(3)prep2PhasesDistinctAggregate: A UDAF function is called but there's no/not enough UDAFColumn/-s"); - } + funct.reset(new RowUDAFFunctionCol(udafc->getContext(), colUm, outIdx)); } else { - funct.reset(new RowAggFunctionCol(aggOp, stats, colUm, i-multiParms)); + funct.reset(new RowAggFunctionCol(aggOp, stats, colUm, outIdx)); } if (aggOp == ROWAGG_COUNT_NO_OP) @@ -4629,6 +4603,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( else if (returnedColVec[i].second == AggregateColumn::DISTINCT_AVG) avgDistFuncMap.insert(make_pair(returnedColVec[i].first, funct)); } + ++outIdx; } // for (i // now fix the AVG function, locate the count(column) position @@ -4646,7 +4621,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( } // there is avg(k), but no count(k) in the select list - uint64_t lastCol = returnedColVec.size() - multiParms; + uint64_t lastCol = outIdx; for (map::iterator k = avgFuncMap.begin(); k != avgFuncMap.end(); k++) { @@ -4706,7 +4681,7 @@ void TupleAggregateStep::prep2PhasesDistinctAggregate( if (!udafFuncCol) { - throw logic_error("(4)prep2PhasesDistinctAggregate: A UDAF function is called but there's no RowUDAFFunctionCol"); + throw logic_error("(5)prep2PhasesDistinctAggregate: A UDAF function is called but there's no RowUDAFFunctionCol"); } functionVecUm[i]->fAuxColumnIndex = lastCol++; diff --git a/dbcon/mysql/ha_calpont_execplan.cpp b/dbcon/mysql/ha_calpont_execplan.cpp index 9150d5393..c1706eee7 100644 --- a/dbcon/mysql/ha_calpont_execplan.cpp +++ b/dbcon/mysql/ha_calpont_execplan.cpp @@ -4573,7 +4573,6 @@ ReturnedColumn* buildAggregateColumn(Item* item, gp_walk_info& gwi) udafc->resultType(ct); } } - } catch (std::logic_error e) { diff --git a/utils/common/common.vpj b/utils/common/common.vpj index 69059884c..ea67e04ba 100755 --- a/utils/common/common.vpj +++ b/utils/common/common.vpj @@ -200,6 +200,7 @@ + @@ -208,6 +209,7 @@ Name="Header Files" Filters="*.h;*.H;*.hh;*.hpp;*.hxx;*.inc;*.sh;*.cpy;*.if"> + diff --git a/utils/rowgroup/rowaggregation.cpp b/utils/rowgroup/rowaggregation.cpp index c1f5bbd63..043dcaac2 100644 --- a/utils/rowgroup/rowaggregation.cpp +++ b/utils/rowgroup/rowaggregation.cpp @@ -2015,13 +2015,13 @@ void RowAggregation::doStatistics(const Row& rowIn, int64_t colIn, int64_t colOu void RowAggregation::doUDAF(const Row& rowIn, int64_t colIn, int64_t colOut, int64_t colAux, RowUDAFFunctionCol* rowUDAF, uint64_t& funcColsIdx) { - int32_t paramCount = fRGContext.getParameterCount(); + uint32_t paramCount = fRGContext.getParameterCount(); // The vector of parameters to be sent to the UDAF mcsv1sdk::ColumnDatum valsIn[paramCount]; uint32_t dataFlags[paramCount]; execplan::CalpontSystemCatalog::ColDataType colDataType; - for (uint32_t i = 0; i < fRGContext.getParameterCount(); ++i) + for (uint32_t i = 0; i < paramCount; ++i) { mcsv1sdk::ColumnDatum& datum = valsIn[i]; // Turn on NULL flags