Re: SPI_execute_with_args call
От | Yuriy Rusinov |
---|---|
Тема | Re: SPI_execute_with_args call |
Дата | |
Msg-id | CAA5U4sz83DYHq4UJZ4R9H3GD4J7rTe_VwvJRU8a1tT4ep-DQBA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: SPI_execute_with_args call (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: SPI_execute_with_args call
|
Список | pgsql-general |
Thanks a lot, I have corrected and bug was fixed.
On Fri, May 3, 2013 at 6:42 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Yuriy Rusinov <yrusinov@gmail.com> 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.
В списке pgsql-general по дате отправления: