Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitc78ee4e

Browse files
committed
include parent into Runtime[Merge]Append's plan if asked to, introduce macro PrelParentRelid
1 parent7423e87 commitc78ee4e

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

‎src/init.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -373,7 +373,7 @@ fill_prel_with_partitions(const Oid *partitions,
373373
DisablePathman();/* disable pg_pathman since config is broken */
374374
ereport(ERROR,
375375
(errmsg("Unknown partitioning type for relation \"%s\"",
376-
get_rel_name_or_relid(prel->key)),
376+
get_rel_name_or_relid(PrelParentRelid(prel))),
377377
errhint(INIT_ERROR_HINT)));
378378
}
379379
}
@@ -419,7 +419,7 @@ fill_prel_with_partitions(const Oid *partitions,
419419
DisablePathman();/* disable pg_pathman since config is broken */
420420
elog(ERROR,"pg_pathman's cache for relation \"%s\" "
421421
"has not been properly initialized",
422-
get_rel_name_or_relid(prel->key));
422+
get_rel_name_or_relid(PrelParentRelid(prel)));
423423
}
424424
}
425425
#endif

‎src/nodes_common.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,12 @@ get_partition_oids(List *ranges, int *n, const PartRelationInfo *prel)
248248
Oid*result= (Oid*)palloc(allocated*sizeof(Oid));
249249
Oid*children=PrelGetChildrenArray(prel);
250250

251+
/* If required, add parent to result */
252+
Assert(INITIAL_ALLOC_NUM >=1);
253+
if (prel->enable_parent)
254+
result[used++]=PrelParentRelid(prel);
255+
256+
/* Deal with selected partitions */
251257
foreach (range_cell,ranges)
252258
{
253259
uint32i;
@@ -366,6 +372,10 @@ create_append_plan_common(PlannerInfo *root, RelOptInfo *rel,
366372
{
367373
Plan*child_plan= (Plan*)lfirst(lc2);
368374
RelOptInfo*child_rel= ((Path*)lfirst(lc1))->parent;
375+
Oidchild_relid;
376+
377+
/* Fetch relid of the 'child_rel' */
378+
child_relid=root->simple_rte_array[child_rel->relid]->relid;
369379

370380
/* Replace rel's tlist with a matching one */
371381
if (!cscan->scan.plan.targetlist)
@@ -380,6 +390,10 @@ create_append_plan_common(PlannerInfo *root, RelOptInfo *rel,
380390
if (!cscan->custom_scan_tlist)
381391
cscan->custom_scan_tlist=replace_tlist_varnos(child_plan->targetlist,
382392
rel);
393+
394+
/* If this is a plan for parent table, fill it with quals */
395+
if (PrelParentRelid(prel)==child_relid)
396+
child_plan->qual=get_actual_clauses(clauses);
383397
}
384398
}
385399

‎src/pg_pathman.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -900,13 +900,13 @@ create_partitions_internal(Oid relid, Datum value, Oid value_type)
900900
elog(ERROR,"Could not connect using SPI");
901901

902902
/* while (value >= MAX) ... */
903-
spawn_partitions(prel->key,value,max_rvalue,prel->atttype,
904-
&interval_type_cmp,interval_binary,
903+
spawn_partitions(PrelParentRelid(prel),value,max_rvalue,
904+
prel->atttype,&interval_type_cmp,interval_binary,
905905
interval_type, true,&partid);
906906

907907
/* while (value < MIN) ... */
908-
spawn_partitions(prel->key,value,min_rvalue,prel->atttype,
909-
&interval_type_cmp,interval_binary,
908+
spawn_partitions(PrelParentRelid(prel),value,min_rvalue,
909+
prel->atttype,&interval_type_cmp,interval_binary,
910910
interval_type, false,&partid);
911911

912912
SPI_finish();/* close SPI connection */

‎src/relation_info.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ typedef enum
9696
* PartRelationInfo field access macros.
9797
*/
9898

99+
#definePrelParentRelid(prel)( (prel)->key )
100+
99101
#definePrelGetChildrenArray(prel)( (prel)->children )
100102

101103
#definePrelGetRangesArray(prel)( (prel)->ranges )
@@ -111,7 +113,7 @@ PrelLastChild(const PartRelationInfo *prel)
111113

112114
if (PrelChildrenCount(prel)==0)
113115
elog(ERROR,"pg_pathman's cache entry for relation %u has 0 children",
114-
prel->key);
116+
PrelParentRelid(prel));
115117

116118
returnPrelChildrenCount(prel)-1;/* last partition */
117119
}
@@ -161,7 +163,7 @@ FreeChildrenArray(PartRelationInfo *prel)
161163
Oidchild= (prel)->children[i];
162164

163165
/* If it's *always been* relid's partition, free cache */
164-
if (prel->key==get_parent_of_partition(child,NULL))
166+
if (PrelParentRelid(prel)==get_parent_of_partition(child,NULL))
165167
forget_parent_of_partition(child,NULL);
166168
}
167169

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp