Age Owner TLA Line data Source code
1 : /*-------------------------------------------------------------------------
2 : *
3 : * xml.h
4 : * Declarations for XML data type support.
5 : *
6 : *
7 : * Portions Copyright (c) 1996-2023, 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 *
194 peter 51 GNC 54817 : DatumGetXmlP(Datum X)
52 : {
53 54817 : return (xmltype *) PG_DETOAST_DATUM(X);
54 : }
55 :
56 : static inline Datum
57 : XmlPGetDatum(const xmltype *X)
58 : {
59 : return PointerGetDatum(X);
60 : }
61 :
5953 peter_e 62 ECB : #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 */
|