add openGauss 3.1.0 feature code
This commit is contained in:
@ -61,10 +61,9 @@ PartIteratorState* ExecInitPartIterator(PartIterator* node, EState* estate, int
|
||||
return state;
|
||||
}
|
||||
|
||||
static int GetScanPartitionNum(PartIteratorState* node)
|
||||
static int GetScanPartitionNum(PartIteratorState* node, PlanState* noden)
|
||||
{
|
||||
PartIterator* pi_node = (PartIterator*)node->ps.plan;
|
||||
PlanState* noden = (PlanState*)node->ps.lefttree;
|
||||
int partitionScan;
|
||||
switch (nodeTag(noden)) {
|
||||
case T_SeqScanState:
|
||||
@ -108,13 +107,12 @@ void SetPartitionIteratorParamter(PartIteratorState* node, List* subPartLengthLi
|
||||
}
|
||||
}
|
||||
|
||||
static void InitScanPartition(PartIteratorState* node, int partitionScan)
|
||||
static void InitScanPartition(PartIteratorState* node, int partitionScan, PlanState* noden)
|
||||
{
|
||||
int paramno = 0;
|
||||
unsigned int itr_idx = 0;
|
||||
PartIterator* pi_node = (PartIterator*)node->ps.plan;
|
||||
ParamExecData* param = NULL;
|
||||
PlanState* noden = (PlanState*)node->ps.lefttree;
|
||||
List *subPartLengthList = NIL;
|
||||
if (IsA(noden, VecToRowState)) {
|
||||
subPartLengthList = ((VecToRowState *)noden)->subPartLengthList;
|
||||
@ -158,7 +156,11 @@ TupleTableSlot* ExecPartIterator(PartIteratorState* node)
|
||||
node->ps.lefttree->do_not_reset_rownum = true;
|
||||
bool orig_early_free = state->es_skip_early_free;
|
||||
|
||||
int partitionScan = GetScanPartitionNum(node);
|
||||
PlanState* noden = (PlanState*)node->ps.lefttree;
|
||||
if (IsA(noden, LimitState)) {
|
||||
noden = ((LimitState*)noden)->ps.lefttree;
|
||||
}
|
||||
int partitionScan = GetScanPartitionNum(node, noden);
|
||||
if (partitionScan == 0) {
|
||||
/* return NULL if no partition is selected */
|
||||
return NULL;
|
||||
@ -166,7 +168,7 @@ TupleTableSlot* ExecPartIterator(PartIteratorState* node)
|
||||
|
||||
/* init first scanned partition */
|
||||
if (node->currentItr == -1)
|
||||
InitScanPartition(node, partitionScan);
|
||||
InitScanPartition(node, partitionScan, noden);
|
||||
|
||||
/* For partition wise join, can not early free left tree's caching memory */
|
||||
state->es_skip_early_free = true;
|
||||
@ -182,7 +184,6 @@ TupleTableSlot* ExecPartIterator(PartIteratorState* node)
|
||||
node->ps.lefttree->ps_rownum--;
|
||||
|
||||
if (node->currentItr + 1 >= partitionScan) { /* have scanned all partitions */
|
||||
PlanState* noden = (PlanState*)node->ps.lefttree;
|
||||
List *subPartLengthList = NIL;
|
||||
if (IsA(noden, VecToRowState)) {
|
||||
subPartLengthList = ((VecToRowState *)noden)->subPartLengthList;
|
||||
@ -202,7 +203,7 @@ TupleTableSlot* ExecPartIterator(PartIteratorState* node)
|
||||
}
|
||||
|
||||
/* switch to next partiiton */
|
||||
InitScanPartition(node, partitionScan);
|
||||
InitScanPartition(node, partitionScan, noden);
|
||||
|
||||
/* For partition wise join, can not early free left tree's caching memory */
|
||||
orig_early_free = state->es_skip_early_free;
|
||||
@ -245,7 +246,11 @@ void ExecReScanPartIterator(PartIteratorState* node)
|
||||
ParamExecData* subPartParam = NULL;
|
||||
|
||||
/* do nothing if there is no partition to scan */
|
||||
int partitionScan = GetScanPartitionNum(node);
|
||||
PlanState* noden = (PlanState*)node->ps.lefttree;
|
||||
if (IsA(noden, LimitState)) {
|
||||
noden = ((LimitState*)noden)->ps.lefttree;
|
||||
}
|
||||
int partitionScan = GetScanPartitionNum(node, noden);
|
||||
if (partitionScan == 0) {
|
||||
/* return NULL if no partition is selected */
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user