converting datum to numeric
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?
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).
And my main question: is there any documentation about those internal
functions, which use and when etc?
thanks
Szymon
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
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers
On 25 June 2013 08:51, Pavel Stehule <pavel.stehule@gmail.com> wrote:
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.
Hi,
thanks for the information. So I will leave speeding it up for this moment.
thanks,
Szymon