Re: How to overload POSITION

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: How to overload POSITION
Дата
Msg-id 2309.1100638560@sss.pgh.pa.us
обсуждение исходный текст
Ответ на How to overload POSITION  (Troels Arvin <troels@arvin.dk>)
Список pgsql-general
Troels Arvin <troels@arvin.dk> writes:
> I assume this is because the POSITION function uses "IN" to separate
> arguments, in stead of a comma. Is there a way to overload it?

Double-quote "position" in the create function command --- it's a
keyword.

Be aware also of the argument order gotcha.  Per gram.y:

            | POSITION '(' position_list ')'
                {
                    /* position(A in B) is converted to position(B, A) */
                    FuncCall *n = makeNode(FuncCall);
                    n->funcname = SystemFuncName("position");
                    n->args = $3;
                    n->agg_star = FALSE;
                    n->agg_distinct = FALSE;
                    $$ = (Node *)n;
                }

Come to think of it, you'll also need to create your function in the
pg_catalog schema, because that's implied by SystemFuncName().  Which
means it won't get dumped by pg_dump.  How wedded are you to being able
to say "IN"?

            regards, tom lane

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

Предыдущее
От: Greg Stark
Дата:
Сообщение: Re: OID's
Следующее
От: Troels Arvin
Дата:
Сообщение: Re: How to overload POSITION