Re: [PATCH] Add XMLEXISTS function from the SQL/XML standard - Mailing list pgsql-hackers

From mike@mlfowler.com
Subject Re: [PATCH] Add XMLEXISTS function from the SQL/XML standard
Date
Msg-id 20100601170634.v9cz5vrx1cg4wcw8@www.mlfowler.com
Whole thread Raw
In response to Re: [PATCH] Add XMLEXISTS function from the SQL/XML standard  (Peter Eisentraut <peter_e@gmx.net>)
List pgsql-hackers
Quoting Peter Eisentraut <peter_e@gmx.net>:

> It would be nice to make XMLEXISTS work as in the standard, seeing how
> many others are providing the same interface.
>
...
>
> I think providing XPath is enough, at least for now.
>

Hi Peter,
From piecing together sections 8.4 (<XML exists predicate>) and 6.18
(<XML query>), I believe the full call signature would be (apologies
if my bracketing isn't right):

XMLEXISTS
( xquery_expression [  PASSING {BY REF|BY VALUE}    { (xml_expression [BY REF|BY VALUE])      | (xml_expression AS
identifier)   }    [, ...] ] 
)

Seeing as we're only intereseted in XPath for the moment and most of
the syntax above is only really relevant to XQuery, I would suggest
the following as accepatable until full XQuery support comes:

XMLEXISTS
( xpath_expression  [   PASSING BY REF xml_expression [BY REF]  ]
)

There is one drawback in this approach, namely xml namespace support.
I think borrowing the solution used in the xpath() (i.e. passing a
nsarray) is out of the question as it won't be future proofed against
full XQuery support. This is because the declaration of namespaces in
XQuery is actually part of the query itself. I also think it
inappropriate to attempt to parse the xpath_expression looking for
XQuery style namespace declartions. So I think we ignore declared
namespace support for the moment and just get the syntax correct ready
for XQuery support in the hopefully near future.

Do you agree with what I have proposed?

Regards,
--
Mike Fowler




pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: VACUUM messages without newlines
Next
From: Jan Wieck
Date:
Subject: Re: Exposing the Xact commit order to the user