Re: Use outerPlanState macro instead of referring to leffttree
От | Tom Lane |
---|---|
Тема | Re: Use outerPlanState macro instead of referring to leffttree |
Дата | |
Msg-id | 95731.1656711122@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Use outerPlanState macro instead of referring to leffttree (Richard Guo <guofenglinux@gmail.com>) |
Ответы |
Re: Use outerPlanState macro instead of referring to leffttree
|
Список | pgsql-hackers |
Richard Guo <guofenglinux@gmail.com> writes: > In the executor code, we mix use outerPlanState macro and referring to > leffttree. Commit 40f42d2a tried to keep the code consistent by > replacing referring to lefftree with outerPlanState macro, but there are > still some outliers. This patch tries to clean them up. Seems generally reasonable, but what about righttree? I find a few of those too with "grep". Backing up a little bit, one thing not to like about the outerPlanState and innerPlanState macros is that they lose all semblance of type safety: #define innerPlanState(node) (((PlanState *)(node))->righttree) #define outerPlanState(node) (((PlanState *)(node))->lefttree) You can pass any pointer you want, and the compiler will not complain. I wonder if there's any trick (even a gcc-only one) that could improve on that. In the absence of such a check, people might feel that increasing our reliance on these macros isn't such a hot idea. Now, the typical coding pattern you've used: ExecReScanHash(HashState *node) { + PlanState *outerPlan = outerPlanState(node); is probably reasonably secure against wrong-pointer slip-ups. But I'm less convinced about that for in-line usages in the midst of a function, particularly in the common case that the function has a variable pointing to its Plan node as well as PlanState node. Would it make sense to try to use the local-variable style everywhere? regards, tom lane
В списке pgsql-hackers по дате отправления: