Alvaro Herrera <alvhe...@2ndquadrant.com> writes: > Tom Lane wrote: >> Probably the least messy way to fix this is to drop that #include and >> instead use dummy declarations like "struct PlannerInfo;" and "struct >> IndexPath;" here. We could additionally dumb the amcostestimate >> declaration down from using "Cost" and "Selectivity" to just saying >> "double".
> I'm not a fan of this approach. I'd rather split the executor headers > in two, a leanone with the typedefs only and another with the actual > struct definitions. That way we have one very lean executor header that > can be included everywhere (in headers and .c files that only pass the > structs around), and a fat one that is only included by the executor .c > files (and the few extra .c files that need access to the struct > definitions). > This would be similar in spirit to the htup.h / htup_details.h split. > I think (almost?) all the headers that define nodes suffer from this > disease and could be cured in the same way. I follow your reasoning, but I don't particularly want to make this patch wait on a large and invasive refactoring of existing headers. As a down payment on this problem, maybe we could invent a new planner header that provides just enough info to support amapi.h and fdwapi.h; it looks like this would be "typedef struct PlannerInfo PlannerInfo;", likewise for RelOptInfo, ForeignPath, and IndexPath, and real declarations of Cost and Selectivity. Not sure what to name the new header. Comments? regards, tom lane -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers