Thread
Commits
-
Avoid including explain.h in explain_format.h and explain_dr.h
- 77cb08be5106 18.0 landed
-
Create explain_dr.c and move DestReceiver-related code there.
- 555960a0fbf0 18.0 landed
-
Create explain_format.c and move relevant code there.
- 9173e8b60463 18.0 landed
-
moving some code out of explain.c
Robert Haas <robertmhaas@gmail.com> — 2025-02-18T18:04:03Z
While contemplating some additions to explain.c, I noticed that this file has become rather large -- 5924 lines on master. I'm generally not a fan of very large source files, and I think it would be a good idea to start splitting this one up before things get completely out of control. Here are a few patches to move some chunks of code to separate files (explain_format.c and explain_dr.c). I think in cases like this there is a tendency to want to achieve an even split of the original file, but in practice I think that tends not to be difficult to achieve. These two patches combined move about 1000 lines of code into separate files, which I think is actually quite a good result for a refactoring of this sort. We might want to split it up even more, but I don't feel like that has to be done in the first set of patches or that all such patches have to come from me. So I propose to do just this much for now. Comments? -- Robert Haas EDB: http://www.enterprisedb.com
-
Re: moving some code out of explain.c
Peter Geoghegan <pg@bowt.ie> — 2025-02-18T18:11:23Z
On Tue, Feb 18, 2025 at 1:04 PM Robert Haas <robertmhaas@gmail.com> wrote: > I think in cases like this there is a tendency to want to achieve an > even split of the original file, but in practice I think that tends > not to be difficult to achieve. These two patches combined move about > 1000 lines of code into separate files, which I think is actually > quite a good result for a refactoring of this sort. We might want to > split it up even more, but I don't feel like that has to be done in > the first set of patches or that all such patches have to come from > me. So I propose to do just this much for now. > > Comments? Seems like a good idea to me. -- Peter Geoghegan
-
Re: moving some code out of explain.c
Robert Haas <robertmhaas@gmail.com> — 2025-02-27T18:24:20Z
On Tue, Feb 18, 2025 at 1:11 PM Peter Geoghegan <pg@bowt.ie> wrote: > On Tue, Feb 18, 2025 at 1:04 PM Robert Haas <robertmhaas@gmail.com> wrote: > > I think in cases like this there is a tendency to want to achieve an > > even split of the original file, but in practice I think that tends > > not to be difficult to achieve. These two patches combined move about > > 1000 lines of code into separate files, which I think is actually > > quite a good result for a refactoring of this sort. We might want to > > split it up even more, but I don't feel like that has to be done in > > the first set of patches or that all such patches have to come from > > me. So I propose to do just this much for now. > > > > Comments? > > Seems like a good idea to me. Thanks for the quick response! I have committed these patches. I see that the Redis-FDW test is failing; it will now need to include "commands/explain_format.h" -- unless we something, of course. -- Robert Haas EDB: http://www.enterprisedb.com
-
Re: moving some code out of explain.c
Peter Geoghegan <pg@bowt.ie> — 2025-02-27T18:31:00Z
On Thu, Feb 27, 2025 at 1:24 PM Robert Haas <robertmhaas@gmail.com> wrote: > Thanks for the quick response! I have committed these patches. I recently did something similar myself when I moved all of the nbtree preprocessing code into its own file. The obvious downside is that it tends to make "git blame" much less useful. It was definitely worth it, though. -- Peter Geoghegan
-
Re: moving some code out of explain.c
Alvaro Herrera <alvherre@alvh.no-ip.org> — 2025-02-27T19:21:52Z
On 2025-Feb-27, Robert Haas wrote: > I see that the Redis-FDW test is failing; it will now need to include > "commands/explain_format.h" -- unless we something, of course. I wonder if it was really a useful idea to move the declarations of those functions from explain.h to the new explain_format.h file. It seems that this new file now has a bunch of declarations that have always been something of a public interface, together with others that are only of internal explain.c interest, such as ExplainOpenSetAsideGroup() and friends. -- Álvaro Herrera PostgreSQL Developer — https://www.EnterpriseDB.com/
-
Re: moving some code out of explain.c
Robert Haas <robertmhaas@gmail.com> — 2025-02-27T19:41:05Z
On Thu, Feb 27, 2025 at 2:21 PM Álvaro Herrera <alvherre@alvh.no-ip.org> wrote: > On 2025-Feb-27, Robert Haas wrote: > > I see that the Redis-FDW test is failing; it will now need to include > > "commands/explain_format.h" -- unless we something, of course. > > I wonder if it was really a useful idea to move the declarations of > those functions from explain.h to the new explain_format.h file. It > seems that this new file now has a bunch of declarations that have > always been something of a public interface, together with others that > are only of internal explain.c interest, such as > ExplainOpenSetAsideGroup() and friends. I'm not completely certain about what I did with the header files, but for a somewhat different reason than what you mention here. I don't see ExplainOpenSetAsideGroup() as being any different from anything else that I put in explain_format.h -- it's something that code might want to call if it's generating EXPLAIN output, and otherwise not. But maybe I'm missing something -- what makes you see it as different from the other stuff? The thing that was bugging me a bit is that explain_format.h includes explain.h. It would be nice if those were more independent of each other, but I'm not sure if there's a reasonably clean way of accomplishing that. When deciding what to do there, it's also worth keeping in mind that there may be more opportunities to move stuff out of explain.c, so we might not want to get too dogmatic about the header file organization just yet. But, I'm certainly open to ideas. -- Robert Haas EDB: http://www.enterprisedb.com
-
Re: moving some code out of explain.c
Tom Lane <tgl@sss.pgh.pa.us> — 2025-02-27T20:05:54Z
Robert Haas <robertmhaas@gmail.com> writes: > The thing that was bugging me a bit is that explain_format.h includes > explain.h. Yeah, I did not like that at all either -- it makes things a bit circular, and I fear IWYU is going to make stupid recommendations like not including explain.h in explain.c. Did you look at avoiding that with our standard trick of writing detail-free struct declarations? That is, explain_format.h would need struct ExplainState; /* avoid including explain.h here */ and then s/ExplainState/struct ExplainState/ in all the function declarations. You'd still need to get List from someplace, but it could be gotten by including primnodes.h or even pg_list.h. regards, tom lane
-
Re: moving some code out of explain.c
Robert Haas <robertmhaas@gmail.com> — 2025-02-27T21:07:05Z
On Thu, Feb 27, 2025 at 3:05 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Robert Haas <robertmhaas@gmail.com> writes: > > The thing that was bugging me a bit is that explain_format.h includes > > explain.h. > > Yeah, I did not like that at all either -- it makes things a bit > circular, and I fear IWYU is going to make stupid recommendations > like not including explain.h in explain.c. > > Did you look at avoiding that with our standard trick of writing > detail-free struct declarations? That is, explain_format.h > would need > > struct ExplainState; /* avoid including explain.h here */ > > and then s/ExplainState/struct ExplainState/ in all the function > declarations. You'd still need to get List from someplace, but > it could be gotten by including primnodes.h or even pg_list.h. OK, here's a patch that does that. Thoughts? -- Robert Haas EDB: http://www.enterprisedb.com
-
Re: moving some code out of explain.c
Tom Lane <tgl@sss.pgh.pa.us> — 2025-02-27T21:12:05Z
Robert Haas <robertmhaas@gmail.com> writes: > On Thu, Feb 27, 2025 at 3:05 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Did you look at avoiding that with our standard trick of writing >> detail-free struct declarations? > OK, here's a patch that does that. Thoughts? +1, but how about explain_dr.h too? It doesn't seem though that we can avoid #include "executor/instrument.h" there, so it'd be a little asymmetrical. But the executor inclusion doesn't seem nearly as much almost-circular. regards, tom lane
-
Re: moving some code out of explain.c
Robert Haas <robertmhaas@gmail.com> — 2025-02-27T21:25:39Z
On Thu, Feb 27, 2025 at 4:12 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > +1, but how about explain_dr.h too? It doesn't seem though that > we can avoid #include "executor/instrument.h" there, so it'd be > a little asymmetrical. But the executor inclusion doesn't seem > nearly as much almost-circular. OK, here is v2. One slightly unfortunate thing about this is that we end up with a line that is over 80 characters: extern DestReceiver *CreateExplainSerializeDestReceiver(struct ExplainState *es); Aside from perhaps shortening the function name, I don't see how to avoid that. -- Robert Haas EDB: http://www.enterprisedb.com
-
Re: moving some code out of explain.c
Tom Lane <tgl@sss.pgh.pa.us> — 2025-02-27T21:48:01Z
Robert Haas <robertmhaas@gmail.com> writes: > OK, here is v2. One slightly unfortunate thing about this is that we > end up with a line that is over 80 characters: > extern DestReceiver *CreateExplainSerializeDestReceiver(struct > ExplainState *es); > Aside from perhaps shortening the function name, I don't see how to avoid that. Can't get terribly excited about that. But speaking of CreateExplainSerializeDestReceiver, I see that a declaration of it is still there at the bottom of explain.h: extern DestReceiver *CreateExplainSerializeDestReceiver(ExplainState *es); #endif /* EXPLAIN_H */ Oversight I assume? regards, tom lane -
Re: moving some code out of explain.c
Robert Haas <robertmhaas@gmail.com> — 2025-02-28T14:52:24Z
On Thu, Feb 27, 2025 at 4:48 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > Oversight I assume? Yeah, that was dumb. Thanks for catching it. Here's v3. -- Robert Haas EDB: http://www.enterprisedb.com
-
Re: moving some code out of explain.c
Robert Haas <robertmhaas@gmail.com> — 2025-02-28T18:28:22Z
On Fri, Feb 28, 2025 at 9:52 AM Robert Haas <robertmhaas@gmail.com> wrote: > On Thu, Feb 27, 2025 at 4:48 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Oversight I assume? > > Yeah, that was dumb. Thanks for catching it. Here's v3. Committed so I can see what the buildfarm thinks before it gets too late in the day. -- Robert Haas EDB: http://www.enterprisedb.com