Re: [BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE

2010-12-27 Thread Bruce Momjian
Robert Haas wrote:
> On Wed, Dec 22, 2010 at 8:45 PM, Bruce Momjian  wrote:
> > Tom Lane wrote:
> >> "Grant Hutchins and Peter Jaros"  writes:
> >> > The unaccent(text) function supplied by contrib/unaccent is marked 
> >> > VOLATILE.
> >> > This prevents it from being used in indexes. We believe that the function
> >> > meets the requirements to be marked IMMUTABLE.
> >>
> >> No, it most certainly doesn't. ?It depends on the behavior of a
> >> dictionary that it has no hard-wired connection to, so the specific
> >> behavior of the dictionary is uncertain. ?Even if you're willing to
> >> assume that the dictionary being used is the one defined by this
> >> module, that dictionary depends on external configuration files
> >> which are easily changeable.
> >>
> >> Arguably it'd be reasonable to change the function's marking from
> >> volatile to stable, but that's not going to be enough to allow use in
> >> indexes.
> >
> > So, should we change unaccent() from VOLATILE to STABLE?
> 
> Sounds like it, but it doesn't sound like it will help much.  :-(

OK, done, with attached, applied patch.

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/contrib/unaccent/unaccent.sql.in b/contrib/unaccent/unaccent.sql.in
index 7e397cc..6d712e7 100644
*** /tmp/l3zFae_unaccent.sql.in	Mon Dec 27 15:33:55 2010
--- contrib/unaccent/unaccent.sql.in	Mon Dec 27 15:24:16 2010
*** SET search_path = public;
*** 6,17 
  CREATE OR REPLACE FUNCTION unaccent(regdictionary, text)
  	RETURNS text
  	AS 'MODULE_PATHNAME', 'unaccent_dict'
! 	LANGUAGE C STRICT;
  
  CREATE OR REPLACE FUNCTION unaccent(text)
  	RETURNS text
  	AS 'MODULE_PATHNAME', 'unaccent_dict'
! 	LANGUAGE C STRICT;
  
  CREATE OR REPLACE FUNCTION unaccent_init(internal)
  	RETURNS internal
--- 6,17 
  CREATE OR REPLACE FUNCTION unaccent(regdictionary, text)
  	RETURNS text
  	AS 'MODULE_PATHNAME', 'unaccent_dict'
! 	LANGUAGE C STABLE STRICT;
  
  CREATE OR REPLACE FUNCTION unaccent(text)
  	RETURNS text
  	AS 'MODULE_PATHNAME', 'unaccent_dict'
! 	LANGUAGE C STABLE STRICT;
  
  CREATE OR REPLACE FUNCTION unaccent_init(internal)
  	RETURNS internal

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE

2010-12-24 Thread Robert Haas
On Wed, Dec 22, 2010 at 8:45 PM, Bruce Momjian  wrote:
> Tom Lane wrote:
>> "Grant Hutchins and Peter Jaros"  writes:
>> > The unaccent(text) function supplied by contrib/unaccent is marked 
>> > VOLATILE.
>> > This prevents it from being used in indexes. We believe that the function
>> > meets the requirements to be marked IMMUTABLE.
>>
>> No, it most certainly doesn't.  It depends on the behavior of a
>> dictionary that it has no hard-wired connection to, so the specific
>> behavior of the dictionary is uncertain.  Even if you're willing to
>> assume that the dictionary being used is the one defined by this
>> module, that dictionary depends on external configuration files
>> which are easily changeable.
>>
>> Arguably it'd be reasonable to change the function's marking from
>> volatile to stable, but that's not going to be enough to allow use in
>> indexes.
>
> So, should we change unaccent() from VOLATILE to STABLE?

Sounds like it, but it doesn't sound like it will help much.  :-(

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

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE

2010-12-22 Thread Bruce Momjian
Tom Lane wrote:
> "Grant Hutchins and Peter Jaros"  writes:
> > The unaccent(text) function supplied by contrib/unaccent is marked VOLATILE.
> > This prevents it from being used in indexes. We believe that the function
> > meets the requirements to be marked IMMUTABLE.
> 
> No, it most certainly doesn't.  It depends on the behavior of a
> dictionary that it has no hard-wired connection to, so the specific
> behavior of the dictionary is uncertain.  Even if you're willing to
> assume that the dictionary being used is the one defined by this
> module, that dictionary depends on external configuration files
> which are easily changeable.
> 
> Arguably it'd be reasonable to change the function's marking from
> volatile to stable, but that's not going to be enough to allow use in
> indexes.

So, should we change unaccent() from VOLATILE to STABLE?

-- 
  Bruce Momjian  http://momjian.us
  EnterpriseDB http://enterprisedb.com

  + It's impossible for everything to be true. +

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE

2010-12-04 Thread Tom Lane
Greg Stark  writes:
> On Fri, Dec 3, 2010 at 4:50 AM, Tom Lane  wrote:
>> Even if you're willing to
>> assume that the dictionary being used is the one defined by this
>> module, that dictionary depends on external configuration files
>> which are easily changeable.

> Don't we have precedent for this in assuming that things like tsearch
> dictionaries and parsers and system locales don't change underneath
> us?

The precedent is to assume such things are stable, not immutable.

Even if you want to assume that, the implementation of unaccent(text) is
such that its results depend on search_path, which is *definitely* not
acceptable for an immutable function.  It would need a better way of
tying the function to the dictionary.

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE

2010-12-04 Thread Greg Stark
On Fri, Dec 3, 2010 at 4:50 AM, Tom Lane  wrote:
> Even if you're willing to
> assume that the dictionary being used is the one defined by this
> module, that dictionary depends on external configuration files
> which are easily changeable.

Don't we have precedent for this in assuming that things like tsearch
dictionaries and parsers and system locales don't change underneath
us?


-- 
greg

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


Re: [BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE

2010-12-02 Thread Tom Lane
"Grant Hutchins and Peter Jaros"  writes:
> The unaccent(text) function supplied by contrib/unaccent is marked VOLATILE.
> This prevents it from being used in indexes. We believe that the function
> meets the requirements to be marked IMMUTABLE.

No, it most certainly doesn't.  It depends on the behavior of a
dictionary that it has no hard-wired connection to, so the specific
behavior of the dictionary is uncertain.  Even if you're willing to
assume that the dictionary being used is the one defined by this
module, that dictionary depends on external configuration files
which are easily changeable.

Arguably it'd be reasonable to change the function's marking from
volatile to stable, but that's not going to be enough to allow use in
indexes.

regards, tom lane

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs


[BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE

2010-12-02 Thread Grant Hutchins and Peter Jaros

The following bug has been logged online:

Bug reference:  5781
Logged by:  Grant Hutchins and Peter Jaros
Email address:  gr...@pivotallabs.com
PostgreSQL version: 9.0.1
Operating system:   Mac OS X 10.6.4
Description:unaccent() function should be marked IMMUTABLE
Details: 

The unaccent(text) function supplied by contrib/unaccent is marked VOLATILE.
This prevents it from being used in indexes. We believe that the function
meets the requirements to be marked IMMUTABLE.

=# CREATE TABLE foo ();
CREATE TABLE
=# CREATE INDEX bar ON foo ( unaccent('baz') );
ERROR:  functions in index expression must be marked IMMUTABLE
=# ALTER FUNCTION unaccent(text) IMMUTABLE;
ALTER FUNCTION
=# CREATE INDEX bar ON foo ( unaccent('baz') );
CREATE INDEX

-- 
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs