sync code

This commit is contained in:
LiHeng
2022-03-04 23:22:16 +08:00
parent d26ec83e7b
commit de223dd152
2618 changed files with 382415 additions and 163216 deletions

View File

@ -83,15 +83,37 @@ static int GetScanPartitionNum(PartIteratorState* node)
return partitionScan;
}
void SetPartitionIteratorParamter(PartIteratorState* node, List* subPartLengthList)
{
if (subPartLengthList != NIL) {
if (node->currentItr == -1) {
node->currentItr++;
}
int subPartLength = (int)list_nth_int(subPartLengthList, node->currentItr);
if (node->subPartCurrentItr + 1 >= subPartLength) {
node->currentItr++;
node->subPartCurrentItr = -1;
}
node->subPartCurrentItr++;
unsigned int subitr_idx = node->subPartCurrentItr;
PartIterator* pi_node = (PartIterator*)node->ps.plan;
int subPartParamno = pi_node->param->subPartParamno;
ParamExecData* subPartParam = &(node->ps.state->es_param_exec_vals[subPartParamno]);
subPartParam->isnull = false;
subPartParam->value = (Datum)subitr_idx;
node->ps.lefttree->chgParam = bms_add_member(node->ps.lefttree->chgParam, subPartParamno);
} else {
node->currentItr++;
}
}
static void InitScanPartition(PartIteratorState* node, int partitionScan)
{
int paramno = 0;
int subPartParamno = 0;
unsigned int itr_idx = 0;
unsigned int subitr_idx = 0;
PartIterator* pi_node = (PartIterator*)node->ps.plan;
ParamExecData* param = NULL;
ParamExecData* subPartParam = NULL;
PlanState* noden = (PlanState*)node->ps.lefttree;
List *subPartLengthList = NIL;
if (IsA(noden, VecToRowState)) {
@ -104,25 +126,7 @@ static void InitScanPartition(PartIteratorState* node, int partitionScan)
Assert(ForwardScanDirection == pi_node->direction || BackwardScanDirection == pi_node->direction);
/* set iterator parameter */
if (subPartLengthList != NIL) {
if (node->currentItr == -1) {
node->currentItr++;
}
int subPartLength = (int)list_nth_int(subPartLengthList, node->currentItr);
if (node->subPartCurrentItr + 1 >= subPartLength) {
node->currentItr++;
node->subPartCurrentItr = -1;
}
node->subPartCurrentItr++;
subitr_idx = node->subPartCurrentItr;
subPartParamno = pi_node->param->subPartParamno;
subPartParam = &(node->ps.state->es_param_exec_vals[subPartParamno]);
subPartParam->isnull = false;
subPartParam->value = (Datum)subitr_idx;
node->ps.lefttree->chgParam = bms_add_member(node->ps.lefttree->chgParam, subPartParamno);
} else {
node->currentItr++;
}
SetPartitionIteratorParamter(node, subPartLengthList);
itr_idx = node->currentItr;
if (BackwardScanDirection == pi_node->direction)