|
8 | 8 | * ------------------------------------------------------------------------ |
9 | 9 | */ |
10 | 10 |
|
| 11 | +#include"compat/expand_rte_hook.h" |
11 | 12 | #include"compat/relation_tags.h" |
12 | 13 | #include"compat/rowmarks_fix.h" |
13 | 14 |
|
@@ -180,19 +181,31 @@ pathman_transform_query_walker(Node *node, void *context) |
180 | 181 | staticvoid |
181 | 182 | disable_standard_inheritance(Query*parse) |
182 | 183 | { |
183 | | -ListCell*lc; |
| 184 | +ListCell*lc; |
| 185 | +Indexcurrent_rti;/* current range table entry index */ |
184 | 186 |
|
185 | | -/* Exit if it's not a SELECT query */ |
| 187 | +/* |
| 188 | + * We can't handle non-SELECT queries unless |
| 189 | + * there's a pathman_expand_inherited_rtentry_hook() |
| 190 | + */ |
| 191 | +#ifndefNATIVE_EXPAND_RTE_HOOK |
186 | 192 | if (parse->commandType!=CMD_SELECT) |
187 | 193 | return; |
| 194 | +#endif |
188 | 195 |
|
189 | 196 | /* Walk through RangeTblEntries list */ |
| 197 | +current_rti=0; |
190 | 198 | foreach (lc,parse->rtable) |
191 | 199 | { |
192 | 200 | RangeTblEntry*rte= (RangeTblEntry*)lfirst(lc); |
193 | 201 |
|
194 | | -/* Operate only on simple (non-join etc) relations */ |
195 | | -if (rte->rtekind!=RTE_RELATION||rte->relkind!=RELKIND_RELATION) |
| 202 | +current_rti++;/* increment RTE index */ |
| 203 | +Assert(current_rti!=0); |
| 204 | + |
| 205 | +/* Process only non-result base relations */ |
| 206 | +if (rte->rtekind!=RTE_RELATION|| |
| 207 | +rte->relkind!=RELKIND_RELATION|| |
| 208 | +parse->resultRelation==current_rti)/* is it a result relation? */ |
196 | 209 | continue; |
197 | 210 |
|
198 | 211 | /* Table may be partitioned */ |
|