From: | Denis Gasparin <denis(at)edistar(dot)com> |
---|---|
To: | pgsql-general(at)postgresql(dot)org |
Subject: | Getting Text data as C string |
Date: | 2007-03-12 11:47:34 |
Message-ID: | 45F53DD6.4020000@edistar.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Hi.
I wrote a simple c stored procedure that accepts only one text parameter
that i want to convert to a c string.
The problem is that i obtain the C string correctly but with spurious
characters at the end... I use these calls to obtain the c string:
text *t_myfield = PG_GETARG_TEXT_P(0);
char *str_myfield = VARDATA(t_myfield);
Here it is the source:
#include "postgres.h" /* general Postgres declarations */
#include "fmgr.h" /* for argument/result macros */
#include "executor/executor.h" /* for GetAttributeByName() */
#include <math.h>
#include "libpq/pqformat.h" /* needed for send/recv functions */
Datum test_text(PG_FUNCTION_ARGS);
PG_FUNCTION_INFO_V1(test_text);
Datum test_text(PG_FUNCTION_ARGS) {
text *t_myfield = PG_GETARG_TEXT_P(0);
char *str_myfield = VARDATA(t_myfield);
elog(NOTICE,"(%s)",str_myfield);
PG_RETURN_TEXT_P(t_myfield);
}
This is the sql to create the function:
CREATE or replace FUNCTION test_text(text)
RETURNS text
AS '/your_path_to_sp.so/sp.so'
LANGUAGE C IMMUTABLE STRICT;
The output is (note the trailing spurious character in the NOTICE line):
NOTICE: (test12345678?)
test_text
--------------
test12345678
I expected:
NOTICE: (test12345678)
test_text
--------------
test12345678
Where is the error?
Thank you,
Denis
From | Date | Subject | |
---|---|---|---|
Next Message | Douglas McNaught | 2007-03-12 12:38:52 | Re: DBD::Pg/perl question, kind of... |
Previous Message | cedric | 2007-03-12 10:38:09 | Re: Tsearch2 / Create rule on select |