sync all inner code
This commit is contained in:
@ -1031,36 +1031,45 @@ static void ExecInitPartitionForBitmapHeapScan(BitmapHeapScanState* scanstate, E
|
||||
scanstate->ss.part_id = 0;
|
||||
}
|
||||
|
||||
ListCell* cell = NULL;
|
||||
ListCell* cell1 = NULL;
|
||||
ListCell* cell2 = NULL;
|
||||
List* part_seqs = resultPlan->ls_rangeSelectedPartitions;
|
||||
List* partitionnos = resultPlan->ls_selectedPartitionnos;
|
||||
Assert(list_length(part_seqs) == list_length(partitionnos));
|
||||
relistarget = ExecRelationIsTargetRelation(estate, plan->scan.scanrelid);
|
||||
lock = (relistarget ? RowExclusiveLock : AccessShareLock);
|
||||
scanstate->ss.lockMode = lock;
|
||||
|
||||
foreach (cell, part_seqs) {
|
||||
forboth (cell1, part_seqs, cell2, partitionnos) {
|
||||
Oid tablepartitionid = InvalidOid;
|
||||
int partSeq = lfirst_int(cell);
|
||||
int partSeq = lfirst_int(cell1);
|
||||
int partitionno = lfirst_int(cell2);
|
||||
/* add table partition to list */
|
||||
tablepartitionid = getPartitionOidFromSequence(currentRelation, partSeq, plan->scan.pruningInfo->partMap);
|
||||
tablepartition = partitionOpen(currentRelation, tablepartitionid, lock);
|
||||
tablepartitionid = getPartitionOidFromSequence(currentRelation, partSeq, partitionno);
|
||||
tablepartition = PartitionOpenWithPartitionno(currentRelation, tablepartitionid, partitionno, lock);
|
||||
scanstate->ss.partitions = lappend(scanstate->ss.partitions, tablepartition);
|
||||
|
||||
if (resultPlan->ls_selectedSubPartitions != NIL) {
|
||||
Relation partRelation = partitionGetRelation(currentRelation, tablepartition);
|
||||
SubPartitionPruningResult* subPartPruningResult =
|
||||
GetSubPartitionPruningResult(resultPlan->ls_selectedSubPartitions, partSeq);
|
||||
GetSubPartitionPruningResult(resultPlan->ls_selectedSubPartitions, partSeq, partitionno);
|
||||
if (subPartPruningResult == NULL) {
|
||||
continue;
|
||||
}
|
||||
List *subpart_seqs = subPartPruningResult->ls_selectedSubPartitions;
|
||||
List *subpartitionnos = subPartPruningResult->ls_selectedSubPartitionnos;
|
||||
Assert(list_length(subpart_seqs) == list_length(subpartitionnos));
|
||||
List *subpartition = NULL;
|
||||
ListCell *lc = NULL;
|
||||
foreach (lc, subpart_seqs) {
|
||||
ListCell *lc1 = NULL;
|
||||
ListCell *lc2 = NULL;
|
||||
forboth (lc1, subpart_seqs, lc2, subpartitionnos) {
|
||||
Oid subpartitionid = InvalidOid;
|
||||
int subpartSeq = lfirst_int(lc);
|
||||
int subpartSeq = lfirst_int(lc1);
|
||||
int subpartitionno = lfirst_int(lc2);
|
||||
|
||||
subpartitionid = getPartitionOidFromSequence(partRelation, subpartSeq);
|
||||
Partition subpart = partitionOpen(partRelation, subpartitionid, lock);
|
||||
subpartitionid = getPartitionOidFromSequence(partRelation, subpartSeq, subpartitionno);
|
||||
Partition subpart =
|
||||
PartitionOpenWithPartitionno(partRelation, subpartitionid, subpartitionno, lock);
|
||||
subpartition = lappend(subpartition, subpart);
|
||||
}
|
||||
releaseDummyRelation(&(partRelation));
|
||||
|
||||
Reference in New Issue
Block a user