Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * xml.h 4 : * Declarations for XML data type support. 5 : * 6 : * 7 : * Portions Copyright (c) 1996-2024, PostgreSQL Global Development Group 8 : * Portions Copyright (c) 1994, Regents of the University of California 9 : * 10 : * src/include/utils/xml.h 11 : * 12 : *------------------------------------------------------------------------- 13 : */ 14 : 15 : #ifndef XML_H 16 : #define XML_H 17 : 18 : #include "executor/tablefunc.h" 19 : #include "fmgr.h" 20 : #include "nodes/execnodes.h" 21 : #include "nodes/primnodes.h" 22 : 23 : typedef struct varlena xmltype; 24 : 25 : typedef enum 26 : { 27 : XML_STANDALONE_YES, 28 : XML_STANDALONE_NO, 29 : XML_STANDALONE_NO_VALUE, 30 : XML_STANDALONE_OMITTED, 31 : } XmlStandaloneType; 32 : 33 : typedef enum 34 : { 35 : XMLBINARY_BASE64, 36 : XMLBINARY_HEX, 37 : } XmlBinaryType; 38 : 39 : typedef enum 40 : { 41 : PG_XML_STRICTNESS_LEGACY, /* ignore errors unless function result 42 : * indicates error condition */ 43 : PG_XML_STRICTNESS_WELLFORMED, /* ignore non-parser messages */ 44 : PG_XML_STRICTNESS_ALL, /* report all notices/warnings/errors */ 45 : } PgXmlStrictness; 46 : 47 : /* struct PgXmlErrorContext is private to xml.c */ 48 : typedef struct PgXmlErrorContext PgXmlErrorContext; 49 : 50 : static inline xmltype * 51 111502 : DatumGetXmlP(Datum X) 52 : { 53 111502 : return (xmltype *) PG_DETOAST_DATUM(X); 54 : } 55 : 56 : static inline Datum 57 : XmlPGetDatum(const xmltype *X) 58 : { 59 : return PointerGetDatum(X); 60 : } 61 : 62 : #define PG_GETARG_XML_P(n) DatumGetXmlP(PG_GETARG_DATUM(n)) 63 : #define PG_RETURN_XML_P(x) PG_RETURN_POINTER(x) 64 : 65 : extern void pg_xml_init_library(void); 66 : extern PgXmlErrorContext *pg_xml_init(PgXmlStrictness strictness); 67 : extern void pg_xml_done(PgXmlErrorContext *errcxt, bool isError); 68 : extern bool pg_xml_error_occurred(PgXmlErrorContext *errcxt); 69 : extern void xml_ereport(PgXmlErrorContext *errcxt, int level, int sqlcode, 70 : const char *msg); 71 : 72 : extern xmltype *xmlconcat(List *args); 73 : extern xmltype *xmlelement(XmlExpr *xexpr, 74 : Datum *named_argvalue, bool *named_argnull, 75 : Datum *argvalue, bool *argnull); 76 : extern xmltype *xmlparse(text *data, XmlOptionType xmloption_arg, bool preserve_whitespace); 77 : extern xmltype *xmlpi(const char *target, text *arg, bool arg_is_null, bool *result_is_null); 78 : extern xmltype *xmlroot(xmltype *data, text *version, int standalone); 79 : extern bool xml_is_document(xmltype *arg); 80 : extern text *xmltotext_with_options(xmltype *data, XmlOptionType xmloption_arg, 81 : bool indent); 82 : extern char *escape_xml(const char *str); 83 : 84 : extern char *map_sql_identifier_to_xml_name(const char *ident, bool fully_escaped, bool escape_period); 85 : extern char *map_xml_name_to_sql_identifier(const char *name); 86 : extern char *map_sql_value_to_xml_value(Datum value, Oid type, bool xml_escape_strings); 87 : 88 : extern PGDLLIMPORT int xmlbinary; /* XmlBinaryType, but int for guc enum */ 89 : 90 : extern PGDLLIMPORT int xmloption; /* XmlOptionType, but int for guc enum */ 91 : 92 : extern PGDLLIMPORT const TableFuncRoutine XmlTableRoutine; 93 : 94 : #endif /* XML_H */