[HACKERS] converting datum to numeric

2013-06-25 Thread Szymon Guz
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


Re: [HACKERS] converting datum to numeric

2013-06-25 Thread Pavel Stehule
Hello

2013/6/25 Szymon Guz mabew...@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


Re: [HACKERS] converting datum to numeric

2013-06-25 Thread Szymon Guz
On 25 June 2013 08:51, Pavel Stehule pavel.steh...@gmail.com wrote:

 Hello

 2013/6/25 Szymon Guz mabew...@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