Imai-san, Thanks for the review.
On 2019/03/04 18:14, Imai, Yoshikazu wrote: > I've taken at glance the codes and there are some minor comments about the > patch. > > * You changed a usage/arguments of get_relation_info, but why you did it? I > made those codes back to the original code and checked it passes make check. > So ISTM there are no logical problems with not changing it. Or if you change > it, how about also change a usage/arguments of get_relation_info_hook in the > same way? > > -get_relation_info(PlannerInfo *root, Oid relationObjectId, bool inhparent, > - RelOptInfo *rel) > +get_relation_info(PlannerInfo *root, RangeTblEntry *rte, RelOptInfo *rel) > { > + bool inhparent = rte->inh; > - relation = table_open(relationObjectId, NoLock); > + relation = heap_open(rte->relid, NoLock); > ... > if (get_relation_info_hook) > - (*get_relation_info_hook) (root, relationObjectId, inhparent, > rel); > + (*get_relation_info_hook) (root, rte->relid, rte->inh, rel); > > > @@ -217,15 +272,13 @@ build_simple_rel(PlannerInfo *root, int relid, > RelOptInfo *parent) > /* Check type of rtable entry */ > switch (rte->rtekind) > { > case RTE_RELATION: > /* Table --- retrieve statistics from the system > catalogs */ > - get_relation_info(root, rte->relid, rte->inh, rel); > + get_relation_info(root, rte, rel); > > > * You moved the codes of initializing of append rel's partitioned_child_rels > in set_append_rel_size() to build_simple_rel(), but is it better to do? I > also checked the original code passes make check by doing like above. > > @@ -954,32 +948,6 @@ set_append_rel_size(PlannerInfo *root, RelOptInfo *rel, > Assert(IS_SIMPLE_REL(rel)); > > /* > - * Initialize partitioned_child_rels to contain this RT index. > - * > - * Note that during the set_append_rel_pathlist() phase, we will bubble > up > - * the indexes of partitioned relations that appear down in the tree, so > - * that when we've created Paths for all the children, the root > - * partitioned table's list will contain all such indexes. > - */ > - if (rte->relkind == RELKIND_PARTITIONED_TABLE) > - rel->partitioned_child_rels = list_make1_int(rti); > > @@ -274,55 +327,287 @@ build_simple_rel(PlannerInfo *root, int relid, > RelOptInfo *parent) > > list_length(rte->securityQuals)); > > /* > - * If this rel is an appendrel parent, recurse to build "other rel" > - * RelOptInfos for its children. They are "other rels" because they are > - * not in the main join tree, but we will need RelOptInfos to plan > access > - * to them. > + * Add the parent to partitioned_child_rels. > + * > + * Note that during the set_append_rel_pathlist() phase, values of the > + * indexes of partitioned relations that appear down in the tree will > + * be bubbled up into root parent's list so that when we've created > + * Paths for all the children, the root table's list will contain all > + * such indexes. > */ > - if (rte->inh) > + if (rel->part_scheme) > + rel->partitioned_child_rels = list_make1_int(relid); Both of these changes are not present in the latest patches I posted, where I also got rid of a lot of unnecessary diffs. Thanks, Amit