Re: making tsearch2 dictionaries - Mailing list pgsql-general

From Ben
Subject Re: making tsearch2 dictionaries
Date
Msg-id 1076948978.20248.28.camel@purple
Whole thread Raw
In response to Re: making tsearch2 dictionaries  (Teodor Sigaev <teodor@sigaev.ru>)
Responses Re: making tsearch2 dictionaries  (Teodor Sigaev <teodor@sigaev.ru>)
List pgsql-general
Thanks for the replies. Just to clarify what I was doing, quaicode
looked something like:

phrase = palloc(8);
phrase = "foo\0bar\0";
res = palloc(3);
res[0] = phrase[0];
res[1] = phrase[5];
res[2] = 0;

That crashed. Once I changed it to:

res = palloc(3);
res[0] = palloc(4);
res[0] = "foo\0";
res[1] = palloc(4);
res[2] = "bar\0";
res[3] = 0;

it worked.

Anyway, I'm happy to forget my pain with this if only I could figure out
how to pipe the lexemes from one dictionary into another dictionary. :)

On Mon, 2004-02-16 at 08:09, Teodor Sigaev wrote:
> Excuse me, but I was too brief.
> I mean your lexize method of dictionary should return pointer to array with 3
> elements:
> first should points to "one" C-string, second - to "hundred" C-string and 3rd is
> NULL.
> Array and C-strings should be palloc'ed in short-lived context, because it's
> lives during parse text only.
>
>
>
>
> Tom Lane wrote:
> > Ben <bench@silentmedia.com> writes:
> >
> >>Okay, so I was actually able to answer this question on my own, in a
> >>manner of speaking. It seems the way to do this is to merely return a
> >>larger char** array, with one element for each word. But I was having
> >>trouble with postgres crashing, because (I think) it tries to free each
> >>element independently before using all of them. I had set each element
> >>to a different null-terminated chunk of the same palloc'd memory
> >>segment. Having never written C stored procs before, I take it that's
> >>bad practice?
> >
> >
> > Given Teodor's response, I think the issue is probably that you were
> > palloc'ing in too short-lived a context.  But whatever the problem is,
> > you'll narrow it down a lot faster if you build with --enable-cassert.
> > I wouldn't ever recommend trying to debug C functions without that.
> >
> >             regards, tom lane
> >
> > ---------------------------(end of broadcast)---------------------------
> > TIP 5: Have you checked our extensive FAQ?
> >
> >                http://www.postgresql.org/docs/faqs/FAQ.html


pgsql-general by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: B-Tree in PostgreSQL
Next
From: "Wei Wang"
Date:
Subject: How do I call multiple functions in one trigger?