Re: Adding XMLEXISTS to the grammar

Поиск
Список
Период
Сортировка
От Robert Haas
Тема Re: Adding XMLEXISTS to the grammar
Дата
Msg-id AANLkTilTBButVNTSXHgxwoQmuKVjAY7Pe8oT-LKTZww5@mail.gmail.com
обсуждение исходный текст
Ответ на Adding XMLEXISTS to the grammar  (Mike Fowler <mike@mlfowler.com>)
Ответы Re: Adding XMLEXISTS to the grammar  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: Adding XMLEXISTS to the grammar  (Mike Fowler <mike@mlfowler.com>)
Список pgsql-hackers
On Wed, Jun 9, 2010 at 6:32 AM, Mike Fowler <mike@mlfowler.com> wrote:
> I've been working to improve the syntax of the XMLEXISTS function that I put
> a patch forward for and have been attempting to get my head around how you
> modify the grammar. I admit I'm not getting much anywhere probably as I
> don't know bison but I'm starting to wonder if it's worth the pain given
> recent comments on this list about not changing the grammar for JSON
> support.

I think we're willing to change the parser to comply with the SQL
standard, but not for add-on datatypes.

> At this point I can see a way of implementing the following
> abridged syntax (abridged as I'm not doing full XQuery support at this
> stage) in a conventional plain function call by handling the
> PG_FUNCTION_ARGS approriately, but would this acceptable?
>
> XMLEXISTS
> (
> xpath_expression
>  [
>  PASSING BY REF xml_expression [BY REF]
>  ]
> )

I don't see how you're going to make this work without parser changes,
and even if you can I think it would be too ugly to consider.

> In case it isn't, and indeed to help me with the XML schema validation work
> I'm doing, I would still like some help on how the grammar works. From what
> I've greped and seen in the comments you need to modify the following files:
>
> - src/backend/parser/gram.y
> - src/backend/parser/parse_expr.c
> - src/backend/utils/ruleutils.c
> - src/include/parser/kwlist.h
>
> From what I can tell, you add the keywords to the lists in gram.y and
> kwlist.h. At the appropriate place in gram.y you define the syntax and pull
> out what you need and stuff it into a node (in my case using the
> makeXmlExpr). You then modify parse_expr.c and ruleutils.c to handle the new
> values in the fields of the XmlExpr node. Assuming I'm right so far, the
> step I'm failing to figure out is where the actual c function that
> implements the function gets called/associated within the grammar. What am I
> missing?

Look at how the POSITION() pseudofunction is defined around gram.y
line 9651.  Essentially any special syntax of this type gets converted
to a regular function call internally.  So in your case I think there
will be some function that gets called something ike this:

xmlexists(xpath_expression, xml_expression)

...but the grammar can be modified to allow a different syntax for
that function call.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise Postgres Company


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Robert Haas
Дата:
Сообщение: Re: hstore ==> and deprecate =>
Следующее
От: Tom Lane
Дата:
Сообщение: Re: [BUGS] Server crash while trying to read expression using pg_get_expr()