Modify processing of DECLARE CURSOR and EXPLAIN so that they can resolve the
types of unspecified parameters when submitted via extended query protocol. This worked in 8.2 but I had broken it during plancache changes. DECLARE CURSOR is now treated almost exactly like a plain SELECT through parse analysis, rewrite, and planning; only just before sending to the executor do we divert it away to ProcessUtility. This requires a special-case check in a number of places, but practically all of them were already special-casing SELECT INTO, so it's not too ugly. (Maybe it would be a good idea to merge the two by treating IntoClause as a form of utility statement? Not going to worry about that now, though.) That approach doesn't work for EXPLAIN, however, so for that I punted and used a klugy solution of running parse analysis an extra time if under extended query protocol.
Showing
- src/backend/commands/copy.c 3 additions, 2 deletionssrc/backend/commands/copy.c
- src/backend/commands/explain.c 13 additions, 54 deletionssrc/backend/commands/explain.c
- src/backend/commands/portalcmds.c 18 additions, 64 deletionssrc/backend/commands/portalcmds.c
- src/backend/commands/prepare.c 9 additions, 15 deletionssrc/backend/commands/prepare.c
- src/backend/executor/execMain.c 5 additions, 5 deletionssrc/backend/executor/execMain.c
- src/backend/executor/functions.c 13 additions, 7 deletionssrc/backend/executor/functions.c
- src/backend/executor/spi.c 5 additions, 3 deletionssrc/backend/executor/spi.c
- src/backend/nodes/copyfuncs.c 5 additions, 4 deletionssrc/backend/nodes/copyfuncs.c
- src/backend/nodes/equalfuncs.c 3 additions, 3 deletionssrc/backend/nodes/equalfuncs.c
- src/backend/nodes/outfuncs.c 5 additions, 4 deletionssrc/backend/nodes/outfuncs.c
- src/backend/nodes/readfuncs.c 2 additions, 2 deletionssrc/backend/nodes/readfuncs.c
- src/backend/optimizer/plan/planagg.c 3 additions, 2 deletionssrc/backend/optimizer/plan/planagg.c
- src/backend/optimizer/plan/planner.c 8 additions, 2 deletionssrc/backend/optimizer/plan/planner.c
- src/backend/optimizer/prep/prepjointree.c 5 additions, 3 deletionssrc/backend/optimizer/prep/prepjointree.c
- src/backend/optimizer/util/clauses.c 3 additions, 2 deletionssrc/backend/optimizer/util/clauses.c
- src/backend/parser/analyze.c 149 additions, 29 deletionssrc/backend/parser/analyze.c
- src/backend/parser/gram.y 4 additions, 4 deletionssrc/backend/parser/gram.y
- src/backend/parser/parse_clause.c 4 additions, 3 deletionssrc/backend/parser/parse_clause.c
- src/backend/parser/parse_expr.c 3 additions, 2 deletionssrc/backend/parser/parse_expr.c
- src/backend/parser/parse_type.c 2 additions, 2 deletionssrc/backend/parser/parse_type.c
Loading
Please register or sign in to comment