| From: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
|---|---|
| To: | Adrian Schreyer <ams214(at)cam(dot)ac(dot)uk> |
| Cc: | pgsql-general(at)postgresql(dot)org |
| Subject: | Re: Best way to construct PostgreSQL ArrayType (_int4) from C int array |
| Date: | 2011-04-27 13:49:34 |
| Message-ID: | BANLkTi=8mc6+5t+BYXkaMNhp6miChNS=7Q@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-general |
On Wed, Apr 27, 2011 at 6:02 AM, Adrian Schreyer <ams214(at)cam(dot)ac(dot)uk> wrote:
> At the moment I am using the following code to construct a PostgreSQL
> array from a C array in my C extension but I am not so sure if this is
> really the best solution:
>
> const int *data = array.data(); // C array
> Datum *d = (Datum *) palloc(sizeof(Datum) * size);
>
> for (int i = 0; i < size; i++) d[i] = Int32GetDatum(data[i]);
>
> ArrayType *a = construct_array(d, size, INT4OID, sizeof(int4), true, 'i');
>
> Is this okay or is there a better solution (existing function in the
> PostgreSQL source for example)?
That's pretty much the best way AFAIK. Int32GetDatum doesn't do
anything fancy -- it's just a 32 bit mask/assignment. constructing
the array at once is going to be a lot better than incrementally
creating it. Do you expect the arrays to be large, say bigger than
10k elements?
merlin
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Raghavendra | 2011-04-27 14:01:30 | Re: Re: Create Database automatacally after silent installation of postgresql. ? |
| Previous Message | Thomas Harold | 2011-04-27 13:16:36 | PHP and PostgreSQL 9.0, pg_connect fails to connect |