> On 2018-11-9, at 05:07 , Pavel Stehule <pavel.steh...@gmail.com> wrote: > > > > čt 8. 11. 2018 v 15:18 odesílatel Markus Winand <markus.win...@winand.at > <mailto:markus.win...@winand.at>> napsal: > > > On 2018-11-6, at 15:23 , Pavel Stehule <pavel.steh...@gmail.com > > <mailto:pavel.steh...@gmail.com>> wrote: > > > > > > > > po 29. 10. 2018 v 11:45 odesílatel Pavel Stehule <pavel.steh...@gmail.com > > <mailto:pavel.steh...@gmail.com>> napsal: > > > > > > po 29. 10. 2018 v 10:11 odesílatel Pavel Stehule <pavel.steh...@gmail.com > > <mailto:pavel.steh...@gmail.com>> napsal: > > Hi > > > > čt 25. 10. 2018 v 21:47 odesílatel Alvaro Herrera <alvhe...@2ndquadrant.com > > <mailto:alvhe...@2ndquadrant.com>> napsal: > > On 2018-Oct-25, Pavel Stehule wrote: > > > > > I am thinking so I can fix some issues related to XMLTABLE. Please, send > > > me > > > more examples and test cases. > > > > Please see Markus Winand's patch that I referenced upthread. > > > > here is a fix of some XMLTABLE mentioned issues. > > > > this update allows cast boolean to numeric types from XPath expressions > > > > Attached patch solves some cast issues mentioned by Chap. It solves issue > > reported by Markus. I didn't use Markus's code, but it was inspiration for > > me. I found native solution from libxml2. > > > > Regards > > > > Pavel > > Better than my patch. > > But I think the chunk in xml_xmlnodetoxmltype of my patch is still needed — > in one way or the other (see below). > > # select * from xmltable('*' PASSING '<e>pre<!--c1--><?pi > arg?><![CDATA[&ent1]]><n2>&deep</n2>post</e>' COLUMNS x XML PATH > 'node()'); > x > ----------------------------------------- > prec1arg&ent1<n2>&deep</n2>post > (1 row) > > Output is not the original XML. > > I dug a little further and found another case that doesn’t looks right even > with my change to xml_xmlnodetoxmltype applied: > > # select * from xmltable('*' PASSING '<e>pre<!--c1--><?pi > arg?><![CDATA[&ent1]]><n2>&deep</n2>post</e>' COLUMNS x XML PATH '/'); > x > --------------------------- > pre&ent1&deeppost > (1 row) > > Oracle gives in both cases XML. > > To fix that I included XML_DOCUMENT_NODE in the list of nodes that use > xmlNodeDump. Now I wonder if that logic should be reversed to use the > xmlXPathCastNodeToString branch in a few selected cases but default to the > branch xmlNodeDump for all other cases? > > I guess those few cases might be XML_ATTRIBUTE_NODE and XML_TEXT_NODE. > Regression tests are happy with that approach but I don’t think that proves a > lot. > > -markus > > diff --git a/src/backend/utils/adt/xml.c b/src/backend/utils/adt/xml.c > index 37d85f7..7c1f884 100644 > --- a/src/backend/utils/adt/xml.c > +++ b/src/backend/utils/adt/xml.c > @@ -3682,7 +3682,7 @@ xml_xmlnodetoxmltype(xmlNodePtr cur, PgXmlErrorContext > *xmlerrcxt) > { > xmltype *result; > > - if (cur->type == XML_ELEMENT_NODE) > + if (cur->type != XML_ATTRIBUTE_NODE && cur->type != XML_TEXT_NODE) > { > xmlBufferPtr buf; > xmlNodePtr cur_copy; > > > I used your patch and append regress tests. I checked the result against > Oracle. > > Regards > > Pavel
Fine from my side. -markus