Oracle Compatibility (Translate function)

From: Edwin Ramirez <ramirez(at)doc(dot)mssm(dot)edu>
To: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
Subject: Oracle Compatibility (Translate function)
Date: 1999-12-16 14:24:14
Message-ID: 3858F60E.312E3BA3@doc.mssm.edu
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs pgsql-hackers

Hello,

I have modified the translate function in order to improve its
compatibility with Oracle. It now supports the replacement of multiple
characters and it will also shorten the length of the string when characters
are replaced with nothing.

[Note: The arguments are different from the original translate]
Can this function replace the existing function in the distribution?

-------NEW FUNCTION--------------------------------------
text *
translate(text *string, text *from, text *to)
{
text *ret;
char *ptr_ret, *from_ptr, *to_ptr, *source, *target, *temp,
rep;
int m, fromlen, tolen, retlen, i;

if ((string == (text *) NULL) ||
((m = VARSIZE(string) - VARHDRSZ) <= 0))
return string;

target = (char *) palloc(VARSIZE(string) - VARHDRSZ);
source = VARDATA(string);
temp = target;

fromlen = VARSIZE(from) - VARHDRSZ;
from_ptr = VARDATA(from);
tolen = VARSIZE(to) - VARHDRSZ;
to_ptr = VARDATA(to);
retlen = 0;
while (m--)
{
rep = *source;
for(i=0;i<fromlen;i++) {
if(from_ptr[i] == *source) {
if(i < tolen) {
rep = to_ptr[i];
} else {
rep = 0;
}
break;
}
}
if(rep != 0) {
*target++ = rep;
retlen++;
}
source++;
}

ret = (text *) palloc(retlen + VARHDRSZ);
VARSIZE(ret) = retlen + VARHDRSZ;
ptr_ret = VARDATA(ret);
for(i=0;i<retlen;i++) {
*ptr_ret++ = temp[i];
}
pfree(target);
return ret;
}

Thanks,
Edwin S. Ramirez

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Kimmo Lahdensivu 1999-12-16 21:02:01 Inserting bug
Previous Message Bruce Momjian 1999-12-16 01:43:11 Re: [BUGS] uniqueness not always correct

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 1999-12-16 14:25:51 Re: [HACKERS] initdb / pg_version
Previous Message Tom Lane 1999-12-16 14:23:48 Re: AW: AW: [HACKERS] SELECT ... AS ... names in WHERE/GROUP BY/HAVIN G