On Mon, 4 Dec 2006, Stephen Woodbridge wrote:
Hi all,
I was wondering if anyone has unac.c which is the lib used in Text::Unaccent
built and wrap as a plpgsql stored procedure not using plperl. Or maybe there
is another general solution that I am no aware of.
I have one, don't remember whet did I get it.
Thanks,
-Steve
---------------------------(end of broadcast)---------------------------
TIP 6: explain analyze is your friend
Regards,
Oleg
_____________________________________________________________
Oleg Bartunov, Research Scientist, Head of AstroNet (www.astronet.ru),
Sternberg Astronomical Institute, Moscow University, Russia
Internet: [email protected], http://www.sai.msu.su/~megera/
phone: +007(495)939-16-83, +007(495)939-23-83/*
* pg_unac.c
*
* Author: Nhan NGO DINH
* Version: 1.1
* Description: PostgreSQL external function
* unaccent the given string
*
*/
#include <stdio.h>
#include <postgres.h>
#include <string.h>
#include <fmgr.h>
#include <unac.h>
PG_FUNCTION_INFO_V1(unac);
Datum unac(PG_FUNCTION_ARGS) {
text *str = PG_GETARG_TEXT_P(0);
text *result;
int tlen, nlen;
char *tstr, *nstr;
tlen = VARSIZE(str) - VARHDRSZ;
tstr = (char *) palloc(tlen + 1);
memcpy(tstr, VARDATA(str), tlen);
tstr[tlen] = '\0';
nstr = NULL; nlen = 0;
unac_string("UTF-8", tstr, strlen(tstr), &nstr, &nlen);
/* It may happen that unac_string returns NULL, because iconv
* can't translate the input string. In this case we output
* the string as it is. */
if (nstr == NULL) nstr = tstr;
result = (text *) palloc(strlen(nstr) + VARHDRSZ);
memcpy(VARDATA(result), nstr, strlen(nstr));
VARATT_SIZEP(result) = strlen(nstr) + VARHDRSZ;
PG_RETURN_TEXT_P(result);
}
---------------------------(end of broadcast)---------------------------
TIP 2: Don't 'kill -9' the postmaster