Re: How to modify default Type (TSQuery) behaviour?

From: Łukasz Dejneka <l(dot)dejneka(at)gmail(dot)com>
To: pgsql-hackers(at)postgresql(dot)org
Subject: Re: How to modify default Type (TSQuery) behaviour?
Date: 2010-04-09 17:35:11
Message-ID: z2y4df5da451004091035ye5fc99boa6f6eef696ef61fa@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Oleg Bartunov suggested that I should explicitly use

set search_path=public,pg_catalog;

That's a good tip, as I missed the info in the manual, but it solved
only one instance of my problem, namely

SELECT to_tsquery('cat & dog & mouse'); --this now works as it should

But the other instances still use the default INPUT/OUTPUT functions
and are not affected by schema setting:

SELECT 'cat & dog & mouse'::tsquery; --uses the built in function
SELECT CAST('dogs & cat' AS tsquery); --uses the built in function
SELECT public.to_tsquery('dog " mouse'); --new operator (doublequote),
works fine until OUTPUT function is called and as it is the default
one an error is displayed

Is there any other way I could overwrite the default functions for a
built in type in Postgres?

2010/4/9 Łukasz Dejneka <l(dot)dejneka(at)gmail(dot)com>:
> Hi all
>
> I've asked related question on General list, but got no answer,
> although I have been able to work around that issue a little bit.
> There is one snag I encountered and I have no idea on how to work it
> out.
>
> I need to modify TSQuery object (add another operator and do some
> stuff with it) - this is done and works properly at C code level. Now
> I need to implement changes done in C on PG level. I really do not
> want to make another type, tsquery2 or such...
>
> What I've tried:
> - the manual states that you can create your own data types with
> CREATE TYPE command and alter some of their proprieties with ALTER
> TYPE. But it is not possible to modify INPUT or OUTPUT function.
> - I have created updated PG versions of the functions to_tsquery (the
> CAST function) and tsqueryout (the TYPE OUTPUT) function and they are
> in the "public" schema.
> - I have created a CAST from text to tsquery pointing to
> public.to_tsquery function.
> - I have changed the search_path so the "public" schema is first.
>
> How do I overwrite the default behaviour of Postgres 8.4, so I can
> successfully run the following queries:
>
> --1.
> SELECT 'cat & dog & mouse'::tsquery; --uses the built in function
> SELECT to_tsquery('cat & dog & mouse'); --also uses the built in function
> --but
> SELECT public.to_tsquery('cat & dog & mouse'); --uses new functions
>
> --2.
> SELECT CAST('dogs & cat' AS tsquery); --uses the built in function
> --but
> SELECT CAST('dogs & cat'::text AS tsquery);  --uses new functions
>
> --3.
> SELECT public.to_tsquery('dog " mouse'); --new operator (doublequote),
> works fine until OUTPUT function is called and as it is the default
> one an error is displayed
> --but
> SELECT public.tsqueryout(CAST('dogs " cat'::text AS tsquery)); --uses
> new functions and displays correctly
>
> I thought that setting schema so "public" has priority over all other
> would make PG use those functions in the first place. Also is the
> string between the single quotes in SQL commands not treated as text
> type? Is this why a CAST to ::text make it work in example 2?
>
> Thanks in advance.
>

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Kevin Grittner 2010-04-09 17:50:56 Re: extended operator classes vs. type interfaces
Previous Message Kevin Grittner 2010-04-09 17:28:06 Re: is_absolute_path incorrect on Windows