Re: [BUGS] BUG #5781: unaccent() function should be marked IMMUTABLE
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
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
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
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
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
"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
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