1 | /*------------------------------------------------------------------------- |
2 | * |
3 | * xml.h |
4 | * Declarations for XML data type support. |
5 | * |
6 | * |
7 | * Portions Copyright (c) 1996-2019, 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 "fmgr.h" |
19 | #include "nodes/execnodes.h" |
20 | #include "nodes/primnodes.h" |
21 | #include "executor/tablefunc.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 | #define DatumGetXmlP(X) ((xmltype *) PG_DETOAST_DATUM(X)) |
51 | #define XmlPGetDatum(X) PointerGetDatum(X) |
52 | |
53 | #define PG_GETARG_XML_P(n) DatumGetXmlP(PG_GETARG_DATUM(n)) |
54 | #define PG_RETURN_XML_P(x) PG_RETURN_POINTER(x) |
55 | |
56 | extern void pg_xml_init_library(void); |
57 | extern PgXmlErrorContext *pg_xml_init(PgXmlStrictness strictness); |
58 | extern void pg_xml_done(PgXmlErrorContext *errcxt, bool isError); |
59 | extern bool pg_xml_error_occurred(PgXmlErrorContext *errcxt); |
60 | extern void xml_ereport(PgXmlErrorContext *errcxt, int level, int sqlcode, |
61 | const char *msg); |
62 | |
63 | extern xmltype *xmlconcat(List *args); |
64 | extern xmltype *xmlelement(XmlExpr *xexpr, |
65 | Datum *named_argvalue, bool *named_argnull, |
66 | Datum *argvalue, bool *argnull); |
67 | extern xmltype *xmlparse(text *data, XmlOptionType xmloption, bool preserve_whitespace); |
68 | extern xmltype *xmlpi(const char *target, text *arg, bool arg_is_null, bool *result_is_null); |
69 | extern xmltype *xmlroot(xmltype *data, text *version, int standalone); |
70 | extern bool xml_is_document(xmltype *arg); |
71 | extern text *xmltotext_with_xmloption(xmltype *data, XmlOptionType xmloption_arg); |
72 | extern char *escape_xml(const char *str); |
73 | |
74 | extern char *map_sql_identifier_to_xml_name(const char *ident, bool fully_escaped, bool escape_period); |
75 | extern char *map_xml_name_to_sql_identifier(const char *name); |
76 | extern char *map_sql_value_to_xml_value(Datum value, Oid type, bool xml_escape_strings); |
77 | |
78 | extern int xmlbinary; /* XmlBinaryType, but int for guc enum */ |
79 | |
80 | extern int xmloption; /* XmlOptionType, but int for guc enum */ |
81 | |
82 | extern const TableFuncRoutine XmlTableRoutine; |
83 | |
84 | #endif /* XML_H */ |
85 | |