Thread: converting datum to numeric
<div dir="ltr">Hi,<div style="style">I've got a couple of questions.</div><div style="style"><br /></div><div style="style">Iwas using numeric_out like this:</div><div style="style"><br /></div><div style="style">DatumGetCString(DirectFunctionCall1(numeric_out,d));<br /></div><div style="style"><br /></div><div style="style">Whydo I have to use DirectFunctionCall1 instead of calling numeric_out?</div><div style="style"><br /></div><divstyle="style"><br /></div><div style="style">I was suggested to use numeric_send instead of numeric_out, howeverwhen changing the function names in the above example, the whole expression returns 8. Always 8. I check with:</div><divstyle="style"><br /></div><div style="style">char *x = DatumGetCString(DirectFunctionCall1(numeric_send, d));<br/></div><div style="style">PLy_elog(NOTICE, x).</div><div style="style"><br /></div><div style="style"><br /></div><divstyle="style">And my main question: is there any documentation about those internal functions, which use andwhen etc?</div><div style="style"><br /></div><div style="style">thanks</div><div style="style">Szymon</div></div>
Hello 2013/6/25 Szymon Guz <mabewlun@gmail.com>: > Hi, > I've got a couple of questions. > > I was using numeric_out like this: > > DatumGetCString(DirectFunctionCall1(numeric_out, d)); > > Why do I have to use DirectFunctionCall1 instead of calling numeric_out? numeric_out functions doesn't use C calling convention - it use own convention for support NULL values and some other informations. DirectFunctionCall1 is simple function that transform C like call to PostgreSQL call. You can do it directly, but you have to prepare necessary structures. > > > I was suggested to use numeric_send instead of numeric_out, however when > changing the function names in the above example, the whole expression > returns 8. Always 8. I check with: > > char *x = DatumGetCString(DirectFunctionCall1(numeric_send, d)); > PLy_elog(NOTICE, x). > "send" functions are used for binary protocol - so it is nonsense. > > And my main question: is there any documentation about those internal > functions, which use and when etc? source code :( and http://www.postgresql.org/docs/9.2/static/xfunc-c.html src/backend/utils/atd/* is very useful and contains lot of materials for study some examples of usage you can find in contrib examples http://www.postgresql.org/docs/9.2/static/extend.html Regards Pavel > > thanks > Szymon
On 25 June 2013 08:51, Pavel Stehule <pavel.stehule@gmail.com> wrote:
Hello
2013/6/25 Szymon Guz <mabewlun@gmail.com>:> Hi,numeric_out functions doesn't use C calling convention - it use own
> I've got a couple of questions.
>
> I was using numeric_out like this:
>
> DatumGetCString(DirectFunctionCall1(numeric_out, d));
>
> Why do I have to use DirectFunctionCall1 instead of calling numeric_out?
convention for support NULL values and some other informations.
DirectFunctionCall1 is simple function that transform C like call to
PostgreSQL call. You can do it directly, but you have to prepare
necessary structures."send" functions are used for binary protocol - so it is nonsense.
>
>
> I was suggested to use numeric_send instead of numeric_out, however when
> changing the function names in the above example, the whole expression
> returns 8. Always 8. I check with:
>
> char *x = DatumGetCString(DirectFunctionCall1(numeric_send, d));
> PLy_elog(NOTICE, x).
>
Hi,
thanks for the information. So I will leave speeding it up for this moment.
thanks,
Szymon