
pg_regress has long had provisions for dynamically substituting path names into regression test scripts and result files, but use of that feature has always been a serious pain in the neck, mainly because updating the result files requires tedious manual editing. Let's get rid of that in favor of passing down the paths in environment variables. In addition to being easier to maintain, this way is capable of dealing with path names that require escaping at runtime, for example paths containing single-quote marks. (There are other stumbling blocks in the way of actually building in a path that looks like that, but removing this one seems like a good thing to do.) The key coding rule that makes that possible is to concatenate pieces of a dynamically-variable string using psql's \set command, and then use the :'variable' notation to quote and escape the string for the next level of interpretation. In hopes of making this change more transparent to "git blame", I've split it into two steps. This commit adds the necessary pg_regress.c support and changes all the *.source files in-place so that they no longer require any dynamic translation. The next commit will just "git mv" them into the regular sql/ and expected/ directories. Discussion: https://postgr.es/m/1655733.1639871614@sss.pgh.pa.us
24 lines
637 B
Plaintext
24 lines
637 B
Plaintext
-- Initialization that requires path substitution.
|
|
|
|
-- directory paths and dlsuffix are passed to us in environment variables
|
|
\getenv abs_srcdir PG_ABS_SRCDIR
|
|
\getenv libdir PG_LIBDIR
|
|
\getenv dlsuffix PG_DLSUFFIX
|
|
|
|
\set regresslib :libdir '/regress' :dlsuffix
|
|
|
|
CREATE FUNCTION setenv(text, text)
|
|
RETURNS void
|
|
AS :'regresslib', 'regress_setenv'
|
|
LANGUAGE C STRICT;
|
|
|
|
CREATE FUNCTION wait_pid(int)
|
|
RETURNS void
|
|
AS :'regresslib'
|
|
LANGUAGE C STRICT;
|
|
|
|
\set path :abs_srcdir '/'
|
|
\set fnbody 'SELECT setenv(''PGSERVICEFILE'', ' :'path' ' || $1)'
|
|
CREATE FUNCTION set_pgservicefile(text) RETURNS void LANGUAGE SQL
|
|
AS :'fnbody';
|