Re: SPI_execute_with_args call

From: Yuriy Rusinov <yrusinov(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: POSTGRES <pgsql-general(at)postgresql(dot)org>
Subject: Re: SPI_execute_with_args call
Date: 2013-05-03 17:44:04
Message-ID: CAA5U4sz83DYHq4UJZ4R9H3GD4J7rTe_VwvJRU8a1tT4ep-DQBA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thanks a lot, I have corrected and bug was fixed.

On Fri, May 3, 2013 at 6:42 PM, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Yuriy Rusinov <yrusinov(at)gmail(dot)com> writes:
> > 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);
>
> This is a hard, error-prone, and ultimately incorrect way to do
> pstrdup() --- you're not ensuring that the new string is
> null-terminated.
>
> > Datum * val = PointerGetDatum (randBuf);
>
> Didn't your compiler give you a warning about that? PointerGetDatum
> 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.
>
> > const char * nulls = "NULL";
>
> And that's just wrong. Personally I'd just pass NULL to
> 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)
>
> > Could you give some work examples for SPI_execute_with_args because I
> > didn't find them in documentation.
>
> A quick grep says there's a usage in src/pl/plpgsql/src/pl_exec.c
>
> regards, tom lane
>

--
Best regards,
Sincerely yours,
Yuriy Rusinov.

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Kirk Wythers 2013-05-03 17:51:20 How to INSERT INTO one table from another table, WHERE
Previous Message Doug Gorley 2013-05-03 17:41:53 How to monitor recovery on Windows?