]> granicus.if.org Git - postgresql/commitdiff
Revert "Delete contrib/xml2's legacy implementation of xml_is_well_formed()."
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 7 Nov 2016 15:27:52 +0000 (10:27 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 7 Nov 2016 15:27:52 +0000 (10:27 -0500)
This partly reverts commit 20540710e83f2873707c284a0c0693f0b57156c4.
Since we've given up on adding PGDLLEXPORT markers to PG_FUNCTION_INFO_V1,
there's no need to remove the legacy compatibility function.  I kept the
documentation changes, though, as they seem appropriate anyway.

contrib/xml2/xpath.c

index 28445be3690922d378f8fb80b81d25324d826b23..ac28996867b36aec60ca77ba5ba477cad5c005c1 100644 (file)
@@ -81,6 +81,51 @@ pgxml_parser_init(PgXmlStrictness strictness)
 }
 
 
+/*
+ * Returns true if document is well-formed
+ *
+ * Note: this has been superseded by a core function.  We still have to
+ * have it in the contrib module so that existing SQL-level references
+ * to the function won't fail; but in normal usage with up-to-date SQL
+ * definitions for the contrib module, this won't be called.
+ */
+
+PG_FUNCTION_INFO_V1(xml_is_well_formed);
+
+Datum
+xml_is_well_formed(PG_FUNCTION_ARGS)
+{
+       text       *t = PG_GETARG_TEXT_P(0);            /* document buffer */
+       bool            result = false;
+       int32           docsize = VARSIZE(t) - VARHDRSZ;
+       xmlDocPtr       doctree;
+       PgXmlErrorContext *xmlerrcxt;
+
+       xmlerrcxt = pgxml_parser_init(PG_XML_STRICTNESS_LEGACY);
+
+       PG_TRY();
+       {
+               doctree = xmlParseMemory((char *) VARDATA(t), docsize);
+
+               result = (doctree != NULL);
+
+               if (doctree != NULL)
+                       xmlFreeDoc(doctree);
+       }
+       PG_CATCH();
+       {
+               pg_xml_done(xmlerrcxt, true);
+
+               PG_RE_THROW();
+       }
+       PG_END_TRY();
+
+       pg_xml_done(xmlerrcxt, false);
+
+       PG_RETURN_BOOL(result);
+}
+
+
 /* Encodes special characters (<, >, &, " and \r) as XML entities */
 
 PG_FUNCTION_INFO_V1(xml_encode_special_chars);