Обсуждение: Persistent variables between cross-calls in C functions
Dear all:
I could not find any way to store a value in a C function between calls
inside the same session.
For example, the following function doesn't work as expected:
/********************************/
#include "postgres.h"
#include "fmgr.h"
PG_FUNCTION_INFO_V1(next_value);
Datum next_value(PG_FUNCTION_ARGS)
{
static int n;
PG_RETURN_INT32(n);
n++;
}
/********************************/
create function next_value()
returns integer as
'next.so' language C;
/********************************/
Calling
select next_value();
will always return 0,
even if I declare 'n' as a global variable outside the C function.
Thanks a lot.
Fabio Furia Silva
On Tue, 25 Mar 2003, Fabio Furia Silva wrote:
> For example, the following function doesn't work as expected:
>
> /********************************/
> #include "postgres.h"
> #include "fmgr.h"
>
> PG_FUNCTION_INFO_V1(next_value);
>
> Datum next_value(PG_FUNCTION_ARGS)
> {
> static int n;
> PG_RETURN_INT32(n);
> n++;
> }
>
> /********************************/
> create function next_value()
> returns integer as
> 'next.so' language C;
>
> /********************************/
> Calling
>
> select next_value();
>
> will always return 0,
> even if I declare 'n' as a global variable outside the C function.
Which seems right since the n++ is never executed (being after the return
statement). Does it do what you want if you increment first?