summaryrefslogtreecommitdiff
path: root/contrib/xml2/xslt_proc.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-03-01 18:08:27 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-03-01 18:08:27 +0000
commit7af8e8d671c548f7ba43a5a9aba691ffa0fc1727 (patch)
treecdd903611a3f9d4cd7eabe710279745109c2c4e0 /contrib/xml2/xslt_proc.c
parent057b5485e6d2fa3872838b013080fd85bbbc3d0a (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.c23
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 */