Add support for invoking parser callback hooks via SPI and in cached plans.
As proof of concept, modify plpgsql to use the hooks. plpgsql is still inserting $n symbols textually, but the "back end" of the parsing process now goes through the ParamRef hook instead of using a fixed parameter-type array, and then execution only fetches actually-referenced parameters, using a hook added to ParamListInfo. Although there's a lot left to be done in plpgsql, this already cures the "if (TG_OP = 'INSERT' and NEW.foo ...)" problem, as illustrated by the changed regression test.
Showing
- doc/src/sgml/spi.sgml 281 additions, 9 deletionsdoc/src/sgml/spi.sgml
- src/backend/commands/explain.c 5 additions, 8 deletionssrc/backend/commands/explain.c
- src/backend/commands/prepare.c 6 additions, 1 deletionsrc/backend/commands/prepare.c
- src/backend/executor/execCurrent.c 14 additions, 2 deletionssrc/backend/executor/execCurrent.c
- src/backend/executor/execQual.c 14 additions, 2 deletionssrc/backend/executor/execQual.c
- src/backend/executor/functions.c 6 additions, 1 deletionsrc/backend/executor/functions.c
- src/backend/executor/spi.c 169 additions, 73 deletionssrc/backend/executor/spi.c
- src/backend/nodes/params.c 55 additions, 27 deletionssrc/backend/nodes/params.c
- src/backend/tcop/postgres.c 52 additions, 1 deletionsrc/backend/tcop/postgres.c
- src/backend/utils/cache/plancache.c 43 additions, 10 deletionssrc/backend/utils/cache/plancache.c
- src/include/executor/spi.h 10 additions, 1 deletionsrc/include/executor/spi.h
- src/include/executor/spi_priv.h 3 additions, 1 deletionsrc/include/executor/spi_priv.h
- src/include/nodes/params.h 26 additions, 5 deletionssrc/include/nodes/params.h
- src/include/tcop/tcopprot.h 5 additions, 1 deletionsrc/include/tcop/tcopprot.h
- src/include/utils/plancache.h 7 additions, 1 deletionsrc/include/utils/plancache.h
- src/pl/plpgsql/src/gram.y 27 additions, 97 deletionssrc/pl/plpgsql/src/gram.y
- src/pl/plpgsql/src/pl_comp.c 8 additions, 32 deletionssrc/pl/plpgsql/src/pl_comp.c
- src/pl/plpgsql/src/pl_exec.c 339 additions, 199 deletionssrc/pl/plpgsql/src/pl_exec.c
- src/pl/plpgsql/src/pl_funcs.c 2 additions, 21 deletionssrc/pl/plpgsql/src/pl_funcs.c
- src/pl/plpgsql/src/pl_handler.c 9 additions, 2 deletionssrc/pl/plpgsql/src/pl_handler.c
Loading
Please register or sign in to comment