Thread: initcap incompatibility issue

initcap incompatibility issue

From
nolan@celery.tssi.com
Date:
The initcap function is not completely consistent with Oracle's initcap
function:
    SELECT initcap('alex hyde-whyte');

In Oracle 9.2i this will return 'Alex Hyde-White', in PostgreSQL 7.3.3
it returns 'Alex Hyde-white'.

It looks like a relatively simple change to oracle_compat.c in
backend/utils/adt, but is this a bugfix that can be made during the
pre-beta period for 7.4 or does it need to wait?
--
Mike Nolan


Re: initcap incompatibility issue

From
nolan@celery.tssi.com
Date:
> 
> The initcap function is not completely consistent with Oracle's initcap
> function:
> 
>      SELECT initcap('alex hyde-whyte');
> 
> In Oracle 9.2i this will return 'Alex Hyde-White', in PostgreSQL 7.3.3
> it returns 'Alex Hyde-white'.

No, it doesn't change the 'y' to an 'i', that's a typo in my earlier
note.  As far as I can tell, not capitalizing the first letter after a dash
is the only inconsistency with Oracle's implementation of this function.

If a patch is in order at this time, I will try to produce it, I need to 
learn set up CVS and how to do that anyway.  :-)
--
Mike Nolan


Re: initcap incompatibility issue

From
nolan@celery.tssi.com
Date:
> As far as I can tell, not capitalizing the first letter after a dash
> is the only inconsistency with Oracle's implementation of this function.

Wrong again.  Oracle also capitalizes the first letter after a comma, 
semicolon, colon, period, and both a single and double quote.  (And that's 
all I've tested so far.)

So, I guess I need to write a program to test all possible combinations
to see how incompatible the function is.

Making this change will be a larger patch than I had initially anticipated.

That also brings into question whether this is really a bugfix or a
specification change, a question which is relevant since we're in the 
feature freeze for 7.4.
--
Mike Nolan 


Re: initcap incompatibility issue

From
"scott.marlowe"
Date:
On Wed, 9 Jul 2003 nolan@celery.tssi.com wrote:

> > As far as I can tell, not capitalizing the first letter after a dash
> > is the only inconsistency with Oracle's implementation of this function.
> 
> Wrong again.  Oracle also capitalizes the first letter after a comma, 
> semicolon, colon, period, and both a single and double quote.  (And that's 
> all I've tested so far.)
> 
> So, I guess I need to write a program to test all possible combinations
> to see how incompatible the function is.
> 
> Making this change will be a larger patch than I had initially anticipated.
> 
> That also brings into question whether this is really a bugfix or a
> specification change, a question which is relevant since we're in the 
> feature freeze for 7.4.

It sounds like Oracle is simply regexing for anything that ISN'T a letter 
to initcap right after it.  If that's the case, you could just regex too.



Re: initcap incompatibility issue

From
Tom Lane
Date:
"scott.marlowe" <scott.marlowe@ihs.com> writes:
> On Wed, 9 Jul 2003 nolan@celery.tssi.com wrote:
>> Wrong again.  Oracle also capitalizes the first letter after a comma, 
>> semicolon, colon, period, and both a single and double quote.  (And that's 
>> all I've tested so far.)

> It sounds like Oracle is simply regexing for anything that ISN'T a letter 
> to initcap right after it.  If that's the case, you could just regex too.

Or more likely, use the appropriate ctype.h function (isalpha, probably).

>> That also brings into question whether this is really a bugfix or a
>> specification change, a question which is relevant since we're in the 
>> feature freeze for 7.4.

AFAIK, our specification for this function is "be like Oracle", so it's
a bug fix and fair game for 7.4.  Of course, the sooner you get it in
the more likely we'll see it that way ;-).  Later in beta, only critical
bugfixes will be accepted, and this one surely ain't very critical.
        regards, tom lane


Re: initcap incompatibility issue

From
nolan@celery.tssi.com
Date:
> > It sounds like Oracle is simply regexing for anything that ISN'T a letter 
> > to initcap right after it.  If that's the case, you could just regex too.
> 
> Or more likely, use the appropriate ctype.h function (isalpha, probably).

Having tested it, Oracle capitalizes after all non-alphanumeric characters,
so !isalnum() is the appropriate function.  (That makes it a one-line 
patch on 7.3.3, which I've already tested.)

> AFAIK, our specification for this function is "be like Oracle", so it's
> a bug fix and fair game for 7.4.  Of course, the sooner you get it in
> the more likely we'll see it that way ;-).  Later in beta, only critical
> bugfixes will be accepted, and this one surely ain't very critical.

Now if I can just get CVS working on Redhat 8 and remember how to build
a patch, even a one-liner. :-)
--
Mike Nolan