Thread: pgsql: Add support for invoking parser callback hooks via SPI and in
pgsql: Add support for invoking parser callback hooks via SPI and in
From
tgl@postgresql.org (Tom Lane)
Date:
Log Message: ----------- 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. Modified Files: -------------- pgsql/doc/src/sgml: spi.sgml (r1.65 -> r1.66) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/spi.sgml?r1=1.65&r2=1.66) pgsql/src/backend/commands: explain.c (r1.192 -> r1.193) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/explain.c?r1=1.192&r2=1.193) prepare.c (r1.99 -> r1.100) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/prepare.c?r1=1.99&r2=1.100) pgsql/src/backend/executor: execCurrent.c (r1.12 -> r1.13) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/execCurrent.c?r1=1.12&r2=1.13) execQual.c (r1.253 -> r1.254) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/execQual.c?r1=1.253&r2=1.254) functions.c (r1.135 -> r1.136) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/functions.c?r1=1.135&r2=1.136) spi.c (r1.210 -> r1.211) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/executor/spi.c?r1=1.210&r2=1.211) pgsql/src/backend/nodes: params.c (r1.11 -> r1.12) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/nodes/params.c?r1=1.11&r2=1.12) pgsql/src/backend/tcop: postgres.c (r1.574 -> r1.575) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/tcop/postgres.c?r1=1.574&r2=1.575) pgsql/src/backend/utils/cache: plancache.c (r1.30 -> r1.31) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/cache/plancache.c?r1=1.30&r2=1.31) pgsql/src/include/executor: spi.h (r1.72 -> r1.73) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/executor/spi.h?r1=1.72&r2=1.73) spi_priv.h (r1.32 -> r1.33) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/executor/spi_priv.h?r1=1.32&r2=1.33) pgsql/src/include/nodes: params.h (r1.38 -> r1.39) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/nodes/params.h?r1=1.38&r2=1.39) pgsql/src/include/tcop: tcopprot.h (r1.100 -> r1.101) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/tcop/tcopprot.h?r1=1.100&r2=1.101) pgsql/src/include/utils: plancache.h (r1.15 -> r1.16) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/include/utils/plancache.h?r1=1.15&r2=1.16) pgsql/src/pl/plpgsql/src: gram.y (r1.128 -> r1.129) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/gram.y?r1=1.128&r2=1.129) pl_comp.c (r1.139 -> r1.140) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/pl_comp.c?r1=1.139&r2=1.140) pl_exec.c (r1.248 -> r1.249) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/pl_exec.c?r1=1.248&r2=1.249) pl_funcs.c (r1.81 -> r1.82) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/pl_funcs.c?r1=1.81&r2=1.82) pl_handler.c (r1.46 -> r1.47) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/pl_handler.c?r1=1.46&r2=1.47) plpgsql.h (r1.117 -> r1.118) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/pl/plpgsql/src/plpgsql.h?r1=1.117&r2=1.118) pgsql/src/test/regress/expected: plpgsql.out (r1.75 -> r1.76) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/expected/plpgsql.out?r1=1.75&r2=1.76) pgsql/src/test/regress/sql: plpgsql.sql (r1.63 -> r1.64) (http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/test/regress/sql/plpgsql.sql?r1=1.63&r2=1.64)