• Tom Lane's avatar
    Accept XML documents when xmloption = content, as required by SQL:2006+. · 8d1dadb2
    Tom Lane authored
    Previously we were using the SQL:2003 definition, which doesn't allow
    this, but that creates a serious dump/restore gotcha: there is no
    setting of xmloption that will allow all valid XML data.  Hence,
    switch to the 2006 definition.
    
    Since libxml doesn't accept <!DOCTYPE> directives in the mode we
    use for CONTENT parsing, the implementation is to detect <!DOCTYPE>
    in the input and switch to DOCUMENT parsing mode.  This should not
    cost much, because <!DOCTYPE> should be close to the front of the
    input if it's there at all.  It's possible that this causes the
    error messages for malformed input to be slightly different than
    they were before, if said input includes <!DOCTYPE>; but that does
    not seem like a big problem.
    
    In passing, buy back a few cycles in parsing of large XML documents
    by not doing strlen() of the whole input in parse_xml_decl().
    
    Back-patch because dump/restore failures are not nice.  This change
    shouldn't break any cases that worked before, so it seems safe to
    back-patch.
    
    Chapman Flack (revised a bit by me)
    
    Discussion: https://postgr.es/m/CAN-V+g-6JqUQEQZ55Q3toXEN6d5Ez5uvzL4VR+8KtvJKj31taw@mail.gmail.com
    8d1dadb2
xml.out 57.7 KB