Hello !
There is one's more question, which way I have to determine that void * randBuf acceptable or not for bytea type ?
Thanks in advance.
On Fri, May 3, 2013 at 9:44 PM, Yuriy Rusinov <yrusinov@xxxxxxxxx> wrote:
Thanks a lot, I have corrected and bug was fixed.
On Fri, May 3, 2013 at 6:42 PM, Tom Lane <tgl@xxxxxxxxxxxxx> wrote:
Yuriy Rusinov <yrusinov@xxxxxxxxx> writes:This is a hard, error-prone, and ultimately incorrect way to do
> In C-function I do
> size_t nr_ins = strlen ("insert into rand_state (state_rand) values ($1);");
> char * r_sql = (char *) palloc (nr_ins + 1);
> strncpy (r_sql, "insert into rand_state (state_rand) values ($1);", nr_ins);
pstrdup() --- you're not ensuring that the new string is
null-terminated.
Didn't your compiler give you a warning about that? PointerGetDatum
> Datum * val = PointerGetDatum (randBuf);
produces a Datum, not a pointer to a Datum. You'd need something more
like
Datum val[1];
val[0] = PointerGetDatum (randBuf);
This is assuming that randBuf is even of the right format to be a bytea
value, which is unclear from your extract.
And that's just wrong. Personally I'd just pass NULL to
> const char * nulls = "NULL";
SPI_execute_with_args since you don't have any null values to pass, but
if you don't want to do that you'd need something more like
char nulls[1];
nulls[0] = ' ';
(hmm, it looks like the SPI documentation leaves something to be desired
here --- the SPI_execute_with_args page, at least, isn't explaining the
convention for elements of the nulls[] array)
A quick grep says there's a usage in src/pl/plpgsql/src/pl_exec.c
> Could you give some work examples for SPI_execute_with_args because I
> didn't find them in documentation.
regards, tom lane
--
Best regards,
Sincerely yours,
Yuriy Rusinov.
Best regards,
Sincerely yours,
Yuriy Rusinov.