mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
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.
This commit is contained in:
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.18 2010/03/01 05:16:35 tgl Exp $
|
||||
* $PostgreSQL: pgsql/contrib/xml2/xslt_proc.c,v 1.19 2010/03/01 18:07:59 tgl Exp $
|
||||
*
|
||||
* XSLT processing functions (requiring libxslt)
|
||||
*
|
||||
@ -13,6 +13,8 @@
|
||||
#include "miscadmin.h"
|
||||
#include "utils/builtins.h"
|
||||
|
||||
#ifdef USE_LIBXSLT
|
||||
|
||||
/* libxml includes */
|
||||
|
||||
#include <libxml/xpath.h>
|
||||
@ -26,11 +28,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);
|
||||
@ -40,12 +46,16 @@ static void parse_params(const char **params, text *paramstr);
|
||||
|
||||
#define MAXPARAMS 20 /* must be even, see parse_params() */
|
||||
|
||||
#endif /* USE_LIBXSLT */
|
||||
|
||||
|
||||
PG_FUNCTION_INFO_V1(xslt_process);
|
||||
|
||||
Datum
|
||||
xslt_process(PG_FUNCTION_ARGS)
|
||||
{
|
||||
#ifdef USE_LIBXSLT
|
||||
|
||||
text *doct = PG_GETARG_TEXT_P(0);
|
||||
text *ssheet = PG_GETARG_TEXT_P(1);
|
||||
text *paramstr;
|
||||
@ -123,8 +133,18 @@ xslt_process(PG_FUNCTION_ARGS)
|
||||
PG_RETURN_NULL();
|
||||
|
||||
PG_RETURN_TEXT_P(cstring_to_text_with_len((char *) resstr, reslen));
|
||||
|
||||
#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)
|
||||
@ -173,3 +193,5 @@ parse_params(const char **params, text *paramstr)
|
||||
|
||||
params[i] = NULL;
|
||||
}
|
||||
|
||||
#endif /* USE_LIBXSLT */
|
||||
|
Reference in New Issue
Block a user