Re: PATCH: CITEXT 2.0 v3 - Mailing list pgsql-hackers

From Tom Lane
Subject Re: PATCH: CITEXT 2.0 v3
Date
Msg-id 11124.1215969366@sss.pgh.pa.us
Whole thread Raw
In response to Re: PATCH: CITEXT 2.0 v3  ("David E. Wheeler" <david@kineticode.com>)
Responses Re: PATCH: CITEXT 2.0 v3  ("David E. Wheeler" <david@kineticode.com>)
List pgsql-hackers
"David E. Wheeler" <david@kineticode.com> writes:
> When I deleted any of the others, I got errors like this:

> psql:sql/citext.sql:865: ERROR:  function length(citext) is not unique
> LINE 1: SELECT is( length( name ), length(name::text), 'length("' ||...
>                     ^
> HINT:  Could not choose a best candidate function. You might need to  
> add explicit type casts.

Hmm.  I think what that actually means is that the cast from citext to
bpchar should be AS ASSIGNMENT rather than IMPLICIT.  What is happening
is that the system can't figure out whether to use length(text) or
length(bpchar) when presented with a citext argument.  I had been
thinking yesterday that it would automatically prefer length(text)
because text is a "preferred type", but after tracing through it I see
that that doesn't happen because citext is not thought to be of the
string category.  (We really need a way to let user-defined types
specify their category...)

The fact that you need all these piggyback functions is a red flag
because what it implies is that citext will not work nicely for any
situation where both text and bpchar functions have been provided
--- and that includes user-added functions, so it's hopeless to think
that you can get to a solution this way.  Downgrading the cast seems
like the right thing to me.

The implicit cast to varchar is a bit worrisome because it creates the
same issue if someone has provided both varchar and text versions of a
function.  However, that seems a bit pointless given the lack of
semantic difference, and I suspect that a lot of user-written functions
come only in varchar variants --- so on balance my recommendation is to
keep that one as implicit.
        regards, tom lane


pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: COPY command, support for mixing binary and text columns?
Next
From: Tom Lane
Date:
Subject: Re: PATCH: CITEXT 2.0 v3