Oracle Compatibility (Translate function)
От | Edwin Ramirez |
---|---|
Тема | Oracle Compatibility (Translate function) |
Дата | |
Msg-id | 3858F60E.312E3BA3@doc.mssm.edu обсуждение исходный текст |
Ответ на | Re: [HACKERS] Re: [BUGS] uniqueness not always correct (Bruce Momjian <pgman@candle.pha.pa.us>) |
Список | 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
В списке pgsql-hackers по дате отправления: