sync all inner code

This commit is contained in:
openGaussDev
2022-10-27 20:21:03 +08:00
committed by yanghao
parent a10741b11e
commit f7d23913d6
520 changed files with 63136 additions and 9761 deletions

View File

@ -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));