On Thu, Feb 18, 2010 at 06:27:30PM -0500, Tom Lane wrote:
> David Fetter <[email protected]> writes:
> > While hacking on PL/Parrot, I ran across an issue where when
> > trying to load PL/pgsql, it's done unconditionally and fails. How
> > do we fix pg_regress to be a little more subtle about this?
>
> Why exactly would we want it to not fail? Regression tests are not
> about papering over problems.
OK, I know it's late, but having PL/pgsql on by default has caused an
unforeseen need: --require-language.
Please find enclosed a patch which implements this.
Cheers,
David.
--
David Fetter <[email protected]> http://fetter.org/
Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter
Skype: davidfetter XMPP: [email protected]
iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics
Remember to vote!
Consider donating to Postgres: http://www.postgresql.org/about/donate
diff --git a/src/test/regress/pg_regress.c b/src/test/regress/pg_regress.c
index 991bb17..fbf821d 100644
--- a/src/test/regress/pg_regress.c
+++ b/src/test/regress/pg_regress.c
@@ -85,6 +85,7 @@ char *inputdir = ".";
char *outputdir = ".";
char *psqldir = PGBINDIR;
static _stringlist *loadlanguage = NULL;
+static _stringlist *requirelanguage = NULL;
static int max_connections = 0;
static char *encoding = NULL;
static _stringlist *schedulelist = NULL;
@@ -1798,6 +1799,24 @@ create_database(const char *dbname)
header(_("installing %s"), sl->str);
psql_command(dbname, "CREATE LANGUAGE \"%s\"", sl->str);
}
+
+ /*
+ * Make sure any required procedural languages are installed.
+ */
+ for (sl = requirelanguage; sl != NULL; sl = sl->next)
+ {
+ header(_("making sure %s is installed"), sl->str);
+ psql_command(dbname,
+ "DO LANGUAGE plpgsql $$"
+ "BEGIN"
+ " IF NOT EXISTS"
+ " (SELECT 1 FROM pg_catalog.pg_language
WHERE lanname='%s')"
+ " THEN"
+ " CREATE LANGUAGE %s;"
+ " END IF;"
+ "END"
+ "$$", sl->str, sl->str);
+ }
}
static void
@@ -1860,6 +1879,8 @@ help(void)
printf(_(" --inputdir=DIR take input files from DIR
(default \".\")\n"));
printf(_(" --load-language=lang load the named language before
running the\n"));
printf(_(" tests; can appear multiple
times\n"));
+ printf(_(" --require-language=lang make sure the named language is
loaded before\n"));
+ printf(_(" running the tests; can appear
multiple times\n"));
printf(_(" --create-role=ROLE create the specified role before
testing\n"));
printf(_(" --max-connections=N maximum number of concurrent
connections\n"));
printf(_(" (default is 0 meaning
unlimited)\n"));
@@ -1920,6 +1941,7 @@ regression_main(int argc, char *argv[], init_function
ifunc, test_function tfunc
{"create-role", required_argument, NULL, 18},
{"temp-config", required_argument, NULL, 19},
{"use-existing", no_argument, NULL, 20},
+ {"require-language", required_argument, NULL, 21},
{NULL, 0, NULL, 0}
};
@@ -2013,6 +2035,9 @@ regression_main(int argc, char *argv[], init_function
ifunc, test_function tfunc
case 20:
use_existing = true;
break;
+ case 21:
+ add_stringlist_item(&requirelanguage, optarg);
+ break;
default:
/* getopt_long already emitted a complaint */
fprintf(stderr, _("\nTry \"%s -h\" for more
information.\n"),
--
Sent via pgsql-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers