implement EXPLAIN EXECUTE

Started by Neil Conwayover 23 years ago4 messagespatches
Jump to latest
#1Neil Conway
neilc@samurai.com

This patch implements EXPLAIN EXECUTE, including documentation updates.
I also refactored a bunch of the code in prepare.c, and made a few
cleanups to the EXPLAIN documentation.

Cheers,

Neil
--
Neil Conway <neilc@samurai.com> || PGP Key ID: DB3C29FC

Attachments:

explain_execute-4.patchtext/x-patch; charset=ANSI_X3.4-1968; name=explain_execute-4.patchDownload+577-399
#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#1)
Re: implement EXPLAIN EXECUTE

Neil Conway <neilc@samurai.com> writes:

This patch implements EXPLAIN EXECUTE, including documentation updates.

This seems like quite a messy way to do things. Why not just make the
grammar

ExplainStmt:
EXPLAIN opt_analyze opt_verbose OptimizableStmt
| EXPLAIN opt_analyze opt_verbose ExecuteStmt

where ExplainStmt.query can point to either an optimizable statement
or an ExecuteStmt.

Then you'd not need one single change (I think) in parsenodes.h nor
analyze.c, nor need to expose subroutines of explain.c to outside.
Instead, prepare.c would have to expose a function to fetch the plan
tree for a prepared query, but that seems a reasonable thing to do.

regards, tom lane

#3Neil Conway
neilc@samurai.com
In reply to: Tom Lane (#2)
Re: implement EXPLAIN EXECUTE

On Sun, 2003-01-12 at 14:31, Tom Lane wrote:

ExplainStmt:
EXPLAIN opt_analyze opt_verbose OptimizableStmt
| EXPLAIN opt_analyze opt_verbose ExecuteStmt

Then you'd not need one single change (I think) in parsenodes.h nor
analyze.c, nor need to expose subroutines of explain.c to outside.
Instead, prepare.c would have to expose a function to fetch the plan
tree for a prepared query, but that seems a reasonable thing to do.

I thought about that (and even partially implemented it), but I decided
against it: when you take into account the need to accept & evaluate
parameters (or else EXPLAIN ANALYZE isn't much use on a prepared query),
you need to modify analyze.c anyway, and I wasn't that comfortable
teaching explain.c a lot about the inner workings of prepare.c

I think my implementation isn't too messy, anyway -- the majority of the
changes are just refactoring the existing code into smaller functions,
so that it can be reused more easily (which is probably a good idea
anyway, IMHO).

However, if you'd prefer I can redo the implementation as you suggested.
Let me know...

Cheers,

Neil
--
Neil Conway <neilc@samurai.com> || PGP Key ID: DB3C29FC

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Neil Conway (#3)
Re: implement EXPLAIN EXECUTE

Neil Conway <neilc@samurai.com> writes:

I thought about that (and even partially implemented it), but I decided
against it: when you take into account the need to accept & evaluate
parameters (or else EXPLAIN ANALYZE isn't much use on a prepared query),
you need to modify analyze.c anyway,

Why? The handling of ExplainStmt presently recurses to transformStmt,
which is perfectly capable of handling an ExecuteStmt in the query
field.

regards, tom lane