Fix potential data overflow.
This commit is contained in:
@ -1938,15 +1938,6 @@ static TupleTableSlot* agg_retrieve_hash_table(AggState* aggstate)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getPower2Num(int num)
|
|
||||||
{
|
|
||||||
int i = 1;
|
|
||||||
while (i < num) {
|
|
||||||
i <<= 1;
|
|
||||||
}
|
|
||||||
return i;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* -----------------
|
/* -----------------
|
||||||
* ExecInitAgg
|
* ExecInitAgg
|
||||||
*
|
*
|
||||||
@ -2916,7 +2907,7 @@ Datum aggregate_dummy(PG_FUNCTION_ARGS)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable,
|
FORCE_INLINE void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable,
|
||||||
TupleTableSlot* hashslot, int numGroups, bool isAgg, int planId, int dop, Instrumentation* instrument)
|
TupleTableSlot* hashslot, int64 numGroups, bool isAgg, int planId, int dop, Instrumentation* instrument)
|
||||||
{
|
{
|
||||||
if (TempFileControl->spillToDisk == false) {
|
if (TempFileControl->spillToDisk == false) {
|
||||||
Assert(TempFileControl->finishwrite == false);
|
Assert(TempFileControl->finishwrite == false);
|
||||||
@ -2980,7 +2971,7 @@ FORCE_INLINE void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleH
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* estimate num of temp file */
|
/* estimate num of temp file */
|
||||||
int estsize = getPower2Num(4 * numGroups / TempFileControl->inmemoryRownum);
|
int estsize = getPower2NextNum(4 * numGroups / TempFileControl->inmemoryRownum);
|
||||||
TempFileControl->filenum = Max(HASH_MIN_FILENUMBER, estsize);
|
TempFileControl->filenum = Max(HASH_MIN_FILENUMBER, estsize);
|
||||||
TempFileControl->filenum = Min(TempFileControl->filenum, HASH_MAX_FILENUMBER);
|
TempFileControl->filenum = Min(TempFileControl->filenum, HASH_MAX_FILENUMBER);
|
||||||
TempFileControl->filesource =
|
TempFileControl->filesource =
|
||||||
|
@ -279,9 +279,8 @@ extern long ExecGetMemCostAgg(Agg*);
|
|||||||
extern void initialize_phase(AggState* aggstate, int newphase);
|
extern void initialize_phase(AggState* aggstate, int newphase);
|
||||||
extern List* find_hash_columns(AggState* aggstate);
|
extern List* find_hash_columns(AggState* aggstate);
|
||||||
extern uint32 ComputeHashValue(TupleHashTable hashtbl);
|
extern uint32 ComputeHashValue(TupleHashTable hashtbl);
|
||||||
extern int getPower2Num(int num);
|
|
||||||
extern void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable, TupleTableSlot* hashslot,
|
extern void agg_spill_to_disk(AggWriteFileControl* TempFileControl, TupleHashTable hashtable, TupleTableSlot* hashslot,
|
||||||
int numGroups, bool isAgg, int planId, int dop, Instrumentation* intrument = NULL);
|
int64 numGroups, bool isAgg, int planId, int dop, Instrumentation* intrument = NULL);
|
||||||
extern void ExecEarlyFreeAggregation(AggState* node);
|
extern void ExecEarlyFreeAggregation(AggState* node);
|
||||||
extern void ExecReSetAgg(AggState* node);
|
extern void ExecReSetAgg(AggState* node);
|
||||||
|
|
||||||
|
@ -356,7 +356,7 @@ inline int getPower2LessNum(int num)
|
|||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int getPower2NextNum(int num)
|
inline int getPower2NextNum(int64 num)
|
||||||
{
|
{
|
||||||
int i = 1;
|
int i = 1;
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
Reference in New Issue
Block a user