MCPcopy Create free account
hub / github.com/apache/cloudberry / xslt_process

Function xslt_process

contrib/xml2/xslt_proc.c:47–193  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

45PG_FUNCTION_INFO_V1(xslt_process);
46
47Datum
48xslt_process(PG_FUNCTION_ARGS)
49{
50#ifdef USE_LIBXSLT
51
52 text *doct = PG_GETARG_TEXT_PP(0);
53 text *ssheet = PG_GETARG_TEXT_PP(1);
54 text *result;
55 text *paramstr;
56 const char **params;
57 PgXmlErrorContext *xmlerrcxt;
58 volatile xsltStylesheetPtr stylesheet = NULL;
59 volatile xmlDocPtr doctree = NULL;
60 volatile xmlDocPtr restree = NULL;
61 volatile xsltSecurityPrefsPtr xslt_sec_prefs = NULL;
62 volatile xsltTransformContextPtr xslt_ctxt = NULL;
63 volatile int resstat = -1;
64 xmlChar *resstr = NULL;
65 int reslen = 0;
66
67 if (fcinfo->nargs == 3)
68 {
69 paramstr = PG_GETARG_TEXT_PP(2);
70 params = parse_params(paramstr);
71 }
72 else
73 {
74 /* No parameters */
75 params = (const char **) palloc(sizeof(char *));
76 params[0] = NULL;
77 }
78
79 /* Setup parser */
80 xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY);
81
82 PG_TRY();
83 {
84 xmlDocPtr ssdoc;
85 bool xslt_sec_prefs_error;
86
87 /* Parse document */
88 doctree = xmlParseMemory((char *) VARDATA_ANY(doct),
89 VARSIZE_ANY_EXHDR(doct));
90
91 if (doctree == NULL)
92 xml_ereport(xmlerrcxt, ERROR, ERRCODE_EXTERNAL_ROUTINE_EXCEPTION,
93 "error parsing XML document");
94
95 /* Same for stylesheet */
96 ssdoc = xmlParseMemory((char *) VARDATA_ANY(ssheet),
97 VARSIZE_ANY_EXHDR(ssheet));
98
99 if (ssdoc == NULL)
100 xml_ereport(xmlerrcxt, ERROR, ERRCODE_EXTERNAL_ROUTINE_EXCEPTION,
101 "error parsing stylesheet as XML document");
102
103 /* After this call we need not free ssdoc separately */
104 stylesheet = xsltParseStylesheetDoc(ssdoc);

Callers

nothing calls this directly

Calls 8

parse_paramsFunction · 0.85
pgxml_parser_initFunction · 0.85
xml_ereportFunction · 0.85
pg_xml_doneFunction · 0.85
pallocFunction · 0.50
errmsgFunction · 0.50
cstring_to_text_with_lenFunction · 0.50
errcodeFunction · 0.50

Tested by

no test coverage detected