Re: SPI_execute_with_args call - Mailing list pgsql-general

From Yuriy Rusinov
Subject Re: SPI_execute_with_args call
Date
Msg-id CAA5U4sy68ZtEuCebs7vHc4q-BqL-WOh+b2VcJYXpbqJXikCmwQ@mail.gmail.com
Whole thread Raw
In response to Re: SPI_execute_with_args call  (Yuriy Rusinov <yrusinov@gmail.com>)
List pgsql-general
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@gmail.com> wrote:
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:
> 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.



--
Best regards,
Sincerely yours,
Yuriy Rusinov.

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: Composite fields and the query planner
Next
From: Tim Uckun
Date:
Subject: Shortcut evaluation in OR or IN