diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2010-03-01 18:08:27 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2010-03-01 18:08:27 +0000 |
commit | 7af8e8d671c548f7ba43a5a9aba691ffa0fc1727 (patch) | |
tree | cdd903611a3f9d4cd7eabe710279745109c2c4e0 /contrib/xml2/xslt_proc.c | |
parent | 057b5485e6d2fa3872838b013080fd85bbbc3d0a (diff) |
Fix contrib/xml2 so regression test still works when it's built without libxslt.
This involves modifying the module to have a stable ABI, that is, the
xslt_process() function still exists even without libxslt. It throws a
runtime error if called, but doesn't prevent executing the CREATE FUNCTION
call. This is a good thing anyway to simplify cross-version upgrades.
Diffstat (limited to 'contrib/xml2/xslt_proc.c')
-rw-r--r-- | contrib/xml2/xslt_proc.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c index 4c45422b496..f955d4fe6ae 100644 --- a/contrib/xml2/xslt_proc.c +++ b/contrib/xml2/xslt_proc.c @@ -7,6 +7,8 @@ #include "funcapi.h" #include "miscadmin.h" +#ifdef USE_LIBXSLT + /* libxml includes */ #include <libxml/xpath.h> @@ -20,11 +22,15 @@ #include <libxslt/transform.h> #include <libxslt/xsltutils.h> +#endif /* USE_LIBXSLT */ + /* externally accessible functions */ Datum xslt_process(PG_FUNCTION_ARGS); +#ifdef USE_LIBXSLT + /* declarations to come from xpath.c */ extern void elog_error(const char *explain, bool force); extern void pgxml_parser_init(void); @@ -36,13 +42,15 @@ static void parse_params(const char **params, text *paramstr); #define GET_STR(textp) DatumGetCString(DirectFunctionCall1(textout, PointerGetDatum(textp))) +#endif /* USE_LIBXSLT */ + PG_FUNCTION_INFO_V1(xslt_process); Datum xslt_process(PG_FUNCTION_ARGS) { - +#ifdef USE_LIBXSLT const char *params[MAXPARAMS + 1]; /* +1 for the terminator */ xsltStylesheetPtr stylesheet = NULL; @@ -58,7 +66,6 @@ xslt_process(PG_FUNCTION_ARGS) text *paramstr; text *tres; - if (fcinfo->nargs == 3) { paramstr = PG_GETARG_TEXT_P(2); @@ -128,8 +135,18 @@ xslt_process(PG_FUNCTION_ARGS) VARATT_SIZEP(tres) = reslen + VARHDRSZ; PG_RETURN_TEXT_P(tres); + +#else /* !USE_LIBXSLT */ + + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("xslt_process() is not available without libxslt"))); + PG_RETURN_NULL(); + +#endif /* USE_LIBXSLT */ } +#ifdef USE_LIBXSLT static void parse_params(const char **params, text *paramstr) @@ -178,3 +195,5 @@ parse_params(const char **params, text *paramstr) params[i] = NULL; } + +#endif /* USE_LIBXSLT */ |